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 
00391     // FIXME And what exactly are we supposed to fix? -mattr
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     //KDE4: merge the two methods
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     //KDE4: Get rid of the above.
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:  // 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 // kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands;
KDE Home | KDE Accessibility Home | Description of Access Keys