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
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #ifndef KDOCKWIDGET_H
00047 #define KDOCKWIDGET_H
00048
00049 #define _KDOCKWIDGET_2_2_
00050
00051 #include <qpoint.h>
00052 #include <qptrlist.h>
00053 #include <qframe.h>
00054 #include <qdom.h>
00055 #include <qtabwidget.h>
00056
00057 #ifndef NO_KDE2
00058 #include <kmainwindow.h>
00059 #include <netwm_def.h>
00060 #undef EXPORT_DOCKCLASS
00061 #define EXPORT_DOCKCLASS
00062 #else
00063 #include <qmainwindow.h>
00064 #include "exportdockclass.h"
00065 #include "dummykmainwindow.h"
00066 #endif
00067
00068 class KDockSplitter;
00069 class KDockManager;
00070 class KDockMoveManager;
00071 class KDockWidget;
00072 class KDockButton_Private;
00073 class KDockWidgetPrivate;
00074 class KDockWidgetHeaderPrivate;
00075 class KDockArea;
00076
00077 class QObjectList;
00078 class QPopupMenu;
00079 class QVBoxLayout;
00080 class QHBoxLayout;
00081 class QPixmap;
00082
00083 #ifndef NO_KDE2
00084 class KToolBar;
00085 class KConfig;
00086 #else
00087 class QToolBar;
00088 #endif
00089
00090 class KDockContainer;
00091
00099 class KDockWidgetAbstractHeader : public QFrame
00100 {
00101 Q_OBJECT
00102 public:
00103
00110 KDockWidgetAbstractHeader( KDockWidget* parent, const char* name = 0L );
00111
00115 virtual ~KDockWidgetAbstractHeader(){};
00116
00120 virtual void setTopLevel( bool ){};
00121
00122 #ifndef NO_KDE2
00123
00126 virtual void saveConfig( KConfig* ){};
00127
00131 virtual void loadConfig( KConfig* ){};
00132 #endif
00133
00134 protected:
00135 virtual void virtual_hook( int id, void* data );
00136 private:
00137 class KDockWidgetAbstractHeaderPrivate;
00138 KDockWidgetAbstractHeaderPrivate *d;
00139 };
00140
00148 class KDockWidgetAbstractHeaderDrag : public QFrame
00149 {
00150 Q_OBJECT
00151 public:
00152
00160 KDockWidgetAbstractHeaderDrag( KDockWidgetAbstractHeader* parent,
00161 KDockWidget* dock, const char* name = 0L );
00162
00166 virtual ~KDockWidgetAbstractHeaderDrag(){};
00167
00171 KDockWidget* dockWidget() const { return dw; }
00172
00173 private:
00177 KDockWidget* dw;
00178 protected:
00179 virtual void virtual_hook( int id, void* data );
00180 private:
00181 class KDockWidgetAbstractHeaderDragPrivate;
00182 KDockWidgetAbstractHeaderDragPrivate *d;
00183 };
00184
00193 class KDockWidgetHeaderDrag : public KDockWidgetAbstractHeaderDrag
00194 {
00195 Q_OBJECT
00196 public:
00197
00205 KDockWidgetHeaderDrag( KDockWidgetAbstractHeader* parent, KDockWidget* dock,
00206 const char* name = 0L );
00207
00211 virtual ~KDockWidgetHeaderDrag(){};
00212
00213 protected:
00214
00218 virtual void paintEvent( QPaintEvent* );
00219
00220 protected:
00221 virtual void virtual_hook( int id, void* data );
00222 private:
00223 class KDockWidgetHeaderDragPrivate;
00224 KDockWidgetHeaderDragPrivate *d;
00225 };
00226
00234 class KDockWidgetHeader : public KDockWidgetAbstractHeader
00235 {
00236 Q_OBJECT
00237 public:
00238
00245 KDockWidgetHeader( KDockWidget* parent, const char* name = 0L );
00246
00250 virtual ~KDockWidgetHeader(){};
00251
00257 virtual void setTopLevel( bool t);
00258
00264 void setDragPanel( KDockWidgetHeaderDrag* nd );
00265
00266 bool dragEnabled() const;
00267 void setDragEnabled(bool b);
00269 void showUndockButton(bool show);
00270
00272 void forceCloseButtonHidden(bool enable=true);
00273 #ifndef NO_KDE2
00274
00279 virtual void saveConfig( KConfig* c);
00280
00286 virtual void loadConfig( KConfig* c);
00287 #endif
00288
00289
00290
00291
00292
00293
00294 void addButton(KDockButton_Private*);
00295
00296
00297
00298
00299
00300
00301 void removeButton(KDockButton_Private*);
00302
00303
00304
00305 protected slots:
00309 void slotStayClicked();
00310
00311 protected:
00312
00316 QHBoxLayout* layout;
00317
00321 KDockButton_Private* closeButton;
00322
00326 KDockButton_Private* stayButton;
00327
00331 KDockButton_Private* dockbackButton;
00332
00336 KDockWidgetHeaderDrag* drag;
00337
00338 protected:
00339 virtual void virtual_hook( int id, void* data );
00340 private:
00341 KDockWidgetHeaderPrivate *d;
00342 };
00343
00352 class EXPORT_DOCKCLASS KDockTabGroup : public QTabWidget
00353 {
00354 Q_OBJECT
00355 public:
00359 KDockTabGroup( QWidget *parent = 0, const char *name = 0 )
00360 :QTabWidget( parent, name ){};
00361
00365 virtual ~KDockTabGroup(){};
00366
00367 QWidget *transientTo();
00368 protected:
00369 virtual void virtual_hook( int id, void* data );
00370 private:
00371 class KDockTabGroupPrivate;
00372 KDockTabGroupPrivate *d;
00373 };
00374
00375
00412 class EXPORT_DOCKCLASS KDockWidget: public QWidget
00413 {
00414 Q_OBJECT
00415 friend class KDockManager;
00416 friend class KDockSplitter;
00417 friend class KDockMainWindow;
00418 friend class KDockArea;
00419
00420 public:
00436 KDockWidget( KDockManager* dockManager, const char* name,
00437 const QPixmap &pixmap, QWidget* parent = 0L, const QString& strCaption = QString::null,
00438 const QString& strTabPageLabel = QString::fromLatin1( " " ), WFlags f = 0);
00439
00443 virtual ~KDockWidget();
00444
00448 enum DockPosition
00449 {
00450 DockNone = 0,
00451 DockTop = 0x0001,
00452 DockLeft = 0x0002,
00453 DockRight = 0x0004,
00454 DockBottom = 0x0008,
00455 DockCenter = 0x0010,
00456 DockDesktop= 0x0020,
00457 DockToSpecialSites=0x0040,
00458 DockCorner = DockTop | DockLeft | DockRight | DockBottom,
00459 DockFullSite = DockCorner | DockCenter,
00460 DockFullDocking = DockFullSite | DockDesktop
00461 };
00462
00482 KDockWidget* manualDock( KDockWidget* target, DockPosition dockPos, int spliPos = 50, QPoint pos = QPoint(0,0), bool check = false, int tabIndex = -1);
00483
00489 void setEnableDocking( int pos );
00490
00494 int enableDocking() const { return eDocking; }
00495
00501 void setDockSite( int pos ){ sDocking = pos;}
00502
00506 int dockSite() const { return sDocking; }
00507
00515 void setWidget( QWidget* w);
00516
00522 QWidget* getWidget() const { return widget; };
00523
00532 void setHeader( KDockWidgetAbstractHeader* ah);
00533
00537 KDockWidgetAbstractHeader *getHeader();
00538
00544 void makeDockVisible();
00545
00555 bool mayBeHide() const;
00556
00564 bool mayBeShow() const;
00565
00569 KDockManager* dockManager() const { return manager; }
00570
00581 void setToolTipString(const QString& ttStr) { toolTipStr = ttStr; };
00582
00586 const QString& toolTipString() const { return toolTipStr; };
00587
00591 bool isDockBackPossible() const;
00592
00597 void setTabPageLabel( const QString& label) { tabPageTitle = label; };
00598
00602 const QString& tabPageLabel() const { return tabPageTitle; };
00603
00607 virtual bool event( QEvent * );
00608
00612 virtual void show();
00616 KDockTabGroup* parentDockTabGroup() const;
00617
00619 QWidget *parentDockContainer() const;
00620
00621 #ifndef NO_KDE2
00622
00628 void setDockWindowType (NET::WindowType windowType);
00629
00630 #endif
00631
00632 void setDockWindowTransient (QWidget *parent, bool transientEnabled);
00633
00638 QWidget *transientTo();
00639
00646 KDockWidget *findNearestDockWidget(DockPosition pos);
00647
00654 void setPixmap(const QPixmap& pixmap=QPixmap());
00655
00661 const QPixmap& pixmap() const;
00662 public slots:
00669 void setForcedFixedWidth(int);
00676 void setForcedFixedHeight(int);
00678 void restoreFromForcedFixedSize();
00679
00681 int forcedFixedWidth();
00683 int forcedFixedHeight();
00684
00689 void dockBack();
00690
00694 void changeHideShowState();
00695
00701 void undock();
00702
00707 void toDesktop( );
00708
00709 protected:
00710 friend class KMdiMainFrm;
00718 void updateHeader();
00719
00721 void setLatestKDockContainer(QWidget *);
00723 QWidget *latestKDockContainer();
00724
00725 signals:
00730 void widgetSet(QWidget*);
00731
00738 void docking( KDockWidget* dw, KDockWidget::DockPosition dp);
00739
00743 void setDockDefaultPos();
00744
00748 void headerCloseButtonClicked();
00749
00753 void headerDockbackButtonClicked();
00754
00758 void iMBeingClosed();
00762 void hasUndocked();
00763
00764 protected slots:
00765
00770 void loseFormerBrotherDockWidget();
00771
00772 virtual void paintEvent(QPaintEvent*);
00773
00774 virtual void mousePressEvent(QMouseEvent*);
00775 virtual void mouseReleaseEvent(QMouseEvent*);
00776 virtual void mouseMoveEvent(QMouseEvent*);
00777 virtual void leaveEvent(QEvent*);
00778 protected:
00779 friend class KDockWidgetHeader;
00783 KDockWidget* formerBrotherDockWidget;
00787 DockPosition currentDockPos;
00791 DockPosition formerDockPos;
00795 QString toolTipStr;
00799 QString tabPageTitle;
00800
00801 private:
00807 void setDockTabName( KDockTabGroup* g);
00808
00816 void applyToWidget( QWidget* s, const QPoint& p = QPoint(0,0) );
00817
00821 KDockWidgetAbstractHeader* header;
00822
00826 QWidget* widget;
00827
00831 QVBoxLayout* layout;
00832
00836 KDockManager* manager;
00837
00841 QPixmap* pix;
00842
00846 int eDocking;
00847
00851 int sDocking;
00852
00856 KDockWidget::DockPosition prevSideDockPosBeforeDrag;
00857
00858
00859 QString firstName;
00860 QString lastName;
00861 Orientation splitterOrientation;
00862 bool isGroup;
00863 bool isTabGroup;
00864 protected:
00865 virtual void virtual_hook( int id, void* data );
00866 private:
00867 KDockWidgetPrivate *d;
00868 };
00869
00882 class EXPORT_DOCKCLASS KDockManager: public QObject
00883 {
00884 Q_OBJECT
00885 friend class KDockWidget;
00886 friend class KDockMainWindow;
00887
00888 public:
00889 enum EnReadDockConfigMode {
00890 Unknown,
00891 WrapExistingWidgetsOnly,
00892 RestoreAllDockwidgets
00893 };
00894
00895 public:
00906 KDockManager( QWidget* mainWindow, const char* name = 0L );
00907
00911 virtual ~KDockManager();
00912
00913 void dumpDockWidgets();
00914
00915 #ifndef NO_KDE2
00916
00925 void writeConfig( KConfig* c = 0L, QString group = QString::null );
00926
00943 void readConfig ( KConfig* c = 0L, QString group = QString::null );
00944 #endif
00945
00947 void setMainDockWidget2(KDockWidget *);
00948
00952 void writeConfig(QDomElement &base);
00956 void readConfig(QDomElement &base);
00957
00962 void activate();
00963
00972 virtual bool eventFilter( QObject * object, QEvent * event );
00973
00981 KDockWidget* findWidgetParentDock( QWidget* w) const;
00982
00988 void makeWidgetDockVisible( QWidget* w ){ findWidgetParentDock(w)->makeDockVisible(); }
00989
00993 QPopupMenu* dockHideShowMenu() const { return menu; }
00994
00999 KDockWidget* getDockWidgetFromName( const QString& dockName );
01000
01005 void setSplitterOpaqueResize(bool b=true);
01006
01010 bool splitterOpaqueResize() const;
01011
01017 void setSplitterKeepSize(bool b=true);
01018
01022 bool splitterKeepSize() const;
01023
01030 void setSplitterHighResolution(bool b=true);
01031
01035 bool splitterHighResolution() const;
01036
01040 void setSpecialLeftDockContainer(KDockWidget* container);
01041 void setSpecialTopDockContainer(KDockWidget* container);
01042 void setSpecialRightDockContainer(KDockWidget* container);
01043 void setSpecialBottomDockContainer(KDockWidget* container);
01044
01045 void removeFromAutoCreateList(KDockWidget* pDockWidget);
01046 void finishReadDockConfig();
01047 void setReadDockConfigMode(int mode);
01048
01049 signals:
01050
01054 void change();
01055
01059 void replaceDock( KDockWidget* oldDock, KDockWidget* newDock );
01060
01064 void setDockDefaultPos( KDockWidget* );
01065
01066 private slots:
01067
01071 void slotMenuPopup();
01072
01078 void slotMenuActivated( int id);
01079
01080
01081
01082
01083
01084 void drawDragRectangle();
01085
01086 private:
01087
01091 struct MenuDockData
01092 {
01093 MenuDockData( KDockWidget* _dock, bool _hide )
01094 {
01095 dock = _dock;
01096 hide = _hide;
01097 };
01098 ~MenuDockData(){};
01099
01100 KDockWidget* dock;
01101 bool hide;
01102 };
01103
01110 KDockWidget* 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( KDockWidget* );
01133
01140 void dragMove( KDockWidget* d, QPoint pos );
01141
01145 void cancelDrop();
01146
01151 void drop();
01152
01153
01154
01158 QWidget* main;
01159
01163 KDockWidget* currentDragWidget;
01164
01168 KDockWidget* currentMoveWidget;
01169
01173 QWidgetList* childDockWidgetList;
01174
01178 KDockWidget::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 QPopupMenu* menu;
01222
01226 QPtrList<MenuDockData> *menuData;
01227
01228 protected:
01229 virtual void virtual_hook( int id, void* data );
01230 private:
01231 class KDockManagerPrivate;
01232 KDockManagerPrivate *d;
01233 };
01234
01278 class EXPORT_DOCKCLASS KDockMainWindow : public KMainWindow
01279 {
01280 Q_OBJECT
01281
01282 friend class KDockManager;
01283
01284 public:
01285
01298 KDockMainWindow( QWidget* parent = 0L, const char *name = 0L, WFlags f = WType_TopLevel | WDestructiveClose );
01299
01303 virtual ~KDockMainWindow();
01304
01309 KDockManager* manager() const { return dockManager; }
01310
01317 void setMainDockWidget( KDockWidget* dockwidget);
01318
01324 KDockWidget* getMainDockWidget() const { return mainDockWidget; }
01325
01338 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01339 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01340
01344 void writeDockConfig(QDomElement &base);
01348 void readDockConfig(QDomElement &base);
01349
01350 #ifndef NO_KDE2
01351
01357 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01358
01365 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01366 #endif
01367
01373 void activateDock(){ dockManager->activate(); }
01374
01381 QPopupMenu* dockHideShowMenu() const { return dockManager->dockHideShowMenu(); }
01382
01390 void makeDockVisible( KDockWidget* dock );
01391
01397 void makeDockInvisible( KDockWidget* dock );
01398
01403 void makeWidgetDockVisible( QWidget* widget );
01404
01411 void setView( QWidget * widget );
01412
01413 signals:
01417 void dockWidgetHasUndocked(KDockWidget*);
01418
01419 protected:
01420
01424 KDockWidget* mainDockWidget;
01425
01429 KDockManager* dockManager;
01430
01431 protected slots:
01435 void slotDockWidgetUndocked();
01436
01437 protected:
01438 virtual void virtual_hook( int id, void* data );
01439 private:
01440 class KDockMainWindowPrivate;
01441 KDockMainWindowPrivate *d;
01442 };
01443
01444
01445
01446
01447
01448
01449
01450
01451
01452
01453
01454
01455
01456
01457
01458
01459 class EXPORT_DOCKCLASS KDockArea : public QWidget
01460 {
01461 Q_OBJECT
01462
01463 friend class KDockManager;
01464
01465 public:
01466
01467
01468 KDockArea( QWidget* parent = 0L, const char *name = 0L);
01469
01470 virtual ~KDockArea();
01471
01472 KDockManager* manager(){ return dockManager; }
01473
01474
01475 void setMainDockWidget( KDockWidget* );
01476 KDockWidget* getMainDockWidget(){ return mainDockWidget; }
01477
01478 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01479 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01480
01481 void writeDockConfig(QDomElement &base);
01482 void readDockConfig(QDomElement &base);
01483
01484 #ifndef NO_KDE2
01485 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01486 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01487 #endif
01488
01489
01490
01491 void activateDock(){ dockManager->activate(); }
01492 QPopupMenu* dockHideShowMenu(){ return dockManager->dockHideShowMenu(); }
01493 void makeDockVisible( KDockWidget* dock );
01494 void makeDockInvisible( KDockWidget* dock );
01495 void makeWidgetDockVisible( QWidget* widget );
01496
01497
01498 signals:
01502 void dockWidgetHasUndocked(KDockWidget*);
01503
01504 protected:
01505
01506 KDockWidget* mainDockWidget;
01507 KDockManager* dockManager;
01508
01509 protected slots:
01510 void slotDockWidgetUndocked();
01511
01512 public:
01513 virtual void resizeEvent(QResizeEvent *);
01514
01515 protected:
01516 virtual void virtual_hook( int id, void* data );
01517 private:
01518 class KDockMainWindowPrivate;
01519 KDockMainWindowPrivate *d;
01520 };
01521
01522
01523 #endif
01524
01525