• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

KDE3Support

k3dockwidget.h

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2000 Max Judin <novaprint@mtu-net.ru>
00003    Copyright (C) 2000 Falk Brettschneider <falk@kdevelop.org>
00004    Copyright (C) 2002,2003 Joseph Wenninger <jowenn@kde.org>
00005 
00006    This library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Library General Public
00008    License version 2 as published by the Free Software Foundation.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018    Boston, MA 02110-1301, USA.
00019 */
00020 
00021 /*
00022    activities:
00023    -----------
00024    05/2001 -               : useful patches, bugfixes by Christoph Cullmann <crossfire@babylon2k.de>,
00025                              Joseph Wenninger <jowenn@bigfoot.com> and  Falk Brettschneider
00026    03/2001 - 05/2001       : maintained and enhanced by Falk Brettschneider <falk@kdevelop.org>
00027    03/2000                 : class documentation added by Falk Brettschneider <gigafalk@yahoo.com>
00028    10/1999 - 03/2000       : programmed by Max Judin <novaprint@mtu-net.ru>
00029 
00030    C++ classes in this file:
00031    -------------------------
00032    - K3DockWidgetAbstractHeader     - minor helper class
00033    - K3DockWidgetAbstractHeaderDrag - minor helper class
00034    - K3DockWidgetHeaderDrag         - drag panel in a dockwidget title bar
00035    - K3DockWidgetHeader             - dockwidget title bar containing the drag panel
00036    - K3DockTabGroup                 - minor helper class
00037    - K3DockWidget                   - IMPORTANT CLASS: the one and only dockwidget class
00038    - K3DockManager                  - helper class
00039    - K3DockMainWindow               - IMPORTANT CLASS: a special KMainWindow that can have dockwidgets
00040    - K3DockArea                     - like K3DockMainWindow but inherits just QWidget
00041 
00042    IMPORTANT Note: This file compiles also in Qt-only mode by using the NO_KDE2 precompiler definition!
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   // GROUP data
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   /* clears the old drawn drag rectangle (oldDragRect) from screen and
01081    * draws the new current drag rectangle (dragRect) depending on the current mouse position.
01082    * This highlights the dockwidget which is the currently chosen target during a dock action.
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 // class members
01154 
01158   QWidget* main;
01159 
01163   K3DockWidget* currentDragWidget;
01164 
01168   K3DockWidget* currentMoveWidget; // widget where mouse moving
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   //void setView( QWidget* );
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 

KDE3Support

Skip menu "KDE3Support"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • KIO
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal