KDE3Support
k3dockwidget.h
Go to the documentation of this file.
00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2000 Max Judin <novaprint@mtu-net.ru> 00003 Copyright (C) 2000 Falk Brettschneider <falk@kdevelop.org> 00004 Copyright (C) 2002,2003 Joseph Wenninger <jowenn@kde.org> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License version 2 as published by the Free Software Foundation. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 00019 */ 00020 00021 /* 00022 activities: 00023 ----------- 00024 05/2001 - : useful patches, bugfixes by Christoph Cullmann <crossfire@babylon2k.de>, 00025 Joseph Wenninger <jowenn@bigfoot.com> and Falk Brettschneider 00026 03/2001 - 05/2001 : maintained and enhanced by Falk Brettschneider <falk@kdevelop.org> 00027 03/2000 : class documentation added by Falk Brettschneider <gigafalk@yahoo.com> 00028 10/1999 - 03/2000 : programmed by Max Judin <novaprint@mtu-net.ru> 00029 00030 C++ classes in this file: 00031 ------------------------- 00032 - K3DockWidgetAbstractHeader - minor helper class 00033 - K3DockWidgetAbstractHeaderDrag - minor helper class 00034 - K3DockWidgetHeaderDrag - drag panel in a dockwidget title bar 00035 - K3DockWidgetHeader - dockwidget title bar containing the drag panel 00036 - K3DockTabGroup - minor helper class 00037 - K3DockWidget - IMPORTANT CLASS: the one and only dockwidget class 00038 - K3DockManager - helper class 00039 - K3DockMainWindow - IMPORTANT CLASS: a special KMainWindow that can have dockwidgets 00040 - K3DockArea - like K3DockMainWindow but inherits just QWidget 00041 00042 IMPORTANT Note: This file compiles also in Qt-only mode by using the NO_KDE2 precompiler definition! 00043 */ 00044 00045 00046 #ifndef KDOCKWIDGET_H 00047 #define KDOCKWIDGET_H 00048 00049 #define _KDOCKWIDGET_2_2_ 00050 00051 #include <kde3support_export.h> 00052 #include <QtCore/QPoint> 00053 #include <Qt3Support/Q3PtrList> 00054 #include <QtGui/QFrame> 00055 #include <QtXml/QDomElement> 00056 #include <QtGui/QTabWidget> 00057 00058 #ifndef NO_KDE2 00059 #include <kxmlguiwindow.h> 00060 #include <netwm_def.h> 00061 #else 00062 00063 #include <Qt3Support/Q3MainWindow> 00064 #include "exportdockclass.h" 00065 #include "dummykmainwindow.h" 00066 #endif 00067 00068 class K3DockSplitter; 00069 class K3DockManager; 00070 class K3DockWidget; 00071 class K3DockButton_Private; 00072 class K3DockWidgetPrivate; 00073 class K3DockWidgetHeaderPrivate; 00074 class K3DockArea; 00075 00076 class Q3PopupMenu; 00077 class QVBoxLayout; 00078 class QHBoxLayout; 00079 class QPixmap; 00080 00081 #ifndef NO_KDE2 00082 class KConfigGroup; 00083 #else 00084 #endif 00085 00086 class K3DockContainer; 00087 00088 namespace K3MDI 00089 { 00090 class MainWindow; 00091 } 00092 00100 class KDE3SUPPORT_EXPORT K3DockWidgetAbstractHeader : public QFrame 00101 { 00102 Q_OBJECT 00103 public: 00104 00111 K3DockWidgetAbstractHeader( K3DockWidget* parent, const char* name = 0L ); 00112 00116 virtual ~K3DockWidgetAbstractHeader(){} 00117 00121 virtual void setTopLevel( bool ){} 00122 00123 #ifndef NO_KDE2 00124 00127 virtual void saveConfig( KConfigGroup* ){} 00128 00132 virtual void loadConfig( KConfigGroup* ){} 00133 #endif 00134 00135 protected: 00136 virtual void virtual_hook( int id, void* data ); 00137 private: 00138 class K3DockWidgetAbstractHeaderPrivate; 00139 K3DockWidgetAbstractHeaderPrivate *d; 00140 }; 00141 00149 class KDE3SUPPORT_EXPORT K3DockWidgetAbstractHeaderDrag : public QFrame 00150 { 00151 Q_OBJECT 00152 public: 00153 00161 K3DockWidgetAbstractHeaderDrag( K3DockWidgetAbstractHeader* parent, 00162 K3DockWidget* dock, const char* name = 0L ); 00163 00167 virtual ~K3DockWidgetAbstractHeaderDrag(); 00168 00172 K3DockWidget* dockWidget() const; 00173 00174 private: 00178 K3DockWidget* dw; 00179 protected: 00180 virtual void virtual_hook( int id, void* data ); 00181 private: 00182 class K3DockWidgetAbstractHeaderDragPrivate; 00183 K3DockWidgetAbstractHeaderDragPrivate *d; 00184 }; 00185 00194 class KDE3SUPPORT_EXPORT K3DockWidgetHeaderDrag : public K3DockWidgetAbstractHeaderDrag 00195 { 00196 Q_OBJECT 00197 public: 00198 00206 K3DockWidgetHeaderDrag( K3DockWidgetAbstractHeader* parent, K3DockWidget* dock, 00207 const char* name = 0L ); 00208 00212 virtual ~K3DockWidgetHeaderDrag(); 00213 00214 protected: 00215 00219 virtual void paintEvent( QPaintEvent* ); 00220 00221 protected: 00222 virtual void virtual_hook( int id, void* data ); 00223 private: 00224 class K3DockWidgetHeaderDragPrivate; 00225 K3DockWidgetHeaderDragPrivate *d; 00226 }; 00227 00235 class KDE3SUPPORT_EXPORT K3DockWidgetHeader : public K3DockWidgetAbstractHeader 00236 { 00237 Q_OBJECT 00238 public: 00239 00246 K3DockWidgetHeader( K3DockWidget* parent, const char* name = 0L ); 00247 00251 virtual ~K3DockWidgetHeader(); 00252 00258 virtual void setTopLevel( bool t); 00259 00265 void setDragPanel( K3DockWidgetHeaderDrag* nd ); 00266 00270 K3DockWidgetHeaderDrag *dragPanel(); 00271 00272 bool dragEnabled() const; 00273 void setDragEnabled(bool b); 00274 void showUndockButton(bool show); 00275 00276 void forceCloseButtonHidden(bool enable=true); 00277 #ifndef NO_KDE2 00278 00283 virtual void saveConfig( KConfigGroup* c); 00284 00290 virtual void loadConfig( KConfigGroup* c); 00291 #endif 00292 00298 void addButton(K3DockButton_Private*); 00299 00305 void removeButton(K3DockButton_Private*); 00306 00307 00308 00309 protected Q_SLOTS: 00313 void slotStayClicked(); 00314 00315 protected: 00316 00320 QHBoxLayout* layout; 00321 00325 K3DockButton_Private* closeButton; 00326 00330 K3DockButton_Private* stayButton; 00331 00335 K3DockButton_Private* dockbackButton; 00336 00340 K3DockWidgetHeaderDrag* drag; 00341 00342 protected: 00343 virtual void virtual_hook( int id, void* data ); 00344 private: 00345 K3DockWidgetHeaderPrivate *d; 00346 }; 00347 00356 class KDE3SUPPORT_EXPORT K3DockTabGroup : public QTabWidget 00357 { 00358 Q_OBJECT 00359 public: 00363 K3DockTabGroup( QWidget *parent = 0, const char *name = 0 ); 00364 00368 virtual ~K3DockTabGroup(); 00369 00370 QWidget *transientTo(); 00371 protected: 00372 virtual void virtual_hook( int id, void* data ); 00373 private: 00374 class K3DockTabGroupPrivate; 00375 K3DockTabGroupPrivate *d; 00376 }; 00377 00378 00415 class KDE3SUPPORT_EXPORT K3DockWidget: public QWidget 00416 { 00417 Q_OBJECT 00418 friend class K3DockManager; 00419 friend class K3DockSplitter; 00420 friend class K3DockMainWindow; 00421 friend class K3DockArea; 00422 00423 public: 00439 K3DockWidget( K3DockManager* dockManager, const char* name, 00440 const QPixmap &pixmap, QWidget* parent = 0L, const QString& strCaption = QString(), 00441 const QString& strTabPageLabel = QLatin1String( " " ), Qt::WFlags f = 0); 00442 00446 virtual ~K3DockWidget(); 00447 00451 enum DockPosition 00452 { 00453 DockNone = 0, 00454 DockTop = 0x0001, 00455 DockLeft = 0x0002, 00456 DockRight = 0x0004, 00457 DockBottom = 0x0008, 00458 DockCenter = 0x0010, 00459 DockDesktop= 0x0020, 00460 DockToSpecialSites=0x0040, 00461 DockCorner = DockTop | DockLeft | DockRight | DockBottom, 00462 DockFullSite = DockCorner | DockCenter, 00463 DockFullDocking = DockFullSite | DockDesktop 00464 }; 00465 00490 K3DockWidget* manualDock( K3DockWidget* target, DockPosition dockPos, int spliPos = 50, QPoint pos = QPoint(0,0), bool check = false, int tabIndex = -1); 00491 00497 void setEnableDocking( int pos ); 00498 00502 int enableDocking() const; 00503 00509 void setDockSite( int pos ); 00510 00514 int dockSite() const; 00515 00523 void setWidget( QWidget* w); 00524 00530 QWidget* getWidget() const; 00531 00540 void setHeader( K3DockWidgetAbstractHeader* ah); 00541 00545 K3DockWidgetAbstractHeader *getHeader(); 00546 00552 void makeDockVisible(); 00553 00563 bool mayBeHide() const; 00564 00572 bool mayBeShow() const; 00573 00577 K3DockManager* dockManager() const; 00578 00589 void setToolTipString(const QString& ttStr); 00590 00594 const QString& toolTipString() const; 00595 00599 bool isDockBackPossible() const; 00600 00605 void setTabPageLabel( const QString& label); 00606 00610 const QString& tabPageLabel() const; 00611 00615 virtual bool event( QEvent * ); 00616 00620 virtual void show(); 00624 K3DockTabGroup* parentDockTabGroup() const; 00625 00626 QWidget *parentDockContainer() const; 00627 00628 #ifndef NO_KDE2 00629 00635 void setDockWindowType (NET::WindowType windowType); 00636 00637 #endif 00638 00639 void setDockWindowTransient (QWidget *parent, bool transientEnabled); 00640 00644 QWidget *transientTo(); 00645 00651 K3DockWidget *findNearestDockWidget(DockPosition pos); 00652 00658 void setPixmap(const QPixmap& pixmap=QPixmap()); 00659 00663 const QPixmap& pixmap() const; 00664 00668 K3DockWidget::DockPosition currentDockPosition() const; 00669 00670 public Q_SLOTS: 00676 void setForcedFixedWidth(int); 00682 void setForcedFixedHeight(int); 00683 void restoreFromForcedFixedSize(); 00684 00685 int forcedFixedWidth(); 00686 int forcedFixedHeight(); 00687 00692 void dockBack(); 00693 00697 void changeHideShowState(); 00698 00704 void undock(); 00705 00709 void toDesktop( ); 00710 00711 protected: 00712 friend class K3MdiMainFrm; 00713 friend class K3MDI::MainWindow; 00721 void updateHeader(); 00722 00723 void setLatestK3DockContainer(QWidget *); 00724 QWidget *latestK3DockContainer(); 00725 00726 void setFormerBrotherDockWidget(K3DockWidget *); 00727 00728 Q_SIGNALS: 00732 void widgetSet(QWidget*); 00733 00740 void docking( K3DockWidget* dw, K3DockWidget::DockPosition dp); 00741 00745 void setDockDefaultPos(); 00746 00750 void headerCloseButtonClicked(); 00751 00755 void headerDockbackButtonClicked(); 00756 00760 void iMBeingClosed(); 00764 void hasUndocked(); 00765 00766 protected Q_SLOTS: 00767 00772 void loseFormerBrotherDockWidget(); 00773 00774 virtual void paintEvent(QPaintEvent*); 00775 00776 virtual void mousePressEvent(QMouseEvent*); 00777 virtual void mouseReleaseEvent(QMouseEvent*); 00778 virtual void mouseMoveEvent(QMouseEvent*); 00779 virtual void leaveEvent(QEvent*); 00780 protected: 00781 friend class K3DockWidgetHeader; 00785 K3DockWidget* formerBrotherDockWidget; 00789 DockPosition currentDockPos; 00793 DockPosition formerDockPos; 00797 QString toolTipStr; 00801 QString tabPageTitle; 00802 00803 private: 00809 void setDockTabName( K3DockTabGroup* g); 00810 00818 void applyToWidget( QWidget* s, const QPoint& p = QPoint(0,0) ); 00819 00823 K3DockWidgetAbstractHeader* header; 00824 00828 QWidget* widget; 00829 00833 QVBoxLayout* layout; 00834 00838 K3DockManager* manager; 00839 00843 QPixmap* pix; 00844 00848 int eDocking; 00849 00853 int sDocking; 00854 00858 K3DockWidget::DockPosition prevSideDockPosBeforeDrag; 00859 00860 // GROUP data 00861 QString firstName; 00862 QString lastName; 00863 Qt::Orientation splitterOrientation; 00864 bool isGroup; 00865 bool isTabGroup; 00866 protected: 00867 virtual void virtual_hook( int id, void* data ); 00868 private: 00869 K3DockWidgetPrivate *d; 00870 }; 00871 00884 class KDE3SUPPORT_EXPORT K3DockManager: public QObject 00885 { 00886 Q_OBJECT 00887 friend class K3DockWidget; 00888 friend class K3DockMainWindow; 00889 00890 public: 00891 enum EnReadDockConfigMode { 00892 Unknown, 00893 WrapExistingWidgetsOnly, 00894 RestoreAllDockwidgets 00895 }; 00896 00897 public: 00908 K3DockManager( QWidget* mainWindow, const char* name = 0L ); 00909 00913 virtual ~K3DockManager(); 00914 00915 void dumpDockWidgets(); 00916 00917 #ifndef NO_KDE2 00918 00927 void writeConfig( KConfig* c = 0L, const QString &group = QString() ); 00928 00945 void readConfig ( KConfig* c = 0L, const QString &group = QString() ); 00946 #endif 00947 00948 void setMainDockWidget2(K3DockWidget *); 00949 00953 void writeConfig(QDomElement &base); 00957 void readConfig(QDomElement &base); 00958 00963 void activate(); 00964 00973 virtual bool eventFilter( QObject * object, QEvent * event ); 00974 00982 K3DockWidget* findWidgetParentDock( QWidget* w) const; 00983 00989 void makeWidgetDockVisible( QWidget* w ); 00990 00994 Q3PopupMenu* dockHideShowMenu() const; 00995 01000 K3DockWidget* getDockWidgetFromName( const QString& dockName ); 01001 01006 void setSplitterOpaqueResize(bool b=true); 01007 01011 bool splitterOpaqueResize() const; 01012 01018 void setSplitterKeepSize(bool b=true); 01019 01023 bool splitterKeepSize() const; 01024 01033 void setSplitterHighResolution(bool b=true); 01034 01038 bool splitterHighResolution() const; 01039 01040 void setSpecialLeftDockContainer(K3DockWidget* container); 01041 void setSpecialTopDockContainer(K3DockWidget* container); 01042 void setSpecialRightDockContainer(K3DockWidget* container); 01043 void setSpecialBottomDockContainer(K3DockWidget* container); 01044 01045 void removeFromAutoCreateList(K3DockWidget* pDockWidget); 01046 void finishReadDockConfig(); 01047 void setReadDockConfigMode(int mode); 01048 01049 Q_SIGNALS: 01050 01054 void change(); 01055 01059 void replaceDock( K3DockWidget* oldDock, K3DockWidget* newDock ); 01060 01064 void setDockDefaultPos( K3DockWidget* ); 01065 01066 private Q_SLOTS: 01067 01071 void slotMenuPopup(); 01072 01078 void slotMenuActivated( int id); 01079 01080 /* clears the old drawn drag rectangle (oldDragRect) from screen and 01081 * draws the new current drag rectangle (dragRect) depending on the current mouse position. 01082 * This highlights the dockwidget which is the currently chosen target during a dock action. 01083 */ 01084 void drawDragRectangle(); 01085 01086 private: 01087 01091 struct MenuDockData 01092 { 01093 MenuDockData( K3DockWidget* _dock, bool _hide ) 01094 { 01095 dock = _dock; 01096 hide = _hide; 01097 } 01098 ~MenuDockData(){} 01099 01100 K3DockWidget* dock; 01101 bool hide; 01102 }; 01103 01110 K3DockWidget* findDockWidgetAt( const QPoint& pos ); 01111 01119 void findChildDockWidget( QWidget*& w, const QWidget* p, const QPoint& pos ); 01120 01127 void findChildDockWidget( const QWidget* p, QWidgetList*& l); 01128 01132 void startDrag( K3DockWidget* ); 01133 01140 void dragMove( K3DockWidget* d, QPoint pos ); 01141 01145 void cancelDrop(); 01146 01151 void drop(); 01152 01153 // class members 01154 01158 QWidget* main; 01159 01163 K3DockWidget* currentDragWidget; 01164 01168 K3DockWidget* currentMoveWidget; // widget where mouse moving 01169 01173 QWidgetList* childDockWidgetList; 01174 01178 K3DockWidget::DockPosition curPos; 01179 01184 QObjectList* childDock; 01185 01189 QObjectList* autoCreateDock; 01190 01194 int storeW; 01195 01199 int storeH; 01200 01204 bool dragging; 01205 01209 bool undockProcess; 01210 01215 bool dropCancel; 01216 01221 Q3PopupMenu* menu; 01222 01226 Q3PtrList<MenuDockData> *menuData; 01227 01228 protected: 01229 virtual void virtual_hook( int id, void* data ); 01230 private: 01231 class K3DockManagerPrivate; 01232 K3DockManagerPrivate *d; 01233 }; 01234 01278 class KDE3SUPPORT_EXPORT K3DockMainWindow : public KXmlGuiWindow 01279 { 01280 Q_OBJECT 01281 01282 friend class K3DockManager; 01283 01284 public: 01285 01298 K3DockMainWindow( QWidget* parent = 0L, const char *name = 0L, Qt::WFlags f = Qt::Window); 01299 01303 virtual ~K3DockMainWindow(); 01304 01309 K3DockManager* manager() const; 01310 01317 void setMainDockWidget( K3DockWidget* dockwidget); 01318 01324 K3DockWidget* getMainDockWidget() const; 01325 01338 K3DockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L, 01339 const QString& strCaption = QString(), const QString& strTabPageLabel = QLatin1String( " " ) ); 01340 01344 void writeDockConfig(QDomElement &base); 01348 void readDockConfig(QDomElement &base); 01349 01350 #ifndef NO_KDE2 01351 01357 void writeDockConfig( KConfig* c = 0L, const QString &group = QString() ); 01358 01365 void readDockConfig ( KConfig* c = 0L, const QString &group = QString() ); 01366 #endif 01367 01373 void activateDock(); 01374 01381 Q3PopupMenu* dockHideShowMenu() const; 01382 01390 void makeDockVisible( K3DockWidget* dock ); 01391 01397 void makeDockInvisible( K3DockWidget* dock ); 01398 01403 void makeWidgetDockVisible( QWidget* widget ); 01404 01411 void setView( QWidget * widget ); 01412 01413 Q_SIGNALS: 01417 void dockWidgetHasUndocked(K3DockWidget*); 01418 01419 protected: 01420 01424 K3DockWidget* mainDockWidget; 01425 01429 K3DockManager* dockManager; 01430 01431 protected Q_SLOTS: 01435 void slotDockWidgetUndocked(); 01436 01437 protected: 01438 virtual void virtual_hook( int id, void* data ); 01439 private: 01440 class K3DockMainWindowPrivate; 01441 K3DockMainWindowPrivate *d; 01442 }; 01443 01444 class KDE3SUPPORT_EXPORT K3DockArea : public QWidget 01445 { 01446 Q_OBJECT 01447 01448 friend class K3DockManager; 01449 01450 public: 01451 01452 01453 K3DockArea( QWidget* parent = 0L, const char *name = 0L); 01454 01455 virtual ~K3DockArea(); 01456 01457 K3DockManager* manager(); 01458 01459 01460 void setMainDockWidget( K3DockWidget* ); 01461 K3DockWidget* getMainDockWidget(); 01462 01463 K3DockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L, 01464 const QString& strCaption = QString(), const QString& strTabPageLabel = QLatin1String( " " ) ); 01465 01466 void writeDockConfig(QDomElement &base); 01467 void readDockConfig(QDomElement &base); 01468 01469 #ifndef NO_KDE2 01470 void writeDockConfig( KConfig* c = 0L, const QString &group = QString() ); 01471 void readDockConfig ( KConfig* c = 0L, const QString &group = QString() ); 01472 #endif 01473 01474 01475 01476 void activateDock(); 01477 Q3PopupMenu* dockHideShowMenu(); 01478 void makeDockVisible( K3DockWidget* dock ); 01479 void makeDockInvisible( K3DockWidget* dock ); 01480 void makeWidgetDockVisible( QWidget* widget ); 01481 //void setView( QWidget* ); 01482 01483 Q_SIGNALS: 01487 void dockWidgetHasUndocked(K3DockWidget*); 01488 01489 protected: 01490 01491 K3DockWidget* mainDockWidget; 01492 K3DockManager* dockManager; 01493 01494 protected Q_SLOTS: 01495 void slotDockWidgetUndocked(); 01496 01497 public: 01498 virtual void resizeEvent(QResizeEvent *); 01499 01500 protected: 01501 virtual void virtual_hook( int id, void* data ); 01502 private: 01503 class K3DockMainWindowPrivate; 01504 K3DockMainWindowPrivate *d; 01505 }; 01506 01507 01508 #endif 01509 01510
KDE 4.6 API Reference