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;
KDE Home | KDE Accessibility Home | Description of Access Keys