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