Salome HOME
NRI : Merge from V1_2.
[modules/kernel.git] / src / PatchQt / qworkspaceP.h
1 //  SALOME PatchQt : patch for Qt
2 //
3 //  Copyright (C) 2003  CEA/DEN, EDF R&D
4 //
5 //
6 //
7 //  File   : qworkspaceP.h
8 //  Author : Vadim SANDLER
9 //  Module : SALOME
10 //  $Header$
11
12 #ifndef QWORKSPACEP_H
13 #define QWORKSPACEP_H
14
15 #ifndef QT_H
16 #include <qobject.h>
17 #include <qwidget.h>
18 #include <qwidgetlist.h>
19 #include <qframe.h>
20 #include <qguardedptr.h>
21 #include <qbutton.h>
22 #include <qlabel.h>
23 #endif // QT_H
24
25 class QWorkspacePChild;
26 class QShowEvent;
27 class QWorkspacePPrivate;
28 class QPopupMenu;
29 class QWidgetResizeHandlerP;
30 class QTitleBarP;
31
32 class Q_EXPORT QWorkspaceP : public QWidget
33 {
34     Q_OBJECT
35     Q_PROPERTY( bool scrollBarsEnabled READ scrollBarsEnabled WRITE setScrollBarsEnabled )
36 public:
37     QWorkspaceP( QWidget* parent=0, const char* name=0 );
38     ~QWorkspaceP();
39
40     QWidget* activeWindow() const;
41     QWidgetList windowList() const;
42
43     QSize sizeHint() const;
44
45     bool scrollBarsEnabled() const;
46     void setScrollBarsEnabled( bool enable );
47
48     void setPaletteBackgroundColor( const QColor & );
49     void setPaletteBackgroundPixmap( const QPixmap & );
50
51 signals:
52     void windowActivated( QWidget* w);
53
54 public slots:
55     void cascade();
56     void tile();
57
58 protected:
59 #ifndef QT_NO_STYLE
60     void styleChange( QStyle& );
61 #endif
62     void childEvent( QChildEvent * );
63     void resizeEvent( QResizeEvent * );
64     bool eventFilter( QObject *, QEvent * );
65     void showEvent( QShowEvent *e );
66     void hideEvent( QHideEvent *e );
67 #ifndef QT_NO_WHEELEVENT
68     void wheelEvent( QWheelEvent *e );
69 #endif
70
71 private slots:
72     void closeActiveWindow();
73     void closeAllWindows();
74     void normalizeActiveWindow();
75     void minimizeActiveWindow();
76     void showOperationMenu();
77     void popupOperationMenu( const QPoint& );
78     void operationMenuActivated( int );
79     void operationMenuAboutToShow();
80     void toolMenuAboutToShow();
81     void scrollBarChanged();
82 public slots:
83     void activateNextWindow();
84     void activatePreviousWindow();
85
86 public:
87     void activateWindow( QWidget* w, bool change_focus = TRUE );
88
89 private:
90     void insertIcon( QWidget* w);
91     void removeIcon( QWidget* w);
92     void place( QWidget* );
93
94     QWorkspacePChild* findChild( QWidget* w);
95     void showMaximizeControls();
96     void hideMaximizeControls();
97     void showWindow( QWidget* w);
98     void maximizeWindow( QWidget* w);
99     void minimizeWindow( QWidget* w);
100     void normalizeWindow( QWidget* w);
101
102     QRect updateWorkspace();
103
104     QPopupMenu* popup;
105     QWorkspacePPrivate* d;
106
107     friend class QWorkspacePChild;
108
109 private:        // Disabled copy constructor and operator=
110 #if defined(Q_DISABLE_COPY)
111     QWorkspaceP( const QWorkspaceP & );
112     QWorkspaceP& operator=( const QWorkspaceP & );
113 #endif
114 };
115
116 class QWorkspacePChild : public QFrame
117 {
118     Q_OBJECT
119
120     friend class QWorkspaceP;
121     friend class QTitleBarP;
122
123 public:
124     QWorkspacePChild( QWidget* window,
125                      QWorkspaceP* parent=0, const char* name=0 );
126     ~QWorkspacePChild();
127
128     void setActive( bool );
129     bool isActive() const;
130
131     void adjustToFullscreen();
132     void adjustSize();
133
134     QWidget* windowWidget() const;
135     QWidget* iconWidget() const;
136
137     void doResize();
138     void doMove();
139
140     QSize sizeHint() const;
141     QSize minimumSizeHint() const;
142
143     QSize baseSize() const;
144
145 signals:
146     void showOperationMenu();
147     void popupOperationMenu( const QPoint& );
148
149 public slots:
150     void activate();
151     void showMinimized();
152     void showMaximized();
153     void showNormal();
154     void showShaded();
155     void setCaption( const QString& );
156     void internalRaise();
157     void titleBarDoubleClicked();
158
159     void move( int x, int y );
160
161 protected:
162     void enterEvent( QEvent * );
163     void leaveEvent( QEvent * );
164     void childEvent( QChildEvent* );
165     void resizeEvent( QResizeEvent * );
166     void moveEvent( QMoveEvent * );
167     bool eventFilter( QObject *, QEvent * );
168
169     bool focusNextPrevChild( bool );
170
171     void drawFrame( QPainter * );
172     void styleChange( QStyle & );
173
174 private:
175     QWidget* childWidget;
176     QWidget* lastfocusw;
177     QWidgetResizeHandlerP *widgetResizeHandler;
178     QTitleBarP* titlebar;
179     QGuardedPtr<QTitleBarP> iconw;
180     QSize windowSize;
181     QSize shadeRestore;
182     QSize shadeRestoreMin;
183     bool act                :1;
184     bool shademode          :1;
185     bool snappedRight       :1;
186     bool snappedDown        :1;
187 };
188
189 #ifndef QT_H
190 #endif // QT_H
191 class QMouseEvent;
192 class QKeyEvent;
193
194 class Q_EXPORT QWidgetResizeHandlerP : public QObject
195 {
196     Q_OBJECT
197
198 public:
199     QWidgetResizeHandlerP( QWidget *parent, QWidget *cw = 0, const char *name = 0 );
200     void setActive( bool b ) { active = b; if ( !active ) setMouseCursor( Nowhere ); }
201     bool isActive() const { return active; }
202     void setMovingEnabled( bool b ) { moving = b; }
203     bool isMovingEnabled() const { return moving; }
204
205     bool isButtonDown() const { return buttonDown; }
206
207     void setExtraHeight( int h ) { extrahei = h; }
208     void setSizeProtection( bool b ) { sizeprotect = b; }
209
210     void doResize();
211     void doMove();
212
213 signals:
214     void activate();
215
216 protected:
217     bool eventFilter( QObject *o, QEvent *e );
218     void mouseMoveEvent( QMouseEvent *e );
219     void keyPressEvent( QKeyEvent *e );
220
221 private:
222     enum MousePosition {
223         Nowhere,
224         TopLeft, BottomRight, BottomLeft, TopRight,
225         Top, Bottom, Left, Right,
226         Center
227     };
228
229     QWidget *widget;
230     QWidget *childWidget;
231     QPoint moveOffset;
232     QPoint invertedMoveOffset;
233     MousePosition mode;
234     int extrahei;
235     int range;
236     uint buttonDown         :1;
237     uint moveResizeMode     :1;
238     uint active             :1;
239     uint sizeprotect        :1;
240     uint moving             :1; 
241
242     void setMouseCursor( MousePosition m );
243     bool isMove() const {
244         return moveResizeMode && mode == Center;
245     }
246     bool isResize() const {
247         return moveResizeMode && !isMove();
248     }
249
250 private:        // Disabled copy constructor and operator=
251 #if defined(Q_DISABLE_COPY)
252     QWidgetResizeHandlerP( const QWidgetResizeHandlerP & );
253     QWidgetResizeHandlerP& operator=( const QWidgetResizeHandlerP & );
254 #endif
255
256 };
257
258 class QToolTip;
259 class QTitleBarPPrivate;
260 class QPixmap;
261
262 class Q_EXPORT QTitleBarP : public QWidget
263 {
264     Q_OBJECT
265     Q_PROPERTY( bool autoRaise READ autoRaise WRITE setAutoRaise )
266     Q_PROPERTY( bool movable READ isMovable WRITE setMovable )
267
268 public:
269     QTitleBarP (QWidget* w, QWidget* parent, const char* name=0);
270     ~QTitleBarP();
271
272     bool isActive() const;
273     bool usesActiveColor() const;
274     virtual QString visibleText() const;
275
276     bool isMovable() const;
277     void setMovable(bool);
278
279     bool autoRaise() const;
280     void setAutoRaise(bool);
281
282     QWidget *window() const;
283
284     QSize sizeHint() const;
285
286 public slots:
287     void setActive( bool );
288     void setCaption( const QString& title );
289     void setIcon( const QPixmap& icon );
290
291 signals:
292     void doActivate();
293     void doNormal();
294     void doClose();
295     void doMaximize();
296     void doMinimize();
297     void doShade();
298     void showOperationMenu();
299     void popupOperationMenu( const QPoint& );
300     void doubleClicked();
301
302 protected:
303     bool event( QEvent *);
304     void resizeEvent( QResizeEvent *);
305     void contextMenuEvent( QContextMenuEvent * );
306     void mousePressEvent( QMouseEvent * );
307     void mouseDoubleClickEvent( QMouseEvent * );
308     void mouseReleaseEvent( QMouseEvent * );
309     void mouseMoveEvent( QMouseEvent * );
310     void enterEvent( QEvent *e );
311     void leaveEvent( QEvent *e );
312     void paintEvent( QPaintEvent *p );
313
314     virtual void cutText();
315
316 private:
317     void readColors();
318
319     QTitleBarPPrivate *d;
320 };
321
322 #endif // QWORKSPACEP_H