Salome HOME
Update of the currently added menu items during action menu text or property "isSepar...
[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   virtual void setMenuText( const QString& );
52
53   bool         addDockWindow( QDockWindow* );
54   bool         removeDockWindow( QDockWindow* );
55
56   virtual bool eventFilter( QObject*, QEvent* );
57
58   virtual void storeGeometry( QDockWindow* = 0 );
59   virtual void restoreGeometry( QDockWindow* = 0 ) const;
60
61   virtual void loadGeometry( QtxResourceMgr*, const QString&, const bool = true );
62   virtual void saveGeometry( QtxResourceMgr*, const QString&, const bool = true ) const;
63
64 private slots:
65   void         onAboutToShow();
66   void         onToggled( bool );
67   void         onVisibilityChanged( bool );
68   void         onPopupDestroyed( QObject* );
69   void         onWindowDestroyed( QObject* );
70   void         onDockWindowPositionChanged( QDockWindow* );
71
72 protected:
73   virtual bool event( QEvent* );
74
75 private:
76   QAction*     action( QDockWindow* ) const;
77   QDockWindow* dockWindow( const QAction* ) const;
78
79   void         checkPopup( QPopupMenu* );
80   void         fillPopup( QPopupMenu* ) const;
81   int          findId( QPopupMenu*, QPopupMenu* ) const;
82
83   void         initialize( QMainWindow* );
84   void         updateInfo( QDockWindow* );
85   bool         isToolBar( QDockWindow* ) const;
86   void         dockWindows( QPtrList<QDockWindow>&, QMainWindow* = 0 ) const;
87
88   QString      windowName( QDockWindow* ) const;
89   void         savePlaceInfo( QDockWindow* );
90   void         loadPlaceInfo( QDockWindow* ) const;
91   void         loadPlaceInfo() const;
92
93   bool         autoAddDockWindow( QDockWindow* );
94   void         autoLoadPlaceInfo( QDockWindow* );
95
96   void         splitMenuText( QString&, QString& ) const;
97   QStringList  splitText( const QString&, const QString& ) const;
98
99   QDockArea*   dockArea( const int ) const;
100   int          dockPlace( const QString& ) const;
101
102   void         collectNames( const int, QStringList& ) const;
103
104   void         updateMenus();
105
106 private:
107   enum { AutoAdd = QEvent::User, LoadArea };
108
109   typedef struct { bool vis, newLine;
110                    int place, index, offset;
111                    int x, y, w, h, fixW, fixH; } GeomInfo;
112   typedef struct { QString name; QAction* a; }   DockInfo;
113   typedef struct { QPopupMenu *dock, *tool; }    MenuInfo;
114
115   typedef QMap<QDockWindow*, DockInfo>   InfoMap;
116   typedef QMap<QString, GeomInfo>        GeomMap;
117   typedef QMap<QPopupMenu*, MenuInfo>    MenuMap;
118
119 private:
120   bool         loadGeometry( QtxResourceMgr*, const QString&,
121                              const QString&, GeomInfo& ) const;
122   bool         saveGeometry( QtxResourceMgr*, const QString&,
123                              const QString&, const GeomInfo& ) const;
124   void         loadPlaceArea( const int, QMainWindow*, QDockArea*,
125                               const QPtrList<QDockWindow>&,
126                               const QMap<QDockWindow*, GeomInfo*>& ) const;
127
128 private:
129   InfoMap      myInfo;
130   MenuMap      myMenu;
131   GeomMap      myGeom;
132   QMainWindow* myMain;
133   QStringList  myNames;
134
135   bool         myAutoAdd;
136   bool         mySeparate;
137   bool         myAutoPlace;
138 };
139
140 #ifdef WIN32
141 #pragma warning( default:4251 )
142 #endif
143
144 #endif