Salome HOME
Merge branch 'master' of newgeom:newgeom.git
[modules/shaper.git] / src / XGUI / XGUI_Workshop.h
1 #ifndef XGUI_WORKSHOP_H
2 #define XGUI_WORKSHOP_H
3
4 #include "XGUI.h"
5 #include "XGUI_Constants.h"
6 #include <Events_Listener.h>
7 #include <ModuleBase_Definitions.h>
8 #include <ModelAPI_ResultPart.h>
9 #include <ModelAPI_Document.h>
10
11 #include <QObject>
12 #include <QMap>
13 #include <QIcon>
14 #include <QKeySequence>
15
16 class XGUI_MainWindow;
17 class XGUI_Command;
18 class XGUI_Workbench;
19 class XGUI_SelectionMgr;
20 class XGUI_Displayer;
21 class XGUI_OperationMgr;
22 class XGUI_SalomeConnector;
23 class XGUI_ObjectsBrowser;
24 class XGUI_ActionsMgr;
25 class XGUI_ErrorDialog;
26 class XGUI_SalomeViewer;
27 class XGUI_ViewerProxy;
28 class XGUI_PropertyPanel;
29 class XGUI_ContextMenuMgr;
30 class XGUI_ModuleConnector;
31
32 class ModuleBase_Operation;
33 class ModuleBase_IModule;
34
35 class Config_FeatureMessage;
36 class Config_PointerMessage;
37
38 class QWidget;
39 class QDockWidget;
40
41 class ModelAPI_ObjectUpdatedMessage;
42 class ModelAPI_ObjectDeletedMessage;
43 class QAction;
44
45 /**\class XGUI_Workshop
46  * \ingroup GUI
47  * \brief Class which defines a configuration of the application (Workshop) and launches it.
48  */
49 class XGUI_EXPORT XGUI_Workshop : public QObject, public Events_Listener
50 {
51 Q_OBJECT
52  public:
53
54   XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0);
55   virtual ~XGUI_Workshop();
56
57   //! Starting of the application
58   void startApplication();
59
60   //! Returns main window (Desktop) of the application
61   XGUI_MainWindow* mainWindow() const
62   {
63     return myMainWindow;
64   }
65
66   //! Returns selection manager object
67   XGUI_SelectionMgr* selector() const
68   {
69     return mySelector;
70   }
71
72   //! Returns displayer
73   XGUI_Displayer* displayer() const
74   {
75     return myDisplayer;
76   }
77
78   //! ! Returns operation manager.
79   XGUI_OperationMgr* operationMgr() const
80   {
81     return myOperationMgr;
82   }
83
84   //! ! Returns an actions manager
85   XGUI_ActionsMgr* actionsMgr() const
86   {
87     return myActionsMgr;
88   }
89   ;
90
91   //! Returns property panel widget
92   XGUI_PropertyPanel* propertyPanel() const
93   {
94     return myPropertyPanel;
95   }
96
97   //! Returns context menu manager object
98   XGUI_ContextMenuMgr* contextMenuMgr() const
99   {
100     return myContextMenuMgr;
101   }
102
103   //! Creates and adds a new workbench (menu group) with the given name and returns it
104   XGUI_Workbench* addWorkbench(const QString& theName);
105
106   //! Redefinition of Events_Listener method
107   virtual void processEvent(const Events_Message* theMessage);
108
109   //! Returns an object which provides interface to Salome Module (LightApp_Module)
110   XGUI_SalomeConnector* salomeConnector() const
111   {
112     return mySalomeConnector;
113   }
114
115   //! Provides an object which provides interface to Salome Viewer
116   XGUI_SalomeViewer* salomeViewer() const;
117
118   //! Returns true if the application works as SALOME module
119   bool isSalomeMode() const
120   {
121     return mySalomeConnector != 0;
122   }
123
124   //! Returns Object browser
125   XGUI_ObjectsBrowser* objectBrowser() const
126   {
127     return myObjectBrowser;
128   }
129
130   void salomeViewerSelectionChanged();
131
132   XGUI_ViewerProxy* viewer() const
133   {
134     return myViewerProxy;
135   }
136
137   /// Returns the module connectory
138   /// \returns the instance of connector
139   XGUI_ModuleConnector* moduleConnector() const
140   {
141     return myModuleConnector;
142   }
143
144   //! Returns icon name according to feature Id
145   static QString featureIcon(const std::string& theId);
146
147   //! Activates or deactivates a part
148   //! If PartPtr is Null pointer then PartSet will be activated
149   void activatePart(ResultPartPtr theFeature);
150
151   //! Delete features
152   void deleteObjects(const QList<ObjectPtr>& theList);
153
154   //! Show the given features in 3d Viewer
155   void showObjects(const QList<ObjectPtr>& theList, bool isVisible);
156
157   ModuleBase_IModule* module() const
158   {
159     return myModule;
160   }
161
162 signals:
163   void salomeViewerSelection();
164   void errorOccurred(const QString&);
165
166  public slots:
167   void updateCommandStatus();
168   void updateCommandsOnViewSelection();
169
170   void onNew();
171   void onOpen();
172   bool onSave();
173   bool onSaveAs();
174   void onExit();
175   void onUndo();
176   void onRedo();
177   void onPreferences();
178
179   void showPropertyPanel();
180   void hidePropertyPanel();
181   void showObjectBrowser();
182   void hideObjectBrowser();
183
184   void onFeatureTriggered();
185   void changeCurrentDocument(ObjectPtr theObj);
186
187   void activateLastPart();
188
189  protected:
190   //Event-loop processing methods:
191   void addFeature(const Config_FeatureMessage*);
192   void connectWithOperation(ModuleBase_Operation* theOperation);
193   void saveDocument(QString theName);
194
195   void onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
196   void onFeatureCreatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
197   void onFeatureRedisplayMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
198   void onObjectDeletedMsg(const ModelAPI_ObjectDeletedMessage* theMsg);
199
200   void validateOperation(const QString& theOperationId);
201
202   QList<QAction*> getModuleCommands() const;
203
204   void displayAllResults();
205   void displayDocumentResults(DocumentPtr theDoc);
206   void displayGroupResults(DocumentPtr theDoc, std::string theGroup);
207
208  protected slots:
209   /// SLOT, that is called after the operation is started. Update workshop state according to
210   /// the started operation, e.g. visualizes the property panel and connect to it.
211   void onOperationStarted();
212   /// SLOT, that is called after the operation is stopped. Update workshop state, e.g.
213   /// hides the property panel and udpate the command status.
214   /// \param theOpertion a stopped operation
215   void onOperationStopped(ModuleBase_Operation* theOperation);
216
217   void onContextMenuCommand(const QString& theId, bool isChecked);
218
219   void onWidgetValuesChanged();
220
221   void onStartWaiting();
222
223  private:
224   void initMenu();
225
226   void registerValidators() const;
227
228   ModuleBase_IModule* loadModule(const QString& theModule);
229   bool activateModule();
230
231   QDockWidget* createObjectBrowser(QWidget* theParent);
232   QDockWidget* createPropertyPanel(QWidget* theParent);
233
234   // Creates Dock widgets: Object browser and Property panel
235   void createDockWidgets();
236
237   XGUI_MainWindow* myMainWindow;
238   ModuleBase_IModule* myModule;
239   XGUI_ObjectsBrowser* myObjectBrowser;
240   XGUI_PropertyPanel* myPropertyPanel;
241   XGUI_SelectionMgr* mySelector;
242   XGUI_Displayer* myDisplayer;
243   XGUI_OperationMgr* myOperationMgr;  ///< manager to manipulate through the operations
244   XGUI_ActionsMgr* myActionsMgr;
245   XGUI_SalomeConnector* mySalomeConnector;
246   XGUI_ErrorDialog* myErrorDlg;
247   XGUI_ViewerProxy* myViewerProxy;
248   XGUI_ContextMenuMgr* myContextMenuMgr;
249   XGUI_ModuleConnector* myModuleConnector;
250
251   QString myCurrentDir;
252   static QMap<QString, QString> myIcons;
253 };
254
255 #endif