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