kmdimainfrm.h
00001 //---------------------------------------------------------------------------- 00002 // filename : kmdimainfrm.h 00003 //---------------------------------------------------------------------------- 00004 // Project : KDE MDI extension 00005 // 00006 // begin : 07/1999 by Szymon Stefanek as part of kvirc 00007 // (an IRC application) 00008 // changes : 09/1999 by Falk Brettschneider to create an 00009 // - 06/2000 stand-alone Qt extension set of 00010 // classes and a Qt-based library 00011 // : 02/2000 by Massimo Morin (mmorin@schedsys.com) 00012 // 2000-2003 maintained by the KDevelop project 00013 // patches : */2000 by Lars Beikirch (Lars.Beikirch@gmx.net) 00014 // : 01/2003 by Jens Zurheide (jens.zurheide@gmx.de) 00015 // 00016 // copyright : (C) 1999-2003 by Falk Brettschneider 00017 // and 00018 // Szymon Stefanek (stefanek@tin.it) 00019 // email : falkbr@kdevelop.org (Falk Brettschneider) 00020 //---------------------------------------------------------------------------- 00021 // 00022 //---------------------------------------------------------------------------- 00023 // 00024 // This program is free software; you can redistribute it and/or modify 00025 // it under the terms of the GNU Library General Public License as 00026 // published by the Free Software Foundation; either version 2 of the 00027 // License, or (at your option) any later version. 00028 // 00029 //---------------------------------------------------------------------------- 00030 00031 #ifndef _KMDIMAINFRM_H_ 00032 #define _KMDIMAINFRM_H_ 00033 00034 #include <kparts/dockmainwindow.h> 00035 #include <kmenubar.h> 00036 #include <kpopupmenu.h> 00037 00038 #include <qptrlist.h> 00039 #include <qrect.h> 00040 #include <qapplication.h> 00041 #include <qdom.h> 00042 #include <qguardedptr.h> 00043 00044 #include "kmditaskbar.h" 00045 #include "kmdichildarea.h" 00046 #include "kmdichildview.h" 00047 #include "kmdiiterator.h" 00048 #include "kmdilistiterator.h" 00049 #include "kmdinulliterator.h" 00050 #include "kmditoolviewaccessor.h" 00051 00052 class QTimer; 00053 class QPopupMenu; 00054 class QMenuBar; 00055 00056 00057 class QToolButton; 00058 00059 namespace KMDIPrivate 00060 { 00061 class KMDIGUIClient; 00062 } 00063 00064 class KMdiDockContainer; 00065 class KMdiMainFrmPrivate; 00066 00072 class KMDI_EXPORT KMdiViewCloseEvent : public QCustomEvent 00073 { 00074 public: 00075 KMdiViewCloseEvent( KMdiChildView* pWnd ) : QCustomEvent( QEvent::User, pWnd ) {} 00076 }; 00077 00239 class KMDI_EXPORT KMdiMainFrm : public KParts::DockMainWindow 00240 { 00241 friend class KMdiChildView; 00242 friend class KMdiTaskBar; 00243 Q_OBJECT 00244 00245 friend class KMdiToolViewAccessor; 00246 // attributes 00247 protected: 00248 KMdi::MdiMode m_mdiMode; 00249 KMdiChildArea *m_pMdi; 00250 KMdiTaskBar *m_pTaskBar; 00251 QPtrList<KMdiChildView> *m_pDocumentViews; 00252 QMap<QWidget*, KMdiToolViewAccessor*> *m_pToolViews; 00253 KMdiChildView *m_pCurrentWindow; 00254 QPopupMenu *m_pWindowPopup; 00255 QPopupMenu *m_pTaskBarPopup; 00256 QPopupMenu *m_pWindowMenu; 00257 QPopupMenu *m_pDockMenu; 00258 QPopupMenu *m_pMdiModeMenu; 00259 QPopupMenu *m_pPlacingMenu; 00260 KMenuBar *m_pMainMenuBar; 00261 00262 QPixmap *m_pUndockButtonPixmap; 00263 QPixmap *m_pMinButtonPixmap; 00264 QPixmap *m_pRestoreButtonPixmap; 00265 QPixmap *m_pCloseButtonPixmap; 00266 00267 QToolButton *m_pUndock; 00268 QToolButton *m_pMinimize; 00269 QToolButton *m_pRestore; 00270 QToolButton *m_pClose; 00271 QPoint m_undockPositioningOffset; 00272 bool m_bMaximizedChildFrmMode; 00273 int m_oldMainFrmHeight; 00274 int m_oldMainFrmMinHeight; 00275 int m_oldMainFrmMaxHeight; 00276 static KMdi::FrameDecor m_frameDecoration; 00277 bool m_bSDIApplication; 00278 KDockWidget* m_pDockbaseAreaOfDocumentViews; 00279 QDomDocument* m_pTempDockSession; 00280 bool m_bClearingOfWindowMenuBlocked; 00281 00282 QTimer* m_pDragEndTimer; 00283 00284 bool m_bSwitching; 00285 00286 KDockWidget* m_leftContainer; 00287 KDockWidget* m_rightContainer; 00288 KDockWidget* m_topContainer; 00289 KDockWidget* m_bottomContainer; 00290 00291 00292 private: 00293 KMdiMainFrmPrivate* d; 00294 KMDIPrivate::KMDIGUIClient* m_mdiGUIClient; 00295 bool m_managedDockPositionMode; 00296 00297 // methods 00298 public: 00299 KMdiMainFrm( QWidget* parentWidget, const char* name = "", KMdi::MdiMode mdiMode = KMdi::ChildframeMode, WFlags flags = WType_TopLevel | WDestructiveClose ); 00300 virtual ~KMdiMainFrm(); 00301 00306 void setStandardMDIMenuEnabled( bool showModeMenu = true ); 00307 00308 void setManagedDockPositionModeEnabled( bool enabled ); 00309 00313 bool isInMaximizedChildFrmMode() { return m_bMaximizedChildFrmMode; } 00314 00318 KMdi::MdiMode mdiMode() { return m_mdiMode; } 00319 00323 KMdiChildView* activeWindow(); 00324 00332 virtual QPopupMenu * taskBarPopup( KMdiChildView *pWnd, bool bIncludeWindowPopup = false ); 00333 00338 virtual QPopupMenu * windowPopup( KMdiChildView *pWnd, bool bIncludeTaskbarPopup = true ); 00339 00343 virtual void applyOptions(); 00344 00348 KMdiChildView * findWindow( const QString& caption ); 00349 00350 enum ExistsAs {DocumentView, ToolView, AnyView}; 00354 bool windowExists( KMdiChildView *pWnd, ExistsAs as ); 00355 00368 virtual bool event( QEvent* e ); 00369 00373 virtual void setSysButtonsAtMenuPosition(); 00374 00378 virtual int taskBarHeight() { return m_pTaskBar ? m_pTaskBar->height() : 0; } 00379 00384 virtual void setUndockPositioningOffset( QPoint offset ) { m_undockPositioningOffset = offset; } 00385 00392 // FIXME And what exactly are we supposed to fix? -mattr 00393 KMdiIterator<KMdiChildView*>* createIterator() 00394 { 00395 if ( m_pDocumentViews == 0L ) 00396 { 00397 return new KMdiNullIterator<KMdiChildView*>(); 00398 } 00399 else 00400 { 00401 return new KMdiListIterator<KMdiChildView>( *m_pDocumentViews ); 00402 } 00403 } 00404 00408 void deleteIterator( KMdiIterator<KMdiChildView*>* pIt ) 00409 { 00410 delete pIt; 00411 } 00412 00418 QPopupMenu* windowMenu() const { return m_pWindowMenu; }; 00419 00423 virtual void setBackgroundColor( const QColor &c ) { m_pMdi->setBackgroundColor( c ); } 00424 00428 virtual void setBackgroundPixmap( const QPixmap &pm ) { m_pMdi->setBackgroundPixmap( pm ); } 00429 00434 void setDefaultChildFrmSize( const QSize& sz ) { m_pMdi->m_defaultChildFrmSize = sz; } 00435 00439 QSize defaultChildFrmSize() { return m_pMdi->m_defaultChildFrmSize; } 00440 00444 virtual void setMinimumSize( int minw, int minh ); 00445 00449 int childFrameModeHeight() { return m_oldMainFrmHeight; }; 00456 virtual void setMenuForSDIModeSysButtons( KMenuBar* menuBar = 0 ); 00457 00461 static int frameDecorOfAttachedViews() { return m_frameDecoration; } 00462 00469 void fakeSDIApplication(); 00470 00474 bool isFakingSDIApplication() const { return m_bSDIApplication; } 00475 00476 virtual bool eventFilter( QObject *obj, QEvent *e ); 00477 void findRootDockWidgets( QPtrList<KDockWidget>* pRootDockWidgetList, QValueList<QRect>* pPositionList ); 00478 00480 void setSwitching( const bool switching ) { m_bSwitching = switching; } 00481 bool switching( void ) const { return m_bSwitching; } 00482 00483 public slots: 00488 KMdiChildView* createWrapper( QWidget *view, const QString& name, const QString& shortName ); 00489 00499 virtual void addWindow( KMdiChildView* pWnd, int flags = KMdi::StandardAdd ); 00500 00501 //KDE4: merge the two methods 00517 void addWindow( KMdiChildView* pWnd, int flags, int index ); 00518 00530 virtual void addWindow( KMdiChildView* pWnd, QPoint pos, int flags = KMdi::StandardAdd ); 00531 00543 virtual void addWindow( KMdiChildView* pWnd, QRect rectNormal, int flags = KMdi::StandardAdd ); 00544 00549 virtual KMdiToolViewAccessor *addToolWindow( QWidget* pWnd, KDockWidget::DockPosition pos = KDockWidget::DockNone, 00550 QWidget* pTargetWnd = 0L, int percent = 50, const QString& tabToolTip = 0, 00551 const QString& tabCaption = 0 ); 00552 00553 virtual void deleteToolWindow( QWidget* pWnd ); 00554 virtual void deleteToolWindow( KMdiToolViewAccessor *accessor ); 00555 00560 KMdiToolViewAccessor *createToolWindow(); 00561 00567 virtual void removeWindowFromMdi( KMdiChildView *pWnd ); 00568 00573 virtual void closeWindow( KMdiChildView *pWnd, bool layoutTaskBar = true ); 00574 00578 virtual void slot_toggleTaskBar(); 00579 00585 virtual void attachWindow( KMdiChildView *pWnd, bool bShow = true, bool bAutomaticResize = false ); 00586 00591 virtual void detachWindow( KMdiChildView *pWnd, bool bShow = true ); 00592 00597 virtual void childWindowCloseRequest( KMdiChildView *pWnd ); 00598 00602 virtual void closeAllViews(); 00603 00607 virtual void iconifyAllViews(); 00608 00612 virtual void closeActiveView(); 00613 00617 virtual void switchToToplevelMode(); 00618 virtual void finishToplevelMode(); 00619 00623 virtual void switchToChildframeMode(); 00624 virtual void finishChildframeMode(); 00625 00629 virtual void switchToTabPageMode(); 00630 virtual void finishTabPageMode(); 00631 00635 virtual void switchToIDEAlMode(); 00636 virtual void finishIDEAlMode( bool full = true ); 00637 00642 void setIDEAlModeStyle( int flags ) KDE_DEPRECATED; 00643 //KDE4: Get rid of the above. 00649 void setToolviewStyle( int flags ); 00653 bool isViewTaskBarOn(); 00654 00658 virtual void showViewTaskBar(); 00659 00663 virtual void hideViewTaskBar(); 00664 00668 virtual void fillWindowMenu(); 00669 00673 virtual void cascadeWindows() { m_pMdi->cascadeWindows(); } 00674 00678 virtual void cascadeMaximized() { m_pMdi->cascadeMaximized(); } 00679 00683 virtual void expandVertical() { m_pMdi->expandVertical(); } 00684 00688 virtual void expandHorizontal() { m_pMdi->expandHorizontal(); } 00689 00693 virtual void tilePragma() { m_pMdi->tilePragma(); } 00694 00698 virtual void tileAnodine() { m_pMdi->tileAnodine(); } 00699 00703 virtual void tileVertically() { m_pMdi->tileVertically(); } 00704 00709 virtual void setFrameDecorOfAttachedViews( int frameDecor ); 00710 00714 virtual void setEnableMaximizedChildFrmMode( bool bEnable ); 00715 00719 virtual void activateNextWin(); 00720 00724 virtual void activatePrevWin(); 00725 00729 virtual void activateFirstWin(); 00730 00734 virtual void activateLastWin(); 00735 00739 virtual void activateView( int index ); 00740 00741 private: 00742 void setupToolViewsForIDEALMode(); 00743 void setupTabbedDocumentViewSpace(); 00744 class KMdiDocumentViewTabWidget * m_documentTabWidget; 00745 00746 protected: 00747 00748 virtual void resizeEvent( QResizeEvent * ); 00749 00753 virtual void createTaskBar(); 00754 00758 virtual void createMdiManager(); 00759 00764 void blockClearingOfWindowMenu( bool bBlocked ) { m_bClearingOfWindowMenuBlocked = bBlocked; } 00765 00766 void findToolViewsDockedToMain( QPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw ); 00767 void dockToolViewsIntoContainers( QPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container ); 00768 QStringList prepareIdealToTabs( KDockWidget* container ); 00769 void idealToolViewsToStandardTabs( QStringList widgetNames, KDockWidget::DockPosition pos, int sizee ); 00770 00772 KMdi::TabWidgetVisibility tabWidgetVisibility(); 00773 00775 void setTabWidgetVisibility( KMdi::TabWidgetVisibility ); 00776 00778 class KTabWidget * tabWidget() const; 00779 00780 00781 protected slots: // Protected slots 00786 virtual void activateView( KMdiChildView *pWnd ); 00787 00791 virtual void taskbarButtonRightClicked( KMdiChildView *pWnd ); 00792 00796 void switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild ); 00797 00801 void updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild ); 00802 00806 void windowMenuItemActivated( int id ); 00807 00811 void dockMenuItemActivated( int id ); 00812 00816 void popupWindowMenu( QPoint p ); 00817 00821 void dragEndTimeOut(); 00822 00826 void closeViewButtonPressed(); 00827 00828 signals: 00832 void lastChildFrmClosed(); 00833 00837 void lastChildViewClosed(); 00838 00842 void leftTopLevelMode(); 00843 00847 void childViewIsDetachedNow( QWidget* ); 00848 00850 void collapseOverlapContainers(); 00851 00853 void mdiModeHasBeenChangedTo( KMdi::MdiMode ); 00854 00855 void viewActivated( KMdiChildView* ); 00856 void viewDeactivated( KMdiChildView* ); 00857 00858 public slots: 00859 void prevToolViewInDock(); 00860 void nextToolViewInDock(); 00861 00862 private slots: 00863 void setActiveToolDock( KMdiDockContainer* ); 00864 void removeFromActiveDockList( KMdiDockContainer* ); 00865 void slotDocCurrentChanged( QWidget* ); 00866 void verifyToplevelHeight(); 00867 #define protected public 00868 signals: 00869 #undef protected 00870 00871 void toggleTop(); 00872 void toggleLeft(); 00873 void toggleRight(); 00874 void toggleBottom(); 00875 }; 00876 00877 #endif //_KMDIMAINFRM_H_ 00878 00879 // kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands;