00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
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
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
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
00391
00392 KMdiIterator<KMdiChildView*>* createIterator()
00393 {
00394 if ( m_pDocumentViews == 0L )
00395 {
00396 return new KMdiNullIterator<KMdiChildView*>();
00397 }
00398 else
00399 {
00400 return new KMdiListIterator<KMdiChildView>( *m_pDocumentViews );
00401 }
00402 }
00403
00407 void deleteIterator( KMdiIterator<KMdiChildView*>* pIt )
00408 {
00409 delete pIt;
00410 }
00411
00417 QPopupMenu* windowMenu() const { return m_pWindowMenu; };
00418
00422 virtual void setBackgroundColor( const QColor &c ) { m_pMdi->setBackgroundColor( c ); }
00423
00427 virtual void setBackgroundPixmap( const QPixmap &pm ) { m_pMdi->setBackgroundPixmap( pm ); }
00428
00433 void setDefaultChildFrmSize( const QSize& sz ) { m_pMdi->m_defaultChildFrmSize = sz; }
00434
00438 QSize defaultChildFrmSize() { return m_pMdi->m_defaultChildFrmSize; }
00439
00443 virtual void setMinimumSize( int minw, int minh );
00444
00448 int childFrameModeHeight() { return m_oldMainFrmHeight; };
00455 virtual void setMenuForSDIModeSysButtons( KMenuBar* menuBar = 0 );
00456
00460 static int frameDecorOfAttachedViews() { return m_frameDecoration; }
00461
00468 void fakeSDIApplication();
00469
00473 bool isFakingSDIApplication() const { return m_bSDIApplication; }
00474
00475 virtual bool eventFilter( QObject *obj, QEvent *e );
00476 void findRootDockWidgets( QPtrList<KDockWidget>* pRootDockWidgetList, QValueList<QRect>* pPositionList );
00477
00479 void setSwitching( const bool switching ) { m_bSwitching = switching; }
00480 bool switching( void ) const { return m_bSwitching; }
00481
00482 public slots:
00487 KMdiChildView* createWrapper( QWidget *view, const QString& name, const QString& shortName );
00488
00498 virtual void addWindow( KMdiChildView* pWnd, int flags = KMdi::StandardAdd );
00499
00500
00516 void addWindow( KMdiChildView* pWnd, int flags, int index );
00517
00529 virtual void addWindow( KMdiChildView* pWnd, QPoint pos, int flags = KMdi::StandardAdd );
00530
00542 virtual void addWindow( KMdiChildView* pWnd, QRect rectNormal, int flags = KMdi::StandardAdd );
00543
00548 virtual KMdiToolViewAccessor *addToolWindow( QWidget* pWnd, KDockWidget::DockPosition pos = KDockWidget::DockNone,
00549 QWidget* pTargetWnd = 0L, int percent = 50, const QString& tabToolTip = 0,
00550 const QString& tabCaption = 0 );
00551
00552 virtual void deleteToolWindow( QWidget* pWnd );
00553 virtual void deleteToolWindow( KMdiToolViewAccessor *accessor );
00554
00559 KMdiToolViewAccessor *createToolWindow();
00560
00566 virtual void removeWindowFromMdi( KMdiChildView *pWnd );
00567
00572 virtual void closeWindow( KMdiChildView *pWnd, bool layoutTaskBar = true );
00573
00577 virtual void slot_toggleTaskBar();
00578
00584 virtual void attachWindow( KMdiChildView *pWnd, bool bShow = true, bool bAutomaticResize = false );
00585
00590 virtual void detachWindow( KMdiChildView *pWnd, bool bShow = true );
00591
00596 virtual void childWindowCloseRequest( KMdiChildView *pWnd );
00597
00601 virtual void closeAllViews();
00602
00606 virtual void iconifyAllViews();
00607
00611 virtual void closeActiveView();
00612
00616 virtual void switchToToplevelMode();
00617 virtual void finishToplevelMode();
00618
00622 virtual void switchToChildframeMode();
00623 virtual void finishChildframeMode();
00624
00628 virtual void switchToTabPageMode();
00629 virtual void finishTabPageMode();
00630
00634 virtual void switchToIDEAlMode();
00635 virtual void finishIDEAlMode( bool full = true );
00636
00641 void setIDEAlModeStyle( int flags ) KDE_DEPRECATED;
00642
00648 void setToolviewStyle( int flags );
00652 bool isViewTaskBarOn();
00653
00657 virtual void showViewTaskBar();
00658
00662 virtual void hideViewTaskBar();
00663
00667 virtual void fillWindowMenu();
00668
00672 virtual void cascadeWindows() { m_pMdi->cascadeWindows(); }
00673
00677 virtual void cascadeMaximized() { m_pMdi->cascadeMaximized(); }
00678
00682 virtual void expandVertical() { m_pMdi->expandVertical(); }
00683
00687 virtual void expandHorizontal() { m_pMdi->expandHorizontal(); }
00688
00692 virtual void tilePragma() { m_pMdi->tilePragma(); }
00693
00697 virtual void tileAnodine() { m_pMdi->tileAnodine(); }
00698
00702 virtual void tileVertically() { m_pMdi->tileVertically(); }
00703
00708 virtual void setFrameDecorOfAttachedViews( int frameDecor );
00709
00713 virtual void setEnableMaximizedChildFrmMode( bool bEnable );
00714
00718 virtual void activateNextWin();
00719
00723 virtual void activatePrevWin();
00724
00728 virtual void activateFirstWin();
00729
00733 virtual void activateLastWin();
00734
00738 virtual void activateView( int index );
00739
00740 private:
00741 void setupToolViewsForIDEALMode();
00742 void setupTabbedDocumentViewSpace();
00743 class KMdiDocumentViewTabWidget * m_documentTabWidget;
00744
00745 protected:
00746
00747 virtual void resizeEvent( QResizeEvent * );
00748
00752 virtual void createTaskBar();
00753
00757 virtual void createMdiManager();
00758
00763 void blockClearingOfWindowMenu( bool bBlocked ) { m_bClearingOfWindowMenuBlocked = bBlocked; }
00764
00765 void findToolViewsDockedToMain( QPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw );
00766 void dockToolViewsIntoContainers( QPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container );
00767 QStringList prepareIdealToTabs( KDockWidget* container );
00768 void idealToolViewsToStandardTabs( QStringList widgetNames, KDockWidget::DockPosition pos, int sizee );
00769
00771 KMdi::TabWidgetVisibility tabWidgetVisibility();
00772
00774 void setTabWidgetVisibility( KMdi::TabWidgetVisibility );
00775
00777 class KTabWidget * tabWidget() const;
00778
00779
00780 protected slots:
00785 virtual void activateView( KMdiChildView *pWnd );
00786
00790 virtual void taskbarButtonRightClicked( KMdiChildView *pWnd );
00791
00795 void switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild );
00796
00800 void updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild );
00801
00805 void windowMenuItemActivated( int id );
00806
00810 void dockMenuItemActivated( int id );
00811
00815 void popupWindowMenu( QPoint p );
00816
00820 void dragEndTimeOut();
00821
00825 void closeViewButtonPressed();
00826
00827 signals:
00831 void lastChildFrmClosed();
00832
00836 void lastChildViewClosed();
00837
00841 void leftTopLevelMode();
00842
00846 void childViewIsDetachedNow( QWidget* );
00847
00849 void collapseOverlapContainers();
00850
00852 void mdiModeHasBeenChangedTo( KMdi::MdiMode );
00853
00854 void viewActivated( KMdiChildView* );
00855 void viewDeactivated( KMdiChildView* );
00856
00857 public slots:
00858 void prevToolViewInDock();
00859 void nextToolViewInDock();
00860
00861 private slots:
00862 void setActiveToolDock( KMdiDockContainer* );
00863 void removeFromActiveDockList( KMdiDockContainer* );
00864 void slotDocCurrentChanged( QWidget* );
00865 void verifyToplevelHeight();
00866 #define protected public
00867 signals:
00868 #undef protected
00869
00870 void toggleTop();
00871 void toggleLeft();
00872 void toggleRight();
00873 void toggleBottom();
00874 };
00875
00876 #endif //_KMDIMAINFRM_H_
00877
00878