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 #else
00061
00062 #include <qmainwindow.h>
00063 #include "exportdockclass.h"
00064 #include "dummykmainwindow.h"
00065 #endif
00066
00067 class KDockSplitter;
00068 class KDockManager;
00069 class KDockMoveManager;
00070 class KDockWidget;
00071 class KDockButton_Private;
00072 class KDockWidgetPrivate;
00073 class KDockWidgetHeaderPrivate;
00074 class KDockArea;
00075
00076 class QObjectList;
00077 class QPopupMenu;
00078 class QVBoxLayout;
00079 class QHBoxLayout;
00080 class QPixmap;
00081
00082 #ifndef NO_KDE2
00083 class KToolBar;
00084 class KConfig;
00085 #else
00086 class QToolBar;
00087 #endif
00088
00089 class KDockContainer;
00090
00091 namespace KMDI
00092 {
00093 class MainWindow;
00094 }
00095
00103 class KDEUI_EXPORT KDockWidgetAbstractHeader : public QFrame
00104 {
00105 Q_OBJECT
00106 public:
00107
00114 KDockWidgetAbstractHeader( KDockWidget* parent, const char* name = 0L );
00115
00119 virtual ~KDockWidgetAbstractHeader(){};
00120
00124 virtual void setTopLevel( bool ){};
00125
00126 #ifndef NO_KDE2
00127
00130 virtual void saveConfig( KConfig* ){};
00131
00135 virtual void loadConfig( KConfig* ){};
00136 #endif
00137
00138 protected:
00139 virtual void virtual_hook( int id, void* data );
00140 private:
00141 class KDockWidgetAbstractHeaderPrivate;
00142 KDockWidgetAbstractHeaderPrivate *d;
00143 };
00144
00152 class KDEUI_EXPORT KDockWidgetAbstractHeaderDrag : public QFrame
00153 {
00154 Q_OBJECT
00155 public:
00156
00164 KDockWidgetAbstractHeaderDrag( KDockWidgetAbstractHeader* parent,
00165 KDockWidget* dock, const char* name = 0L );
00166
00170 virtual ~KDockWidgetAbstractHeaderDrag(){};
00171
00175 KDockWidget* dockWidget() const { return dw; }
00176
00177 private:
00181 KDockWidget* dw;
00182 protected:
00183 virtual void virtual_hook( int id, void* data );
00184 private:
00185 class KDockWidgetAbstractHeaderDragPrivate;
00186 KDockWidgetAbstractHeaderDragPrivate *d;
00187 };
00188
00197 class KDEUI_EXPORT KDockWidgetHeaderDrag : public KDockWidgetAbstractHeaderDrag
00198 {
00199 Q_OBJECT
00200 public:
00201
00209 KDockWidgetHeaderDrag( KDockWidgetAbstractHeader* parent, KDockWidget* dock,
00210 const char* name = 0L );
00211
00215 virtual ~KDockWidgetHeaderDrag(){};
00216
00217 protected:
00218
00222 virtual void paintEvent( QPaintEvent* );
00223
00224 protected:
00225 virtual void virtual_hook( int id, void* data );
00226 private:
00227 class KDockWidgetHeaderDragPrivate;
00228 KDockWidgetHeaderDragPrivate *d;
00229 };
00230
00238 class KDEUI_EXPORT KDockWidgetHeader : public KDockWidgetAbstractHeader
00239 {
00240 Q_OBJECT
00241 public:
00242
00249 KDockWidgetHeader( KDockWidget* parent, const char* name = 0L );
00250
00254 virtual ~KDockWidgetHeader(){};
00255
00261 virtual void setTopLevel( bool t);
00262
00268 void setDragPanel( KDockWidgetHeaderDrag* nd );
00269
00275 KDockWidgetHeaderDrag *dragPanel();
00276
00277 bool dragEnabled() const;
00278 void setDragEnabled(bool b);
00280 void showUndockButton(bool show);
00281
00283 void forceCloseButtonHidden(bool enable=true);
00284 #ifndef NO_KDE2
00285
00290 virtual void saveConfig( KConfig* c);
00291
00297 virtual void loadConfig( KConfig* c);
00298 #endif
00299
00300
00301
00302
00303
00304
00305 void addButton(KDockButton_Private*);
00306
00307
00308
00309
00310
00311
00312 void removeButton(KDockButton_Private*);
00313
00314
00315
00316 protected slots:
00320 void slotStayClicked();
00321
00322 protected:
00323
00327 QHBoxLayout* layout;
00328
00332 KDockButton_Private* closeButton;
00333
00337 KDockButton_Private* stayButton;
00338
00342 KDockButton_Private* dockbackButton;
00343
00347 KDockWidgetHeaderDrag* drag;
00348
00349 protected:
00350 virtual void virtual_hook( int id, void* data );
00351 private:
00352 KDockWidgetHeaderPrivate *d;
00353 };
00354
00363 class KDEUI_EXPORT KDockTabGroup : public QTabWidget
00364 {
00365 Q_OBJECT
00366 public:
00370 KDockTabGroup( QWidget *parent = 0, const char *name = 0 )
00371 :QTabWidget( parent, name ){};
00372
00376 virtual ~KDockTabGroup(){};
00377
00378 QWidget *transientTo();
00379 protected:
00380 virtual void virtual_hook( int id, void* data );
00381 private:
00382 class KDockTabGroupPrivate;
00383 KDockTabGroupPrivate *d;
00384 };
00385
00386
00423 class KDEUI_EXPORT KDockWidget: public QWidget
00424 {
00425 Q_OBJECT
00426 friend class KDockManager;
00427 friend class KDockSplitter;
00428 friend class KDockMainWindow;
00429 friend class KDockArea;
00430
00431 public:
00447 KDockWidget( KDockManager* dockManager, const char* name,
00448 const QPixmap &pixmap, QWidget* parent = 0L, const QString& strCaption = QString::null,
00449 const QString& strTabPageLabel = QString::fromLatin1( " " ), WFlags f = 0);
00450
00454 virtual ~KDockWidget();
00455
00459 enum DockPosition
00460 {
00461 DockNone = 0,
00462 DockTop = 0x0001,
00463 DockLeft = 0x0002,
00464 DockRight = 0x0004,
00465 DockBottom = 0x0008,
00466 DockCenter = 0x0010,
00467 DockDesktop= 0x0020,
00468 DockToSpecialSites=0x0040,
00469 DockCorner = DockTop | DockLeft | DockRight | DockBottom,
00470 DockFullSite = DockCorner | DockCenter,
00471 DockFullDocking = DockFullSite | DockDesktop
00472 };
00473
00493 KDockWidget* manualDock( KDockWidget* target, DockPosition dockPos, int spliPos = 50, QPoint pos = QPoint(0,0), bool check = false, int tabIndex = -1);
00494
00500 void setEnableDocking( int pos );
00501
00505 int enableDocking() const { return eDocking; }
00506
00512 void setDockSite( int pos ){ sDocking = pos;}
00513
00517 int dockSite() const { return sDocking; }
00518
00526 void setWidget( QWidget* w);
00527
00533 QWidget* getWidget() const { return widget; };
00534
00543 void setHeader( KDockWidgetAbstractHeader* ah);
00544
00548 KDockWidgetAbstractHeader *getHeader();
00549
00555 void makeDockVisible();
00556
00566 bool mayBeHide() const;
00567
00575 bool mayBeShow() const;
00576
00580 KDockManager* dockManager() const { return manager; }
00581
00592 void setToolTipString(const QString& ttStr) { toolTipStr = ttStr; };
00593
00597 const QString& toolTipString() const { return toolTipStr; };
00598
00602 bool isDockBackPossible() const;
00603
00608 void setTabPageLabel( const QString& label) { tabPageTitle = label; };
00609
00613 const QString& tabPageLabel() const { return tabPageTitle; };
00614
00618 virtual bool event( QEvent * );
00619
00623 virtual void show();
00627 KDockTabGroup* parentDockTabGroup() const;
00628
00630 QWidget *parentDockContainer() const;
00631
00632 #ifndef NO_KDE2
00633
00639 void setDockWindowType (NET::WindowType windowType);
00640
00641 #endif
00642
00643 void setDockWindowTransient (QWidget *parent, bool transientEnabled);
00644
00649 QWidget *transientTo();
00650
00657 KDockWidget *findNearestDockWidget(DockPosition pos);
00658
00665 void setPixmap(const QPixmap& pixmap=QPixmap());
00666
00672 const QPixmap& pixmap() const;
00673
00678 KDockWidget::DockPosition currentDockPosition() const;
00679
00680 public slots:
00687 void setForcedFixedWidth(int);
00694 void setForcedFixedHeight(int);
00696 void restoreFromForcedFixedSize();
00697
00699 int forcedFixedWidth();
00701 int forcedFixedHeight();
00702
00707 void dockBack();
00708
00712 void changeHideShowState();
00713
00719 void undock();
00720
00725 void toDesktop( );
00726
00727 protected:
00728 friend class KMdiMainFrm;
00729 friend class KMDI::MainWindow;
00737 void updateHeader();
00738
00740 void setLatestKDockContainer(QWidget *);
00742 QWidget *latestKDockContainer();
00743
00745 void setFormerBrotherDockWidget(KDockWidget *);
00746
00747 signals:
00752 void widgetSet(QWidget*);
00753
00760 void docking( KDockWidget* dw, KDockWidget::DockPosition dp);
00761
00765 void setDockDefaultPos();
00766
00770 void headerCloseButtonClicked();
00771
00775 void headerDockbackButtonClicked();
00776
00780 void iMBeingClosed();
00784 void hasUndocked();
00785
00786 protected slots:
00787
00792 void loseFormerBrotherDockWidget();
00793
00794 virtual void paintEvent(QPaintEvent*);
00795
00796 virtual void mousePressEvent(QMouseEvent*);
00797 virtual void mouseReleaseEvent(QMouseEvent*);
00798 virtual void mouseMoveEvent(QMouseEvent*);
00799 virtual void leaveEvent(QEvent*);
00800 protected:
00801 friend class KDockWidgetHeader;
00805 KDockWidget* formerBrotherDockWidget;
00809 DockPosition currentDockPos;
00813 DockPosition formerDockPos;
00817 QString toolTipStr;
00821 QString tabPageTitle;
00822
00823 private:
00829 void setDockTabName( KDockTabGroup* g);
00830
00838 void applyToWidget( QWidget* s, const QPoint& p = QPoint(0,0) );
00839
00843 KDockWidgetAbstractHeader* header;
00844
00848 QWidget* widget;
00849
00853 QVBoxLayout* layout;
00854
00858 KDockManager* manager;
00859
00863 QPixmap* pix;
00864
00868 int eDocking;
00869
00873 int sDocking;
00874
00878 KDockWidget::DockPosition prevSideDockPosBeforeDrag;
00879
00880
00881 QString firstName;
00882 QString lastName;
00883 Orientation splitterOrientation;
00884 bool isGroup;
00885 bool isTabGroup;
00886 protected:
00887 virtual void virtual_hook( int id, void* data );
00888 private:
00889 KDockWidgetPrivate *d;
00890 };
00891
00904 class KDEUI_EXPORT KDockManager: public QObject
00905 {
00906 Q_OBJECT
00907 friend class KDockWidget;
00908 friend class KDockMainWindow;
00909
00910 public:
00911 enum EnReadDockConfigMode {
00912 Unknown,
00913 WrapExistingWidgetsOnly,
00914 RestoreAllDockwidgets
00915 };
00916
00917 public:
00928 KDockManager( QWidget* mainWindow, const char* name = 0L );
00929
00933 virtual ~KDockManager();
00934
00935 void dumpDockWidgets();
00936
00937 #ifndef NO_KDE2
00938
00947 void writeConfig( KConfig* c = 0L, QString group = QString::null );
00948
00965 void readConfig ( KConfig* c = 0L, QString group = QString::null );
00966 #endif
00967
00969 void setMainDockWidget2(KDockWidget *);
00970
00974 void writeConfig(QDomElement &base);
00978 void readConfig(QDomElement &base);
00979
00984 void activate();
00985
00994 virtual bool eventFilter( QObject * object, QEvent * event );
00995
01003 KDockWidget* findWidgetParentDock( QWidget* w) const;
01004
01010 void makeWidgetDockVisible( QWidget* w ){ findWidgetParentDock(w)->makeDockVisible(); }
01011
01015 QPopupMenu* dockHideShowMenu() const { return menu; }
01016
01021 KDockWidget* getDockWidgetFromName( const QString& dockName );
01022
01027 void setSplitterOpaqueResize(bool b=true);
01028
01032 bool splitterOpaqueResize() const;
01033
01039 void setSplitterKeepSize(bool b=true);
01040
01044 bool splitterKeepSize() const;
01045
01052 void setSplitterHighResolution(bool b=true);
01053
01057 bool splitterHighResolution() const;
01058
01062 void setSpecialLeftDockContainer(KDockWidget* container);
01063 void setSpecialTopDockContainer(KDockWidget* container);
01064 void setSpecialRightDockContainer(KDockWidget* container);
01065 void setSpecialBottomDockContainer(KDockWidget* container);
01066
01067 void removeFromAutoCreateList(KDockWidget* pDockWidget);
01068 void finishReadDockConfig();
01069 void setReadDockConfigMode(int mode);
01070
01071 signals:
01072
01076 void change();
01077
01081 void replaceDock( KDockWidget* oldDock, KDockWidget* newDock );
01082
01086 void setDockDefaultPos( KDockWidget* );
01087
01088 private slots:
01089
01093 void slotMenuPopup();
01094
01100 void slotMenuActivated( int id);
01101
01102
01103
01104
01105
01106 void drawDragRectangle();
01107
01108 private:
01109
01113 struct MenuDockData
01114 {
01115 MenuDockData( KDockWidget* _dock, bool _hide )
01116 {
01117 dock = _dock;
01118 hide = _hide;
01119 };
01120 ~MenuDockData(){};
01121
01122 KDockWidget* dock;
01123 bool hide;
01124 };
01125
01132 KDockWidget* findDockWidgetAt( const QPoint& pos );
01133
01141 void findChildDockWidget( QWidget*& w, const QWidget* p, const QPoint& pos );
01142
01149 void findChildDockWidget( const QWidget* p, QWidgetList*& l);
01150
01154 void startDrag( KDockWidget* );
01155
01162 void dragMove( KDockWidget* d, QPoint pos );
01163
01167 void cancelDrop();
01168
01173 void drop();
01174
01175
01176
01180 QWidget* main;
01181
01185 KDockWidget* currentDragWidget;
01186
01190 KDockWidget* currentMoveWidget;
01191
01195 QWidgetList* childDockWidgetList;
01196
01200 KDockWidget::DockPosition curPos;
01201
01206 QObjectList* childDock;
01207
01211 QObjectList* autoCreateDock;
01212
01216 int storeW;
01217
01221 int storeH;
01222
01226 bool dragging;
01227
01231 bool undockProcess;
01232
01237 bool dropCancel;
01238
01243 QPopupMenu* menu;
01244
01248 QPtrList<MenuDockData> *menuData;
01249
01250 protected:
01251 virtual void virtual_hook( int id, void* data );
01252 private:
01253 class KDockManagerPrivate;
01254 KDockManagerPrivate *d;
01255 };
01256
01300 class KDEUI_EXPORT KDockMainWindow : public KMainWindow
01301 {
01302 Q_OBJECT
01303
01304 friend class KDockManager;
01305
01306 public:
01307
01320 KDockMainWindow( QWidget* parent = 0L, const char *name = 0L, WFlags f = WType_TopLevel | WDestructiveClose );
01321
01325 virtual ~KDockMainWindow();
01326
01331 KDockManager* manager() const { return dockManager; }
01332
01339 void setMainDockWidget( KDockWidget* dockwidget);
01340
01346 KDockWidget* getMainDockWidget() const { return mainDockWidget; }
01347
01360 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01361 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01362
01366 void writeDockConfig(QDomElement &base);
01370 void readDockConfig(QDomElement &base);
01371
01372 #ifndef NO_KDE2
01373
01379 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01380
01387 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01388 #endif
01389
01395 void activateDock(){ dockManager->activate(); }
01396
01403 QPopupMenu* dockHideShowMenu() const { return dockManager->dockHideShowMenu(); }
01404
01412 void makeDockVisible( KDockWidget* dock );
01413
01419 void makeDockInvisible( KDockWidget* dock );
01420
01425 void makeWidgetDockVisible( QWidget* widget );
01426
01433 void setView( QWidget * widget );
01434
01435 signals:
01439 void dockWidgetHasUndocked(KDockWidget*);
01440
01441 protected:
01442
01446 KDockWidget* mainDockWidget;
01447
01451 KDockManager* dockManager;
01452
01453 protected slots:
01457 void slotDockWidgetUndocked();
01458
01459 protected:
01460 virtual void virtual_hook( int id, void* data );
01461 private:
01462 class KDockMainWindowPrivate;
01463 KDockMainWindowPrivate *d;
01464 };
01465
01466 class KDEUI_EXPORT KDockArea : public QWidget
01467 {
01468 Q_OBJECT
01469
01470 friend class KDockManager;
01471
01472 public:
01473
01474
01475 KDockArea( QWidget* parent = 0L, const char *name = 0L);
01476
01477 virtual ~KDockArea();
01478
01479 KDockManager* manager(){ return dockManager; }
01480
01481
01482 void setMainDockWidget( KDockWidget* );
01483 KDockWidget* getMainDockWidget(){ return mainDockWidget; }
01484
01485 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01486 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01487
01488 void writeDockConfig(QDomElement &base);
01489 void readDockConfig(QDomElement &base);
01490
01491 #ifndef NO_KDE2
01492 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01493 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01494 #endif
01495
01496
01497
01498 void activateDock(){ dockManager->activate(); }
01499 QPopupMenu* dockHideShowMenu(){ return dockManager->dockHideShowMenu(); }
01500 void makeDockVisible( KDockWidget* dock );
01501 void makeDockInvisible( KDockWidget* dock );
01502 void makeWidgetDockVisible( QWidget* widget );
01503
01504
01505 signals:
01509 void dockWidgetHasUndocked(KDockWidget*);
01510
01511 protected:
01512
01513 KDockWidget* mainDockWidget;
01514 KDockManager* dockManager;
01515
01516 protected slots:
01517 void slotDockWidgetUndocked();
01518
01519 public:
01520 virtual void resizeEvent(QResizeEvent *);
01521
01522 protected:
01523 virtual void virtual_hook( int id, void* data );
01524 private:
01525 class KDockMainWindowPrivate;
01526 KDockMainWindowPrivate *d;
01527 };
01528
01529
01530 #endif
01531
01532