Salome HOME
Popup item "Refresh"
[modules/gui.git] / src / Qtx / QtxPopupMgr.h
1
2 #ifndef __QTX_POPUP_MGR_HEADER__
3 #define __QTX_POPUP_MGR_HEADER__
4
5 #include "Qtx.h"
6 #include "QtxActionMenuMgr.h"
7 #include "QtxParser.h"
8 #include "QtxStdOperations.h"
9
10 #include <qmap.h>
11
12 class QtxListOfOperations;
13
14 //================================================================
15 // Class    : 
16 // Purpose  : 
17 //================================================================
18 class QTX_EXPORT QtxPopupMgr : public QtxActionMenuMgr
19 {
20     Q_OBJECT
21
22 public:
23     class Selection
24     {
25     public:
26         virtual int      count() const = 0;
27         virtual QtxValue param( const int, const QString& ) const = 0;
28     };
29     
30 protected:
31     class Operations : public QtxStrings
32     {
33     public:
34         Operations( QtxPopupMgr* );
35         virtual ~Operations();
36
37         virtual int   prior( const QString&, bool isBin ) const;
38         virtual QtxParser::Error calculate( const QString&, QtxValue&, QtxValue& ) const;
39
40         void clear();
41
42     private:
43         QtxPopupMgr*               myPopupMgr;
44         QtxParser*                 myParser;
45         QMap< QString, QtxValue >  myValues;
46     };
47
48     friend class Operations;
49
50 protected:
51   class PopupCreator;
52
53 public:
54     QtxPopupMgr( QPopupMenu*, QObject* = 0 );
55     virtual ~QtxPopupMgr();
56
57     virtual int  registerAction( QAction*,
58                                  const QString& visible,
59                                  const QString& toggle = QString::null,
60                                  const int = -1 );
61     virtual void unRegisterAction( const int );
62
63     virtual bool isVisible( const int actId, const int place ) const;
64
65     bool    hasRule( QAction*, bool visibility ) const;
66     bool    hasRule( const int, bool visibility ) const;
67     void    setRule( QAction*, const QString&, bool visibility );
68     void    setRule( const int, const QString&, bool visibility );
69     void    updatePopup( QPopupMenu*, Selection* );
70
71     virtual QChar   equality() const;
72     virtual QString selCountParam() const;
73     //return name of parameter corresponding to selected objects count
74     //it will be set automatically
75
76     virtual bool load( const QString&, QtxActionMgr::Reader& );
77
78 protected:
79     typedef QMap< QAction*, QtxParser* > RulesMap;
80
81 protected:
82     virtual bool      isSatisfied( QAction*, bool visibility ) const;
83             void      setParams( QtxParser*, QStringList& ) const;
84             RulesMap& map( bool visibility ) const;
85
86     void createOperations();
87
88 private:
89     RulesMap             myVisibility, myToggle;
90     Selection*           myCurrentSelection;
91     QtxListOfOperations* myOperations;
92 };
93
94
95
96 class QtxPopupMgr::PopupCreator : public QtxActionMgr::Creator
97 {
98 public:
99   PopupCreator( QtxActionMgr::Reader*, QtxPopupMgr* );
100   virtual ~PopupCreator();
101
102   virtual int append( const QString&, const bool,
103                       const ItemAttributes&, const int );
104
105   virtual QString visibleRule( const ItemAttributes& ) const;
106   virtual QString toggleRule( const ItemAttributes& ) const;
107
108 private:
109   QtxPopupMgr* myMgr;
110 };
111
112
113 #endif