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
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
00667 KDockWidget::DockPosition currentDockPosition() const;
00668
00669 public slots:
00676 void setForcedFixedWidth(int);
00683 void setForcedFixedHeight(int);
00685 void restoreFromForcedFixedSize();
00686
00688 int forcedFixedWidth();
00690 int forcedFixedHeight();
00691
00696 void dockBack();
00697
00701 void changeHideShowState();
00702
00708 void undock();
00709
00714 void toDesktop( );
00715
00716 protected:
00717 friend class KMdiMainFrm;
00725 void updateHeader();
00726
00728 void setLatestKDockContainer(QWidget *);
00730 QWidget *latestKDockContainer();
00731
00733 void setFormerBrotherDockWidget(KDockWidget *);
00734
00735 signals:
00740 void widgetSet(QWidget*);
00741
00748 void docking( KDockWidget* dw, KDockWidget::DockPosition dp);
00749
00753 void setDockDefaultPos();
00754
00758 void headerCloseButtonClicked();
00759
00763 void headerDockbackButtonClicked();
00764
00768 void iMBeingClosed();
00772 void hasUndocked();
00773
00774 protected slots:
00775
00780 void loseFormerBrotherDockWidget();
00781
00782 virtual void paintEvent(QPaintEvent*);
00783
00784 virtual void mousePressEvent(QMouseEvent*);
00785 virtual void mouseReleaseEvent(QMouseEvent*);
00786 virtual void mouseMoveEvent(QMouseEvent*);
00787 virtual void leaveEvent(QEvent*);
00788 protected:
00789 friend class KDockWidgetHeader;
00793 KDockWidget* formerBrotherDockWidget;
00797 DockPosition currentDockPos;
00801 DockPosition formerDockPos;
00805 QString toolTipStr;
00809 QString tabPageTitle;
00810
00811 private:
00817 void setDockTabName( KDockTabGroup* g);
00818
00826 void applyToWidget( QWidget* s, const QPoint& p = QPoint(0,0) );
00827
00831 KDockWidgetAbstractHeader* header;
00832
00836 QWidget* widget;
00837
00841 QVBoxLayout* layout;
00842
00846 KDockManager* manager;
00847
00851 QPixmap* pix;
00852
00856 int eDocking;
00857
00861 int sDocking;
00862
00866 KDockWidget::DockPosition prevSideDockPosBeforeDrag;
00867
00868
00869 QString firstName;
00870 QString lastName;
00871 Orientation splitterOrientation;
00872 bool isGroup;
00873 bool isTabGroup;
00874 protected:
00875 virtual void virtual_hook( int id, void* data );
00876 private:
00877 KDockWidgetPrivate *d;
00878 };
00879
00892 class EXPORT_DOCKCLASS KDockManager: public QObject
00893 {
00894 Q_OBJECT
00895 friend class KDockWidget;
00896 friend class KDockMainWindow;
00897
00898 public:
00899 enum EnReadDockConfigMode {
00900 Unknown,
00901 WrapExistingWidgetsOnly,
00902 RestoreAllDockwidgets
00903 };
00904
00905 public:
00916 KDockManager( QWidget* mainWindow, const char* name = 0L );
00917
00921 virtual ~KDockManager();
00922
00923 void dumpDockWidgets();
00924
00925 #ifndef NO_KDE2
00926
00935 void writeConfig( KConfig* c = 0L, QString group = QString::null );
00936
00953 void readConfig ( KConfig* c = 0L, QString group = QString::null );
00954 #endif
00955
00957 void setMainDockWidget2(KDockWidget *);
00958
00962 void writeConfig(QDomElement &base);
00966 void readConfig(QDomElement &base);
00967
00972 void activate();
00973
00982 virtual bool eventFilter( QObject * object, QEvent * event );
00983
00991 KDockWidget* findWidgetParentDock( QWidget* w) const;
00992
00998 void makeWidgetDockVisible( QWidget* w ){ findWidgetParentDock(w)->makeDockVisible(); }
00999
01003 QPopupMenu* dockHideShowMenu() const { return menu; }
01004
01009 KDockWidget* getDockWidgetFromName( const QString& dockName );
01010
01015 void setSplitterOpaqueResize(bool b=true);
01016
01020 bool splitterOpaqueResize() const;
01021
01027 void setSplitterKeepSize(bool b=true);
01028
01032 bool splitterKeepSize() const;
01033
01040 void setSplitterHighResolution(bool b=true);
01041
01045 bool splitterHighResolution() const;
01046
01050 void setSpecialLeftDockContainer(KDockWidget* container);
01051 void setSpecialTopDockContainer(KDockWidget* container);
01052 void setSpecialRightDockContainer(KDockWidget* container);
01053 void setSpecialBottomDockContainer(KDockWidget* container);
01054
01055 void removeFromAutoCreateList(KDockWidget* pDockWidget);
01056 void finishReadDockConfig();
01057 void setReadDockConfigMode(int mode);
01058
01059 signals:
01060
01064 void change();
01065
01069 void replaceDock( KDockWidget* oldDock, KDockWidget* newDock );
01070
01074 void setDockDefaultPos( KDockWidget* );
01075
01076 private slots:
01077
01081 void slotMenuPopup();
01082
01088 void slotMenuActivated( int id);
01089
01090
01091
01092
01093
01094 void drawDragRectangle();
01095
01096 private:
01097
01101 struct MenuDockData
01102 {
01103 MenuDockData( KDockWidget* _dock, bool _hide )
01104 {
01105 dock = _dock;
01106 hide = _hide;
01107 };
01108 ~MenuDockData(){};
01109
01110 KDockWidget* dock;
01111 bool hide;
01112 };
01113
01120 KDockWidget* findDockWidgetAt( const QPoint& pos );
01121
01129 void findChildDockWidget( QWidget*& w, const QWidget* p, const QPoint& pos );
01130
01137 void findChildDockWidget( const QWidget* p, QWidgetList*& l);
01138
01142 void startDrag( KDockWidget* );
01143
01150 void dragMove( KDockWidget* d, QPoint pos );
01151
01155 void cancelDrop();
01156
01161 void drop();
01162
01163
01164
01168 QWidget* main;
01169
01173 KDockWidget* currentDragWidget;
01174
01178 KDockWidget* currentMoveWidget;
01179
01183 QWidgetList* childDockWidgetList;
01184
01188 KDockWidget::DockPosition curPos;
01189
01194 QObjectList* childDock;
01195
01199 QObjectList* autoCreateDock;
01200
01204 int storeW;
01205
01209 int storeH;
01210
01214 bool dragging;
01215
01219 bool undockProcess;
01220
01225 bool dropCancel;
01226
01231 QPopupMenu* menu;
01232
01236 QPtrList<MenuDockData> *menuData;
01237
01238 protected:
01239 virtual void virtual_hook( int id, void* data );
01240 private:
01241 class KDockManagerPrivate;
01242 KDockManagerPrivate *d;
01243 };
01244
01288 class EXPORT_DOCKCLASS KDockMainWindow : public KMainWindow
01289 {
01290 Q_OBJECT
01291
01292 friend class KDockManager;
01293
01294 public:
01295
01308 KDockMainWindow( QWidget* parent = 0L, const char *name = 0L, WFlags f = WType_TopLevel | WDestructiveClose );
01309
01313 virtual ~KDockMainWindow();
01314
01319 KDockManager* manager() const { return dockManager; }
01320
01327 void setMainDockWidget( KDockWidget* dockwidget);
01328
01334 KDockWidget* getMainDockWidget() const { return mainDockWidget; }
01335
01348 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01349 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01350
01354 void writeDockConfig(QDomElement &base);
01358 void readDockConfig(QDomElement &base);
01359
01360 #ifndef NO_KDE2
01361
01367 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01368
01375 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01376 #endif
01377
01383 void activateDock(){ dockManager->activate(); }
01384
01391 QPopupMenu* dockHideShowMenu() const { return dockManager->dockHideShowMenu(); }
01392
01400 void makeDockVisible( KDockWidget* dock );
01401
01407 void makeDockInvisible( KDockWidget* dock );
01408
01413 void makeWidgetDockVisible( QWidget* widget );
01414
01421 void setView( QWidget * widget );
01422
01423 signals:
01427 void dockWidgetHasUndocked(KDockWidget*);
01428
01429 protected:
01430
01434 KDockWidget* mainDockWidget;
01435
01439 KDockManager* dockManager;
01440
01441 protected slots:
01445 void slotDockWidgetUndocked();
01446
01447 protected:
01448 virtual void virtual_hook( int id, void* data );
01449 private:
01450 class KDockMainWindowPrivate;
01451 KDockMainWindowPrivate *d;
01452 };
01453
01454
01455
01456
01457
01458
01459
01460
01461
01462
01463
01464
01465
01466
01467
01468
01469 class EXPORT_DOCKCLASS KDockArea : public QWidget
01470 {
01471 Q_OBJECT
01472
01473 friend class KDockManager;
01474
01475 public:
01476
01477
01478 KDockArea( QWidget* parent = 0L, const char *name = 0L);
01479
01480 virtual ~KDockArea();
01481
01482 KDockManager* manager(){ return dockManager; }
01483
01484
01485 void setMainDockWidget( KDockWidget* );
01486 KDockWidget* getMainDockWidget(){ return mainDockWidget; }
01487
01488 KDockWidget* createDockWidget( const QString& name, const QPixmap &pixmap, QWidget* parent = 0L,
01489 const QString& strCaption = QString::null, const QString& strTabPageLabel = QString::fromLatin1( " " ) );
01490
01491 void writeDockConfig(QDomElement &base);
01492 void readDockConfig(QDomElement &base);
01493
01494 #ifndef NO_KDE2
01495 void writeDockConfig( KConfig* c = 0L, QString group = QString::null );
01496 void readDockConfig ( KConfig* c = 0L, QString group = QString::null );
01497 #endif
01498
01499
01500
01501 void activateDock(){ dockManager->activate(); }
01502 QPopupMenu* dockHideShowMenu(){ return dockManager->dockHideShowMenu(); }
01503 void makeDockVisible( KDockWidget* dock );
01504 void makeDockInvisible( KDockWidget* dock );
01505 void makeWidgetDockVisible( QWidget* widget );
01506
01507
01508 signals:
01512 void dockWidgetHasUndocked(KDockWidget*);
01513
01514 protected:
01515
01516 KDockWidget* mainDockWidget;
01517 KDockManager* dockManager;
01518
01519 protected slots:
01520 void slotDockWidgetUndocked();
01521
01522 public:
01523 virtual void resizeEvent(QResizeEvent *);
01524
01525 protected:
01526 virtual void virtual_hook( int id, void* data );
01527 private:
01528 class KDockMainWindowPrivate;
01529 KDockMainWindowPrivate *d;
01530 };
01531
01532
01533 #endif
01534
01535