Salome HOME
Initial version
[modules/gui.git] / src / Qtx / QtxDockAction.h
1 // File:      QtxDockAction.h
2 // Author:    Sergey TELKOV
3
4 #ifndef QTX_DOCKACTION_H
5 #define QTX_DOCKACTION_H
6
7 #include "QtxAction.h"
8
9 #include <qevent.h>
10 #include <qptrlist.h>
11 #include <qpopupmenu.h>
12
13 class QAction;
14 class QMainWindow;
15 class QDockWindow;
16 class QtxResourceMgr;
17
18 #ifdef WIN32
19 #pragma warning( disable:4251 )
20 #endif
21
22 class QTX_EXPORT QtxDockAction : public QtxAction
23 {
24   Q_OBJECT
25
26   Q_PROPERTY( bool autoAdd   READ isAutoAdd   WRITE setAutoAdd )
27   Q_PROPERTY( bool autoPlace READ isAutoPlace WRITE setAutoPlace )
28   Q_PROPERTY( bool separate  READ isSeparate  WRITE setSeparate )
29
30 public:
31   QtxDockAction( QMainWindow*, const char* = 0 );
32   QtxDockAction( const QString&, const QString&, QMainWindow*, const char* = 0 );
33   QtxDockAction( const QString&, const QIconSet&, const QString&, QMainWindow*, const char* = 0 );
34   virtual ~QtxDockAction();
35
36   QMainWindow* mainWindow() const;
37
38   bool         isAutoAdd() const;
39   void         setAutoAdd( const bool );
40
41   bool         isAutoPlace() const;
42   void         setAutoPlace( const bool );
43
44   bool         isSeparate() const;
45   void         setSeparate( const bool );
46
47   virtual bool addTo( QWidget* );
48   virtual bool addTo( QWidget*, const int );
49   virtual bool removeFrom( QWidget* );
50
51   bool         addDockWindow( QDockWindow* );
52   bool         removeDockWindow( QDockWindow* );
53
54   virtual bool eventFilter( QObject*, QEvent* );
55
56   virtual void storeGeometry( QDockWindow* = 0 );
57   virtual void restoreGeometry( QDockWindow* = 0 ) const;
58
59   virtual void loadGeometry( QtxResourceMgr*, const QString&, const bool = true );
60   virtual void saveGeometry( QtxResourceMgr*, const QString&, const bool = true ) const;
61
62 private slots:
63   void         onAboutToShow();
64   void         onToggled( bool );
65   void         onVisibilityChanged( bool );
66   void         onPopupDestroyed( QObject* );
67   void         onWindowDestroyed( QObject* );
68   void         onDockWindowPositionChanged( QDockWindow* );
69
70 protected:
71   virtual bool event( QEvent* );
72
73 private:
74   QAction*     action( QDockWindow* ) const;
75   QDockWindow* dockWindow( const QAction* ) const;
76
77   void         checkPopup( QPopupMenu* );
78   void         fillPopup( QPopupMenu* ) const;
79   int          findId( QPopupMenu*, QPopupMenu* ) const;
80
81   void         initialize( QMainWindow* );
82   void         updateInfo( QDockWindow* );
83   bool         isToolBar( QDockWindow* ) const;
84   void         dockWindows( QPtrList<QDockWindow>&, QMainWindow* = 0 ) const;
85
86   QString      windowName( QDockWindow* ) const;
87   void         savePlaceInfo( QDockWindow* );
88   void         loadPlaceInfo( QDockWindow* ) const;
89
90   bool         autoAddDockWindow( QDockWindow* );
91   void         autoLoadPlaceInfo( QDockWindow* );
92
93   void         splitMenuText( QString&, QString& ) const;
94   QStringList  splitText( const QString&, const QString& ) const;
95
96   int          dockPlace( const QString& ) const;
97
98 private:
99   enum { AutoAdd = QEvent::User };
100
101   typedef struct { bool vis, newLine;
102                    int place, index, offset;
103                    int x, y, w, h, fixW, fixH; } GeomInfo;
104   typedef struct { QString name; QAction* a; }   DockInfo;
105   typedef struct { QPopupMenu *dock, *tool; }    MenuInfo;
106
107   typedef QMap<QDockWindow*, DockInfo>   InfoMap;
108   typedef QMap<QString, GeomInfo>        GeomMap;
109   typedef QMap<QPopupMenu*, MenuInfo>    MenuMap;
110
111 private:
112   bool         loadGeometry( QtxResourceMgr*, const QString&,
113                              const QString&, GeomInfo& ) const;
114   bool         saveGeometry( QtxResourceMgr*, const QString&,
115                              const QString&, const GeomInfo& ) const;
116
117 private:
118   InfoMap      myInfo;
119   MenuMap      myMenu;
120   GeomMap      myGeom;
121   QMainWindow* myMain;
122
123   bool         myAutoAdd;
124   bool         mySeparate;
125   bool         myAutoPlace;
126 };
127
128 #ifdef WIN32
129 #pragma warning( default:4251 )
130 #endif
131
132 #endif