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
00392
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
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
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:
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