kmdi Library API Documentation

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     
00497     virtual void addWindow( KMdiChildView* pView, int flags = KMdi::StandardAdd );
00498     
00499     //KDE4: merge the two methods
00512     void addWindow( KMdiChildView* pView, int flags, int index );
00513     
00524     virtual void addWindow( KMdiChildView* pView, QPoint pos, int flags = KMdi::StandardAdd );
00525     
00536     virtual void addWindow( KMdiChildView* pView, QRect rectNormal, int flags = KMdi::StandardAdd );
00537     
00542     virtual KMdiToolViewAccessor *addToolWindow( QWidget* pWnd, KDockWidget::DockPosition pos = KDockWidget::DockNone,
00543                                                  QWidget* pTargetWnd = 0L, int percent = 50, const QString& tabToolTip = 0,
00544                                                  const QString& tabCaption = 0 );
00545     
00546     virtual void deleteToolWindow( QWidget* pWnd );
00547     virtual void deleteToolWindow( KMdiToolViewAccessor *accessor );
00548     
00553     KMdiToolViewAccessor *createToolWindow();
00554     
00560     virtual void removeWindowFromMdi( KMdiChildView *pWnd );
00561     
00566     virtual void closeWindow( KMdiChildView *pWnd, bool layoutTaskBar = true );
00567     
00571     virtual void slot_toggleTaskBar();
00572     
00578     virtual void attachWindow( KMdiChildView *pWnd, bool bShow = true, bool bAutomaticResize = false );
00579     
00584     virtual void detachWindow( KMdiChildView *pWnd, bool bShow = true );
00585     
00590     virtual void childWindowCloseRequest( KMdiChildView *pWnd );
00591     
00595     virtual void closeAllViews();
00596     
00600     virtual void iconifyAllViews();
00601     
00605     virtual void closeActiveView();
00606  
00610     virtual void switchToToplevelMode();
00611     virtual void finishToplevelMode();
00612     
00616     virtual void switchToChildframeMode();
00617     virtual void finishChildframeMode();
00618     
00622     virtual void switchToTabPageMode();
00623     virtual void finishTabPageMode();
00624     
00628     virtual void switchToIDEAlMode();
00629     virtual void finishIDEAlMode( bool full = true );
00630     
00635     void setIDEAlModeStyle( int flags ) KDE_DEPRECATED;
00636     //KDE4: Get rid of the above.
00642     void setToolviewStyle( int flags );
00646     bool isViewTaskBarOn();
00647     
00651     virtual void showViewTaskBar();
00652     
00656     virtual void hideViewTaskBar();
00657     
00661     virtual void fillWindowMenu();
00662 
00666     virtual void cascadeWindows() { m_pMdi->cascadeWindows(); }
00667     
00671     virtual void cascadeMaximized() { m_pMdi->cascadeMaximized(); }
00672     
00676     virtual void expandVertical() { m_pMdi->expandVertical(); }
00677     
00681     virtual void expandHorizontal() { m_pMdi->expandHorizontal(); }
00682     
00686     virtual void tilePragma() { m_pMdi->tilePragma(); }
00687     
00691     virtual void tileAnodine() { m_pMdi->tileAnodine(); }
00692 
00696     virtual void tileVertically() { m_pMdi->tileVertically(); }
00697     
00702     virtual void setFrameDecorOfAttachedViews( int frameDecor );
00703     
00707     virtual void setEnableMaximizedChildFrmMode( bool bEnable );
00708     
00712     virtual void activateNextWin();
00713     
00717     virtual void activatePrevWin();
00718     
00722     virtual void activateFirstWin();
00723     
00727     virtual void activateLastWin();
00728     
00732     virtual void activateView( int index );
00733 
00734 private:
00735     void setupToolViewsForIDEALMode();
00736     void setupTabbedDocumentViewSpace();
00737     class KMdiDocumentViewTabWidget * m_documentTabWidget;
00738 
00739 protected:
00740 
00741     virtual void resizeEvent( QResizeEvent * );
00742     
00746     virtual void createTaskBar();
00747     
00751     virtual void createMdiManager();
00752     
00757     void blockClearingOfWindowMenu( bool bBlocked ) { m_bClearingOfWindowMenuBlocked = bBlocked; }
00758 
00759     void findToolViewsDockedToMain( QPtrList<KDockWidget>* list, KDockWidget::DockPosition dprtmw );
00760     void dockToolViewsIntoContainers( QPtrList<KDockWidget>& widgetsToReparent, KDockWidget *container );
00761     QStringList prepareIdealToTabs( KDockWidget* container );
00762     void idealToolViewsToStandardTabs( QStringList widgetNames, KDockWidget::DockPosition pos, int sizee );
00763 
00765     KMdi::TabWidgetVisibility tabWidgetVisibility();
00766     
00768     void setTabWidgetVisibility( KMdi::TabWidgetVisibility );
00769     
00771     class KTabWidget * tabWidget() const;
00772 
00773 
00774 protected slots:  // Protected slots
00779     virtual void activateView( KMdiChildView *pWnd );
00780     
00784     virtual void taskbarButtonRightClicked( KMdiChildView *pWnd );
00785     
00789     void switchOffMaximizeModeForMenu( KMdiChildFrm* oldChild );
00790     
00794     void updateSysButtonConnections( KMdiChildFrm* oldChild, KMdiChildFrm* newChild );
00795     
00799     void windowMenuItemActivated( int id );
00800     
00804     void dockMenuItemActivated( int id );
00805     
00809     void popupWindowMenu( QPoint p );
00810     
00814     void dragEndTimeOut();
00815     
00819     void closeViewButtonPressed();
00820 
00821 signals:
00825     void lastChildFrmClosed();
00826     
00830     void lastChildViewClosed();
00831     
00835     void leftTopLevelMode();
00836     
00840     void childViewIsDetachedNow( QWidget* );
00841 
00843     void collapseOverlapContainers();
00844     
00846     void mdiModeHasBeenChangedTo( KMdi::MdiMode );
00847     
00848     void viewActivated( KMdiChildView* );
00849     void viewDeactivated( KMdiChildView* );
00850 
00851 public slots:
00852     void prevToolViewInDock();
00853     void nextToolViewInDock();
00854 
00855 private slots:
00856     void setActiveToolDock( KMdiDockContainer* );
00857     void removeFromActiveDockList( KMdiDockContainer* );
00858     void slotDocCurrentChanged( QWidget* );
00859     void verifyToplevelHeight();
00860 #define protected public
00861 signals:
00862 #undef protected
00863 
00864     void toggleTop();
00865     void toggleLeft();
00866     void toggleRight();
00867     void toggleBottom();
00868 };
00869 
00870 #endif //_KMDIMAINFRM_H_
00871 
00872 // kate: space-indent off; tab-width 4; replace-tabs off; indent-mode csands;
KDE Logo
This file is part of the documentation for kmdi Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Jul 21 13:15:04 2006 by doxygen 1.4.0 written by Dimitri van Heesch, © 1997-2003