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 <tqpoint.h>
00052 #include <tqptrlist.h>
00053 #include <tqframe.h>
00054 #include <tqdom.h>
00055 #include <tqtabwidget.h>
00056
00057 #ifndef NO_KDE2
00058 #include <tdemainwindow.h>
00059 #include <netwm_def.h>
00060 #else
00061
00062 #include <tqmainwindow.h>
00063 #include "exportdockclass.h"
00064 #include "dummytdemainwindow.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 TQObjectList;
00077 class TQPopupMenu;
00078 class TQVBoxLayout;
00079 class TQHBoxLayout;
00080 class TQPixmap;
00081
00082 #ifndef NO_KDE2
00083 class TDEToolBar;
00084 class TDEConfig;
00085 #else
00086 class TQToolBar;
00087 #endif
00088
00089 class KDockContainer;
00090
00091 namespace KMDI
00092 {
00093 class MainWindow;
00094 }
00095
00103 class TDEUI_EXPORT KDockWidgetAbstractHeader : public TQFrame
00104 {
00105 Q_OBJECT
00106
00107 public:
00108
00115 KDockWidgetAbstractHeader( KDockWidget* parent, const char* name = 0L );
00116
00120 virtual ~KDockWidgetAbstractHeader(){}
00121
00125 virtual void setTopLevel( bool ){}
00126
00127 #ifndef NO_KDE2
00128
00131 virtual void saveConfig( TDEConfig* ){}
00132
00136 virtual void loadConfig( TDEConfig* ){}
00137 #endif
00138
00139 protected:
00140 virtual void virtual_hook( int id, void* data );
00141 private:
00142 class KDockWidgetAbstractHeaderPrivate;
00143 KDockWidgetAbstractHeaderPrivate *d;
00144 };
00145
00153 class TDEUI_EXPORT KDockWidgetAbstractHeaderDrag : public TQFrame
00154 {
00155 Q_OBJECT
00156
00157 public:
00158
00166 KDockWidgetAbstractHeaderDrag( KDockWidgetAbstractHeader* parent,
00167 KDockWidget* dock, const char* name = 0L );
00168
00172 virtual ~KDockWidgetAbstractHeaderDrag(){}
00173
00177 KDockWidget* dockWidget() const { return dw; }
00178
00179 private:
00183 KDockWidget* dw;
00184 protected:
00185 virtual void virtual_hook( int id, void* data );
00186 private:
00187 class KDockWidgetAbstractHeaderDragPrivate;
00188 KDockWidgetAbstractHeaderDragPrivate *d;
00189 };
00190
00199 class TDEUI_EXPORT KDockWidgetHeaderDrag : public KDockWidgetAbstractHeaderDrag
00200 {
00201 Q_OBJECT
00202
00203 public:
00204
00212 KDockWidgetHeaderDrag( KDockWidgetAbstractHeader* parent, KDockWidget* dock,
00213 const char* name = 0L );
00214
00218 virtual ~KDockWidgetHeaderDrag(){}
00219
00220 protected:
00221
00225 virtual void paintEvent( TQPaintEvent* );
00226
00227 protected:
00228 virtual void virtual_hook( int id, void* data );
00229 private:
00230 class KDockWidgetHeaderDragPrivate;
00231 KDockWidgetHeaderDragPrivate *d;
00232 };
00233
00241 class TDEUI_EXPORT KDockWidgetHeader : public KDockWidgetAbstractHeader
00242 {
00243 Q_OBJECT
00244
00245 public:
00246
00253 KDockWidgetHeader( KDockWidget* parent, const char* name = 0L );
00254
00258 virtual ~KDockWidgetHeader(){}
00259
00265 virtual void setTopLevel( bool t);
00266
00272 void setDragPanel( KDockWidgetHeaderDrag* nd );
00273
00279 KDockWidgetHeaderDrag *dragPanel();
00280
00281 bool dragEnabled() const;
00282 void setDragEnabled(bool b);
00284 void showUndockButton(bool show);
00285
00287 void forceCloseButtonHidden(bool enable=true);
00288 #ifndef NO_KDE2
00289
00294 virtual void saveConfig( TDEConfig* c);
00295
00301 virtual void loadConfig( TDEConfig* c);
00302 #endif
00303
00304
00305
00306
00307
00308
00309 void addButton(KDockButton_Private*);
00310
00311
00312
00313
00314
00315
00316 void removeButton(KDockButton_Private*);
00317
00318
00319
00320 protected slots:
00324 void slotStayClicked();
00325
00326 protected:
00327
00331 TQHBoxLayout* layout;
00332
00336 KDockButton_Private* closeButton;
00337
00341 KDockButton_Private* stayButton;
00342
00346 KDockButton_Private* dockbackButton;
00347
00351 KDockWidgetHeaderDrag* drag;
00352
00353 protected:
00354 virtual void virtual_hook( int id, void* data );
00355 private:
00356 KDockWidgetHeaderPrivate *d;
00357 };
00358
00367 class TDEUI_EXPORT KDockTabGroup : public TQTabWidget
00368 {
00369 Q_OBJECT
00370
00371 public:
00375 KDockTabGroup( TQWidget *parent = 0, const char *name = 0 )
00376 :TQTabWidget( parent, name ){}
00377
00381 virtual ~KDockTabGroup(){}
00382
00383 TQWidget *transientTo();
00384 protected:
00385 virtual void virtual_hook( int id, void* data );
00386 private:
00387 class KDockTabGroupPrivate;
00388 KDockTabGroupPrivate *d;
00389 };
00390
00391
00428 class TDEUI_EXPORT KDockWidget: public TQWidget
00429 {
00430 Q_OBJECT
00431
00432 friend class KDockManager;
00433 friend class KDockSplitter;
00434 friend class KDockMainWindow;
00435 friend class KDockArea;
00436
00437 public:
00453 KDockWidget( KDockManager* dockManager, const char* name,
00454 const TQPixmap &pixmap, TQWidget* parent = 0L, const TQString& strCaption = TQString::null,
00455 const TQString& strTabPageLabel = TQString::fromLatin1( " " ), WFlags f = 0);
00456
00460 virtual ~KDockWidget();
00461
00465 enum DockPosition
00466 {
00467 DockNone = 0,
00468 DockTop = 0x0001,
00469 DockLeft = 0x0002,
00470 DockRight = 0x0004,
00471 DockBottom = 0x0008,
00472 DockCenter = 0x0010,
00473 DockDesktop= 0x0020,
00474 DockToSpecialSites=0x0040,
00475 DockCorner = DockTop | DockLeft | DockRight | DockBottom,
00476 DockFullSite = DockCorner | DockCenter,
00477 DockFullDocking = DockFullSite | DockDesktop
00478 };
00479
00504 KDockWidget* manualDock( KDockWidget* target, DockPosition dockPos, int spliPos = 50, TQPoint pos = TQPoint(0,0), bool check = false, int tabIndex = -1);
00505
00511 void setEnableDocking( int pos );
00512
00516 int enableDocking() const { return eDocking; }
00517
00523 void setDockSite( int pos ){ sDocking = pos;}
00524
00528 int dockSite() const { return sDocking; }
00529
00537 void setWidget( TQWidget* w);
00538
00544 TQWidget* getWidget() const { return widget; }
00545
00554 void setHeader( KDockWidgetAbstractHeader* ah);
00555
00559 KDockWidgetAbstractHeader *getHeader();
00560
00566 void makeDockVisible();
00567
00577 bool mayBeHide() const;
00578
00586 bool mayBeShow() const;
00587
00591 KDockManager* dockManager() const { return manager; }
00592
00603 void setToolTipString(const TQString& ttStr) { toolTipStr = ttStr; }
00604
00608 const TQString& toolTipString() const { return toolTipStr; }
00609
00613 bool isDockBackPossible() const;
00614
00619 void setTabPageLabel( const TQString& label) { tabPageTitle = label; }
00620
00624 const TQString& tabPageLabel() const { return tabPageTitle; }
00625
00629 virtual bool event( TQEvent * );
00630
00634 virtual void show();
00638 KDockTabGroup* parentDockTabGroup() const;
00639
00641 TQWidget *parentDockContainer() const;
00642
00643 #ifndef NO_KDE2
00644
00650 void setDockWindowType (NET::WindowType windowType);
00651
00652 #endif
00653
00654 void setDockWindowTransient (TQWidget *parent, bool transientEnabled);
00655
00660 TQWidget *transientTo();
00661
00668 KDockWidget *findNearestDockWidget(DockPosition pos);
00669
00676 void setPixmap(const TQPixmap& pixmap=TQPixmap());
00677
00683 const TQPixmap& pixmap() const;
00684
00689 KDockWidget::DockPosition currentDockPosition() const;
00690
00691 public slots:
00698 void setForcedFixedWidth(int);
00705 void setForcedFixedHeight(int);
00707 void restoreFromForcedFixedSize();
00708
00710 int forcedFixedWidth();
00712 int forcedFixedHeight();
00713
00718 void dockBack();
00719
00723 void changeHideShowState();
00724
00730 void undock();
00731
00736 void toDesktop( );
00737
00738 protected:
00739 friend class KMdiMainFrm;
00740 friend class KMDI::MainWindow;
00748 void updateHeader();
00749
00751 void setLatestKDockContainer(TQWidget *);
00753 TQWidget *latestKDockContainer();
00754
00756 void setFormerBrotherDockWidget(KDockWidget *);
00757
00758 signals:
00763 void widgetSet(TQWidget*);
00764
00771 void docking( KDockWidget* dw, KDockWidget::DockPosition dp);
00772
00776 void setDockDefaultPos();
00777
00781 void headerCloseButtonClicked();
00782
00786 void headerDockbackButtonClicked();
00787
00791 void iMBeingClosed();
00795 void hasUndocked();
00796
00797 protected slots:
00798
00803 void loseFormerBrotherDockWidget();
00804
00805 virtual void paintEvent(TQPaintEvent*);
00806
00807 virtual void mousePressEvent(TQMouseEvent*);
00808 virtual void mouseReleaseEvent(TQMouseEvent*);
00809 virtual void mouseMoveEvent(TQMouseEvent*);
00810 virtual void leaveEvent(TQEvent*);
00811 protected:
00812 friend class KDockWidgetHeader;
00816 KDockWidget* formerBrotherDockWidget;
00820 DockPosition currentDockPos;
00824 DockPosition formerDockPos;
00828 TQString toolTipStr;
00832 TQString tabPageTitle;
00833
00834 private:
00840 void setDockTabName( KDockTabGroup* g);
00841
00849 void applyToWidget( TQWidget* s, const TQPoint& p = TQPoint(0,0) );
00850
00854 KDockWidgetAbstractHeader* header;
00855
00859 TQWidget* widget;
00860
00864 TQVBoxLayout* layout;
00865
00869 KDockManager* manager;
00870
00874 TQPixmap* pix;
00875
00879 int eDocking;
00880
00884 int sDocking;
00885
00889 KDockWidget::DockPosition prevSideDockPosBeforeDrag;
00890
00891
00892 TQString firstName;
00893 TQString lastName;
00894 Orientation splitterOrientation;
00895 bool isGroup;
00896 bool isTabGroup;
00897 protected:
00898 virtual void virtual_hook( int id, void* data );
00899 private:
00900 KDockWidgetPrivate *d;
00901 };
00902
00915 class TDEUI_EXPORT KDockManager: public TQObject
00916 {
00917 Q_OBJECT
00918
00919 friend class KDockWidget;
00920 friend class KDockMainWindow;
00921
00922 public:
00923 enum EnReadDockConfigMode {
00924 Unknown,
00925 WrapExistingWidgetsOnly,
00926 RestoreAllDockwidgets
00927 };
00928
00929 public:
00940 KDockManager( TQWidget* mainWindow, const char* name = 0L );
00941
00945 virtual ~KDockManager();
00946
00947 void dumpDockWidgets();
00948
00949 #ifndef NO_KDE2
00950
00959 void writeConfig( TDEConfig* c = 0L, TQString group = TQString::null );
00960
00977 void readConfig ( TDEConfig* c = 0L, TQString group = TQString::null );
00978 #endif
00979
00981 void setMainDockWidget2(KDockWidget *);
00982
00986 void writeConfig(TQDomElement &base);
00990 void readConfig(TQDomElement &base);
00991
00996 void activate();
00997
01006 virtual bool eventFilter( TQObject * object, TQEvent * event );
01007
01015 KDockWidget* findWidgetParentDock( TQWidget* w) const;
01016
01022 void makeWidgetDockVisible( TQWidget* w ){ findWidgetParentDock(w)->makeDockVisible(); }
01023
01027 TQPopupMenu* dockHideShowMenu() const { return menu; }
01028
01033 KDockWidget* getDockWidgetFromName( const TQString& dockName );
01034
01039 void setSplitterOpaqueResize(bool b=true);
01040
01044 bool splitterOpaqueResize() const;
01045
01051 void setSplitterKeepSize(bool b=true);
01052
01056 bool splitterKeepSize() const;
01057
01066 void setSplitterHighResolution(bool b=true);
01067
01071 bool splitterHighResolution() const;
01072
01076 void setSpecialLeftDockContainer(KDockWidget* container);
01077 void setSpecialTopDockContainer(KDockWidget* container);
01078 void setSpecialRightDockContainer(KDockWidget* container);
01079 void setSpecialBottomDockContainer(KDockWidget* container);
01080
01081 void removeFromAutoCreateList(KDockWidget* pDockWidget);
01082 void finishReadDockConfig();
01083 void setReadDockConfigMode(int mode);
01084
01085 signals:
01086
01090 void change();
01091
01095 void replaceDock( KDockWidget* oldDock, KDockWidget* newDock );
01096
01100 void setDockDefaultPos( KDockWidget* );
01101
01102 private slots:
01103
01107 void slotMenuPopup();
01108
01114 void slotMenuActivated( int id);
01115
01116
01117
01118
01119
01120 void drawDragRectangle();
01121
01122 private:
01123
01127 struct MenuDockData
01128 {
01129 MenuDockData( KDockWidget* _dock, bool _hide )
01130 {
01131 dock = _dock;
01132 hide = _hide;
01133 }
01134 ~MenuDockData(){}
01135
01136 KDockWidget* dock;
01137 bool hide;
01138 };
01139
01146 KDockWidget* findDockWidgetAt( const TQPoint& pos );
01147
01155 void findChildDockWidget( TQWidget*& w, const TQWidget* p, const TQPoint& pos );
01156
01163 void findChildDockWidget( const TQWidget* p, TQWidgetList*& l);
01164
01168 void startDrag( KDockWidget* );
01169
01176 void dragMove( KDockWidget* d, TQPoint pos );
01177
01181 void cancelDrop();
01182
01187 void drop();
01188
01189
01190
01194 TQWidget* main;
01195
01199 KDockWidget* currentDragWidget;
01200
01204 KDockWidget* currentMoveWidget;
01205
01209 TQWidgetList* childDockWidgetList;
01210
01214 KDockWidget::DockPosition curPos;
01215
01220 TQObjectList* childDock;
01221
01225 TQObjectList* autoCreateDock;
01226
01230 int storeW;
01231
01235 int storeH;
01236
01240 bool dragging;
01241
01245 bool undockProcess;
01246
01251 bool dropCancel;
01252
01257 TQPopupMenu* menu;
01258
01262 TQPtrList<MenuDockData> *menuData;
01263
01264 protected:
01265 virtual void virtual_hook( int id, void* data );
01266 private:
01267 class KDockManagerPrivate;
01268 KDockManagerPrivate *d;
01269 };
01270
01314 class TDEUI_EXPORT KDockMainWindow : public TDEMainWindow
01315 {
01316 Q_OBJECT
01317
01318
01319 friend class KDockManager;
01320
01321 public:
01322
01335 #ifdef qdoc
01336 KDockMainWindow( TQWidget* parent = 0L, const char *name = 0L, WFlags f = WType_TopLevel | WDestructiveClose );
01337 #else
01338 KDockMainWindow( TQWidget* parent = 0L, const char *name = 0L, WFlags f = (WFlags)(WType_TopLevel | WDestructiveClose) );
01339 #endif
01340
01344 virtual ~KDockMainWindow();
01345
01350 KDockManager* manager() const { return dockManager; }
01351
01358 void setMainDockWidget( KDockWidget* dockwidget);
01359
01365 KDockWidget* getMainDockWidget() const { return mainDockWidget; }
01366
01379 KDockWidget* createDockWidget( const TQString& name, const TQPixmap &pixmap, TQWidget* parent = 0L,
01380 const TQString& strCaption = TQString::null, const TQString& strTabPageLabel = TQString::fromLatin1( " " ) );
01381
01385 void writeDockConfig(TQDomElement &base);
01389 void readDockConfig(TQDomElement &base);
01390
01391 #ifndef NO_KDE2
01392
01398 void writeDockConfig( TDEConfig* c = 0L, TQString group = TQString::null );
01399
01406 void readDockConfig ( TDEConfig* c = 0L, TQString group = TQString::null );
01407 #endif
01408
01414 void activateDock(){ dockManager->activate(); }
01415
01422 TQPopupMenu* dockHideShowMenu() const { return dockManager->dockHideShowMenu(); }
01423
01431 void makeDockVisible( KDockWidget* dock );
01432
01438 void makeDockInvisible( KDockWidget* dock );
01439
01444 void makeWidgetDockVisible( TQWidget* widget );
01445
01452 void setView( TQWidget * widget );
01453
01454 signals:
01458 void dockWidgetHasUndocked(KDockWidget*);
01459
01460 protected:
01461
01465 KDockWidget* mainDockWidget;
01466
01470 KDockManager* dockManager;
01471
01472 protected slots:
01476 void slotDockWidgetUndocked();
01477
01478 protected:
01479 virtual void virtual_hook( int id, void* data );
01480 private:
01481 class KDockMainWindowPrivate;
01482 KDockMainWindowPrivate *d;
01483 };
01484
01485 class TDEUI_EXPORT KDockArea : public TQWidget
01486 {
01487 Q_OBJECT
01488
01489
01490 friend class KDockManager;
01491
01492 public:
01493
01494
01495 KDockArea( TQWidget* parent = 0L, const char *name = 0L);
01496
01497 virtual ~KDockArea();
01498
01499 KDockManager* manager(){ return dockManager; }
01500
01501
01502 void setMainDockWidget( KDockWidget* );
01503 KDockWidget* getMainDockWidget(){ return mainDockWidget; }
01504
01505 KDockWidget* createDockWidget( const TQString& name, const TQPixmap &pixmap, TQWidget* parent = 0L,
01506 const TQString& strCaption = TQString::null, const TQString& strTabPageLabel = TQString::fromLatin1( " " ) );
01507
01508 void writeDockConfig(TQDomElement &base);
01509 void readDockConfig(TQDomElement &base);
01510
01511 #ifndef NO_KDE2
01512 void writeDockConfig( TDEConfig* c = 0L, TQString group = TQString::null );
01513 void readDockConfig ( TDEConfig* c = 0L, TQString group = TQString::null );
01514 #endif
01515
01516
01517
01518 void activateDock(){ dockManager->activate(); }
01519 TQPopupMenu* dockHideShowMenu(){ return dockManager->dockHideShowMenu(); }
01520 void makeDockVisible( KDockWidget* dock );
01521 void makeDockInvisible( KDockWidget* dock );
01522 void makeWidgetDockVisible( TQWidget* widget );
01523
01524
01525 signals:
01529 void dockWidgetHasUndocked(KDockWidget*);
01530
01531 protected:
01532
01533 KDockWidget* mainDockWidget;
01534 KDockManager* dockManager;
01535
01536 protected slots:
01537 void slotDockWidgetUndocked();
01538
01539 public:
01540 virtual void resizeEvent(TQResizeEvent *);
01541
01542 protected:
01543 virtual void virtual_hook( int id, void* data );
01544 private:
01545 class KDockMainWindowPrivate;
01546 KDockMainWindowPrivate *d;
01547 };
01548
01549
01550 #endif
01551
01552
01553