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   //! Show the given features in 3d Viewer
158   void showOnlyObjects(const QList<ObjectPtr>& theList);
159
160   ModuleBase_IModule* module() const
161   {
162     return myModule;
163   }
164
165 signals:
166   void salomeViewerSelection();
167   void errorOccurred(const QString&);
168
169  public slots:
170   void updateCommandStatus();
171   void updateCommandsOnViewSelection();
172
173   void onNew();
174   void onOpen();
175   bool onSave();
176   bool onSaveAs();
177   void onExit();
178   void onUndo();
179   void onRedo();
180   void onPreferences();
181
182   void showPropertyPanel();
183   void hidePropertyPanel();
184   void showObjectBrowser();
185   void hideObjectBrowser();
186
187   void onFeatureTriggered();
188   void changeCurrentDocument(ObjectPtr theObj);
189
190   void activateLastPart();
191
192  protected:
193   //Event-loop processing methods:
194   void addFeature(const Config_FeatureMessage*);
195   void connectWithOperation(ModuleBase_Operation* theOperation);
196   void saveDocument(QString theName);
197
198   void onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
199   void onFeatureCreatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
200   void onFeatureRedisplayMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
201   void onObjectDeletedMsg(const ModelAPI_ObjectDeletedMessage* theMsg);
202
203   void validateOperation(const QString& theOperationId);
204
205   QList<QAction*> getModuleCommands() const;
206
207   void displayAllResults();
208   void displayDocumentResults(DocumentPtr theDoc);
209   void displayGroupResults(DocumentPtr theDoc, std::string theGroup);
210
211  protected slots:
212   /// SLOT, that is called after the operation is started. Update workshop state according to
213   /// the started operation, e.g. visualizes the property panel and connect to it.
214   void onOperationStarted();
215   /// SLOT, that is called after the operation is stopped. Update workshop state, e.g.
216   /// hides the property panel and udpate the command status.
217   /// \param theOpertion a stopped operation
218   void onOperationStopped(ModuleBase_Operation* theOperation);
219
220   void onContextMenuCommand(const QString& theId, bool isChecked);
221
222   void onWidgetValuesChanged();
223
224   void onStartWaiting();
225
226  private:
227   void initMenu();
228
229   void registerValidators() const;
230
231   ModuleBase_IModule* loadModule(const QString& theModule);
232   bool activateModule();
233
234   QDockWidget* createObjectBrowser(QWidget* theParent);
235   QDockWidget* createPropertyPanel(QWidget* theParent);
236
237   // Creates Dock widgets: Object browser and Property panel
238   void createDockWidgets();
239
240   XGUI_MainWindow* myMainWindow;
241   ModuleBase_IModule* myModule;
242   XGUI_ObjectsBrowser* myObjectBrowser;
243   XGUI_PropertyPanel* myPropertyPanel;
244   XGUI_SelectionMgr* mySelector;
245   XGUI_Displayer* myDisplayer;
246   XGUI_OperationMgr* myOperationMgr;  ///< manager to manipulate through the operations
247   XGUI_ActionsMgr* myActionsMgr;
248   XGUI_SalomeConnector* mySalomeConnector;
249   XGUI_ErrorDialog* myErrorDlg;
250   XGUI_ViewerProxy* myViewerProxy;
251   XGUI_ContextMenuMgr* myContextMenuMgr;
252   XGUI_ModuleConnector* myModuleConnector;
253
254   QString myCurrentDir;
255   static QMap<QString, QString> myIcons;
256 };
257
258 #endif