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 <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
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
01081
01082
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
01154
01158 QWidget* main;
01159
01163 K3DockWidget* currentDragWidget;
01164
01168 K3DockWidget* currentMoveWidget;
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
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