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 <tqptrlist.h> 00039 #include <tqrect.h> 00040 #include <tqapplication.h> 00041 #include <tqdom.h> 00042 #include <tqguardedptr.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 TQTimer; 00053 class TQPopupMenu; 00054 class TQMenuBar; 00055 00056 00057 class TQToolButton; 00058 00059 namespace KMDIPrivate 00060 { 00061 class KMDIGUIClient; 00062 } 00063 00064 class KMdiDockContainer; 00065 class KMdiMainFrmPrivate; 00066 00072 class KMDI_EXPORT KMdiViewCloseEvent : public TQCustomEvent 00073 { 00074 public: 00075 KMdiViewCloseEvent( KMdiChildView* pWnd ) : TQCustomEvent( TQEvent::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 TQPtrList<KMdiChildView> *m_pDocumentViews; 00252 TQMap<TQWidget*, KMdiToolViewAccessor*> *m_pToolViews; 00253 KMdiChildView *m_pCurrentWindow; 00254 TQPopupMenu *m_pWindowPopup; 00255 TQPopupMenu *m_pTaskBarPopup; 00256 TQPopupMenu *m_pWindowMenu; 00257 TQPopupMenu *m_pDockMenu; 00258 TQPopupMenu *m_pMdiModeMenu; 00259 TQPopupMenu *m_pPlacingMenu; 00260 KMenuBar *m_pMainMenuBar; 00261 00262 TQPixmap *m_pUndockButtonPixmap; 00263 TQPixmap *m_pMinButtonPixmap; 00264 TQPixmap *m_pRestoreButtonPixmap; 00265 TQPixmap *m_pCloseButtonPixmap; 00266 00267 TQToolButton *m_pUndock; 00268 TQToolButton *m_pMinimize; 00269 TQToolButton *m_pRestore; 00270 TQToolButton *m_pClose; 00271 TQPoint 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 TQDomDocument* m_pTempDockSession; 00280 bool m_bClearingOfWindowMenuBlocked; 00281 00282 TQTimer* 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 #ifdef qdoc 00300 KMdiMainFrm( TQWidget* parentWidget, const char* name = "", KMdi::MdiMode mdiMode = KMdi::ChildframeMode, WFlags flags = WType_TopLevel | WDestructiveClose ); 00301 #else 00302 KMdiMainFrm( TQWidget* parentWidget, const char* name = "", KMdi::MdiMode mdiMode = KMdi::ChildframeMode, WFlags flags = (WFlags)(WType_TopLevel | WDestructiveClose) ); 00303 #endif 00304 virtual ~KMdiMainFrm(); 00305 00310 void setStandardMDIMenuEnabled( bool showModeMenu = true ); 00311 00312 void setManagedDockPositionModeEnabled( bool enabled ); 00313 00317 bool isInMaximizedChildFrmMode() { return m_bMaximizedChildFrmMode; } 00318 00322 KMdi::MdiMode mdiMode() { return m_mdiMode; } 00323 00327 KMdiChildView* activeWindow(); 00328 00336 virtual TQPopupMenu * taskBarPopup( KMdiChildView *pWnd, bool bIncludeWindowPopup = false ); 00337 00342 virtual TQPopupMenu * windowPopup( KMdiChildView *pWnd, bool bIncludeTaskbarPopup = true ); 00343 00347 virtual void applyOptions(); 00348 00352 KMdiChildView * findWindow( const TQString& caption ); 00353 00354 enum ExistsAs {DocumentView, ToolView, AnyView}; 00358 bool windowExists( KMdiChildView *pWnd, ExistsAs as ); 00359 00372 virtual bool event( TQEvent* e ); 00373 00377 virtual void setSysButtonsAtMenuPosition(); 00378 00382 virtual int taskBarHeight() { return m_pTaskBar ? m_pTaskBar->height() : 0; } 00383 00388 virtual void setUndockPositioningOffset( TQPoint offset ) { m_undockPositioningOffset = offset; } 00389 00396 // FIXME And what exactly are we supposed to fix? -mattr 00397 KMdiIterator<KMdiChildView*>* createIterator() 00398 { 00399 if ( m_pDocumentViews == 0L ) 00400 { 00401 return new KMdiNullIterator<KMdiChildView*>(); 00402 } 00403 else 00404 { 00405 return new KMdiListIterator<KMdiChildView>( *m_pDocumentViews ); 00406 } 00407 } 00408 00412 void deleteIterator( KMdiIterator<KMdiChildView*>* pIt ) 00413 { 00414 delete pIt; 00415 } 00416 00422 TQPopupMenu* windowMenu() const { return m_pWindowMenu; }; 00423 00427 virtual void setBackgroundColor( const TQColor &c ) { m_pMdi->setBackgroundColor( c ); } 00428 00432 virtual void setBackgroundPixmap( const TQPixmap &pm ) { m_pMdi->setBackgroundPixmap( pm ); } 00433 00438 void setDefaultChildFrmSize( const TQSize& sz ) { m_pMdi->m_defaultChildFrmSize = sz; } 00439 00443 TQSize defaultChildFrmSize() { return m_pMdi->m_defaultChildFrmSize; } 00444 00448 virtual void setMinimumSize( int minw, int minh ); 00449 00453 int childFrameModeHeight() { return m_oldMainFrmHeight; }; 00460 virtual void setMenuForSDIModeSysButtons( KMenuBar* menuBar = 0 ); 00461 00465 static int frameDecorOfAttachedViews() { return m_frameDecoration; } 00466 00473 void fakeSDIApplication(); 00474 00478 bool isFakingSDIApplication() const { return m_bSDIApplication; } 00479 00480 virtual bool eventFilter( TQObject *obj, TQEvent *e ); 00481 void findRootDockWidgets( TQPtrList<KDockWidget>* pRootDockWidgetList, TQValueList<TQRect>* pPositionList ); 00482 00484 void setSwitching( const bool switching ) { m_bSwitching = switching; } 00485 bool switching( void ) const { return m_bSwitching; } 00486 00487 public slots: 00492 KMdiChildView* createWrapper( TQWidget *view, const TQString& name, const TQString& shortName ); 00493 00503 virtual void addWindow( KMdiChildView* pWnd, int flags = KMdi::StandardAdd ); 00504 00505 //KDE4: merge the two methods 00521 void addWindow( KMdiChildView* pWnd, int flags, int index ); 00522 00534 virtual void addWindow( KMdiChildView* pWnd, TQPoint pos, int flags = KMdi::StandardAdd ); 00535 00547 virtual void addWindow( KMdiChildView* pWnd, TQRect rectNormal, int flags = KMdi::StandardAdd ); 00548 00553 virtual KMdiToolViewAccessor *addToolWindow( TQWidget* pWnd, KDockWidget::DockPosition pos = KDockWidget::DockNone, 00554 TQWidget* pTargetWnd = 0L, int percent = 50, const TQString& tabToolTip = 0, 00555 const TQString& tabCaption = 0 ); 00556 00557 virtual void deleteToolWindow( TQWidget* pWnd ); 00558 virtual void deleteToolWindow( KMdiToolViewAccessor *accessor ); 00559 00564 KMdiToolViewAccessor *createToolWindow(); 00565 00571 virtual void removeWindowFromMdi( KMdiChildView *pWnd ); 00572 00577 virtual void closeWindow( KMdiChildView *pWnd, bool layoutTaskBar = true ); 00578 00582 virtual void slot_toggleTaskBar(); 00583 00589 virtual void attachWindow( KMdiChildView *pWnd, bool bShow = true, bool bAutomaticResize = false ); 00590 00595 virtual void detachWindow( KMdiChildView *pWnd, bool bShow = true ); 00596 00601 virtual void childWindowCloseRequest( KMdiChildView *pWnd ); 00602 00606 virtual void closeAllViews(); 00607 00611 virtual void iconifyAllViews(); 00612 00616 virtual void closeActiveView(); 00617 00621 virtual void switchToToplevelMode(); 00622 virtual void finishToplevelMode(); 00623 00627 virtual void switchToChildframeMode(); 00628 virtual void finishChildframeMode(); 00629 00633 virtual void switchToTabPageMode(); 00634 virtual void finishTabPageMode(); 00635 00639 virtual void switchToIDEAlMode(); 00640 virtual void finishIDEAlMode( bool full = true ); 00641 00646 void setIDEAlModeStyle( int flags ) KDE_DEPRECATED; 00647 //KDE4: Get rid of the above. 00653 void setToolviewStyle( int flags ); 00657 bool isViewTaskBarOn(); 00658 00662 virtual void showViewTaskBar(); 00663 00667 virtual void hideViewTaskBar(); 00668 00672 virtual void fillWindowMenu(); 00673 00677 virtual void cascadeWindows() { m_pMdi->cascadeWindows(); } 00678 00682 virtual void cascadeMaximized() { m_pMdi->cascadeMaximized(); } 00683 00687 virtual void expandVertical() { m_pMdi->expandVertical(); } 00688 00692 virtual void expandHorizontal() { m_pMdi->expandHorizontal(); } 00693 00697 virtual void tilePragma() { m_pMdi->tilePragma(); } 00698 00702 virtual void tileAnodine() { m_pMdi->tileAnodine(); } 00703 00707 virtual void tileVertically() { m_pMdi->tileVertically(); } 00708 00713 virtual void setFrameDecorOfAttachedViews( int frameDecor ); 00714 00718 virtual void setEnableMaximizedChildFrmMode( bool bEnable ); 00719 00723 virtual void activateNextWin(); 00724 00728 virtual void activatePrevWin(); 00729 00733 virtual void activateFirstWin(); 00734 00738 virtual void activateLastWin(); 00739 00743 virtual void activateView( int index ); 00744 00745 private: 00746 void setupToolViewsForIDEALMode(); 00747 void setupTabbedDocumentViewSpace(); 00748 class KMdiDocumentViewTabWidget * m_documentTabWidget; 00749 00750 protected: 00751 00752 virtual void resizeEvent( TQResizeEvent * ); 00753 00757 virtual void createTaskBar(); 00758 00762 virtual void createMdiManager(); 00763 00768 void blockClearingOfWindowMenu( bool bBlocked ) { m_bClearingOfWindowMenuBlocked = bBlocked; } 00769 00770 void findToolViewsDockedToMain( TQPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw ); 00771 void dockToolViewsIntoContainers( TQPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container ); 00772 TQStringList prepareIdealToTabs( KDockWidget* container ); 00773 void idealToolViewsToStandardTabs( TQStringList widgetNames, KDockWidget::DockPosition pos, int sizee ); 00774 00776 KMdi::TabWidgetVisibility tabWidgetVisibility(); 00777 00779 void setTabWidgetVisibility( KMdi::TabWidgetVisibility ); 00780 00782 class KTabWidget * tabWidget() const; 00783 00784 00785 protected slots: // Protected slots 00790 virtual void activateView( KMdiChildView *pWnd ); 00791 00795 virtual void taskbarButtonRightClicked( KMdiChildView *pWnd ); 00796 00800 void switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild ); 00801 00805 void updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild ); 00806 00810 void windowMenuItemActivated( int id ); 00811 00815 void dockMenuItemActivated( int id ); 00816 00820 void popupWindowMenu( TQPoint p ); 00821 00825 void dragEndTimeOut(); 00826 00830 void closeViewButtonPressed(); 00831 00832 signals: 00836 void lastChildFrmClosed(); 00837 00841 void lastChildViewClosed(); 00842 00846 void leftTopLevelMode(); 00847 00851 void childViewIsDetachedNow( TQWidget* ); 00852 00854 void collapseOverlapContainers(); 00855 00857 void mdiModeHasBeenChangedTo( KMdi::MdiMode ); 00858 00859 void viewActivated( KMdiChildView* ); 00860 void viewDeactivated( KMdiChildView* ); 00861 00862 public slots: 00863 void prevToolViewInDock(); 00864 void nextToolViewInDock(); 00865 00866 private slots: 00867 void setActiveToolDock( KMdiDockContainer* ); 00868 void removeFromActiveDockList( KMdiDockContainer* ); 00869 void slotDocCurrentChanged( TQWidget* ); 00870 void verifyToplevelHeight(); 00871 #define protected public 00872 signals: 00873 #undef protected 00874 00875 void toggleTop(); 00876 void toggleLeft(); 00877 void toggleRight(); 00878 void toggleBottom(); 00879 }; 00880 00881 #endif //_KMDIMAINFRM_H_ 00882 00883 // kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands; 00884