1 /****************************************************************************
2 ** $Id: qt/qdockwindow.h 3.3.8 edited Jan 11 14:38 $
3 **
4 ** Definition of the QDockWindow class
5 **
6 ** Created : 001010
7 **
8 ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
9 **
10 ** This file is part of the workspace module of the Qt GUI Toolkit.
11 **
12 ** This file may be distributed under the terms of the Q Public License
13 ** as defined by Trolltech ASA of Norway and appearing in the file
14 ** LICENSE.QPL included in the packaging of this file.
15 **
16 ** This file may be distributed and/or modified under the terms of the
17 ** GNU General Public License version 2 as published by the Free Software
18 ** Foundation and appearing in the file LICENSE.GPL included in the
19 ** packaging of this file.
20 **
21 ** Licensees holding valid Qt Enterprise Edition licenses may use this
22 ** file in accordance with the Qt Commercial License Agreement provided
23 ** with the Software.
24 **
25 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27 **
28 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29 ** information about Qt Commercial License Agreements.
30 ** See http://www.trolltech.com/qpl/ for QPL licensing information.
31 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
32 **
33 ** Contact info@trolltech.com if any conditions of this licensing are
34 ** not clear to you.
35 **
36 **********************************************************************/
37
38 #ifndef QDOCKWINDOW_H
39 #define QDOCKWINDOW_H
40
41 #ifndef QT_H
42 #include "qframe.h"
43 #endif // QT_H
44
45 #ifndef QT_NO_MAINWINDOW
46
47 class QDockWindowHandle;
48 class QDockWindowTitleBar;
49 class QPainter;
50 class QDockWindowResizeHandle;
51 class QBoxLayout;
52 class QHBoxLayout;
53 class QVBoxLayout;
54 class QDockArea;
55 class QWidgetResizeHandler;
56 class QMainWindow;
57 class QDockAreaLayout;
58 class QDockWindowPrivate;
59 class QToolBar;
60 class QWindowsXPStyle;
61
62 class Q_EXPORT QDockWindow : public QFrame
63 {
64 Q_OBJECT
65 Q_ENUMS( CloseMode Place )
66 Q_PROPERTY( int closeMode READ closeMode WRITE setCloseMode ) //### this shouldn't be of type int?!
67 Q_PROPERTY( bool resizeEnabled READ isResizeEnabled WRITE setResizeEnabled )
68 Q_PROPERTY( bool movingEnabled READ isMovingEnabled WRITE setMovingEnabled )
69 Q_PROPERTY( bool horizontallyStretchable READ isHorizontallyStretchable WRITE setHorizontallyStretchable )
70 Q_PROPERTY( bool verticallyStretchable READ isVerticallyStretchable WRITE setVerticallyStretchable )
71 Q_PROPERTY( bool stretchable READ isStretchable )
72 Q_PROPERTY( bool newLine READ newLine WRITE setNewLine )
73 Q_PROPERTY( bool opaqueMoving READ opaqueMoving WRITE setOpaqueMoving )
74 Q_PROPERTY( int offset READ offset WRITE setOffset )
75 Q_PROPERTY( Place place READ place )
76
77 friend class QDockWindowHandle;
78 friend class QDockWindowTitleBar;
79 friend class QDockArea;
80 friend class QDockAreaLayout;
81 friend class QMainWindow;
82 friend class QCEMainWindow;
83 friend class QToolBar;
84 friend class QWindowsXPStyle;
85
86 public:
87 enum Place { InDock, OutsideDock };
88 enum CloseMode { Never = 0, Docked = 1, Undocked = 2, Always = Docked | Undocked };
89
90 QDockWindow( Place p = InDock, QWidget* parent=0, const char* name=0, WFlags f = 0 );
91 QDockWindow( QWidget* parent, const char* name=0, WFlags f = 0 );
92 ~QDockWindow();
93
94 virtual void setWidget( QWidget *w );
95 QWidget *widget() const;
96
place()97 Place place() const { return curPlace; }
98
99 QDockArea *area() const;
100
101 virtual void setCloseMode( int m );
102 bool isCloseEnabled() const;
103 int closeMode() const;
104
105 virtual void setResizeEnabled( bool b );
106 virtual void setMovingEnabled( bool b );
107 bool isResizeEnabled() const;
108 bool isMovingEnabled() const;
109
110 virtual void setHorizontallyStretchable( bool b );
111 virtual void setVerticallyStretchable( bool b );
112 bool isHorizontallyStretchable() const;
113 bool isVerticallyStretchable() const;
setHorizontalStretchable(bool b)114 void setHorizontalStretchable( bool b ) { setHorizontallyStretchable( b ); }
setVerticalStretchable(bool b)115 void setVerticalStretchable( bool b ) { setVerticallyStretchable( b ); }
isHorizontalStretchable()116 bool isHorizontalStretchable() const { return isHorizontallyStretchable(); }
isVerticalStretchable()117 bool isVerticalStretchable() const { return isVerticallyStretchable(); }
118 bool isStretchable() const;
119
120 virtual void setOffset( int o );
121 int offset() const;
122
123 virtual void setFixedExtentWidth( int w );
124 virtual void setFixedExtentHeight( int h );
125 QSize fixedExtent() const;
126
127 virtual void setNewLine( bool b );
128 bool newLine() const;
129
130 Qt::Orientation orientation() const;
131
132 QSize sizeHint() const;
133 QSize minimumSize() const;
134 QSize minimumSizeHint() const;
135
136 QBoxLayout *boxLayout();
137
138 virtual void setOpaqueMoving( bool b );
139 bool opaqueMoving() const;
140
141 bool eventFilter( QObject *o, QEvent *e );
142
143 #ifdef QT_NO_WIDGET_TOPEXTRA
144 QString caption() const;
145 #endif
146
147 signals:
148 void orientationChanged( Orientation o );
149 void placeChanged( QDockWindow::Place p );
150 void visibilityChanged( bool );
151
152 public slots:
153 virtual void undock( QWidget *w );
undock()154 virtual void undock() { undock( 0 ); }
155 virtual void dock();
156 virtual void setOrientation( Orientation o );
157 void setCaption( const QString &s );
158
159 protected:
160 void resizeEvent( QResizeEvent *e );
161 void showEvent( QShowEvent *e );
162 void hideEvent( QHideEvent *e );
163 void contextMenuEvent( QContextMenuEvent *e );
164
165 void drawFrame( QPainter * );
166 void drawContents( QPainter * );
167
168 bool event( QEvent *e );
169
170 private slots:
toggleVisible()171 void toggleVisible() { if ( !isVisible() ) show(); else hide(); }
172
173 private:
174 QDockWindow( Place p, QWidget* parent, const char* name, WFlags f, bool toolbar );
175
176 void handleMove( const QPoint &pos, const QPoint &gp, bool drawRect );
177 void updateGui();
178 void updateSplitterVisibility( bool visible );
179
180 void startRectDraw( const QPoint &so, bool drawRect );
181 void endRectDraw( bool drawRect );
182 void updatePosition( const QPoint &globalPos );
183 QWidget *areaAt( const QPoint &gp );
184 void removeFromDock( bool fixNewLines = TRUE );
185 void swapRect( QRect &r, Qt::Orientation o, const QPoint &offset, QDockArea *area );
186 void init();
187
188 private:
189 QDockWindowHandle *horHandle, *verHandle;
190 QDockWindowTitleBar *titleBar;
191 QWidget *wid;
192 QPainter *unclippedPainter;
193 QDockArea *dockArea, *tmpDockArea;
194 QRect currRect;
195 Place curPlace;
196 Place state;
197 bool resizeEnabled : 1;
198 bool moveEnabled : 1;
199 bool nl : 1;
200 bool opaque : 1;
201 bool isToolbar : 1;
202 bool stretchable[ 3 ];
203 Orientation startOrientation;
204 int cMode;
205 QPoint startOffset;
206 int offs;
207 QSize fExtent;
208 QDockWindowResizeHandle *hHandleTop, *hHandleBottom, *vHandleLeft, *vHandleRight;
209 QVBoxLayout *hbox;
210 QHBoxLayout *vbox;
211 QBoxLayout *childBox;
212 void *dockWindowData;
213 QPoint lastPos;
214 QSize lastSize;
215 QWidgetResizeHandler *widgetResizeHandler;
216 QDockWindowPrivate *d;
217
218 private: // Disabled copy constructor and operator=
219 #if defined(Q_DISABLE_COPY)
220 QDockWindow( const QDockWindow & );
221 QDockWindow& operator=( const QDockWindow & );
222 #endif
223 };
224
area()225 inline QDockArea *QDockWindow::area() const
226 {
227 return dockArea;
228 }
229
230 #define Q_DEFINED_QDOCKWINDOW
231 #include "qwinexport.h"
232 #endif
233
234 #endif // QDOCKWINDOW_H
235