1 #ifndef XGUI_WORKSHOP_H
2 #define XGUI_WORKSHOP_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>
14 #include <QKeySequence>
16 class XGUI_MainWindow;
19 class XGUI_SelectionMgr;
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;
32 class ModuleBase_Operation;
33 class ModuleBase_IModule;
35 class Config_FeatureMessage;
36 class Config_PointerMessage;
41 class ModelAPI_ObjectUpdatedMessage;
42 class ModelAPI_ObjectDeletedMessage;
45 /**\class XGUI_Workshop
47 * \brief Class which defines a configuration of the application (Workshop) and launches it.
49 class XGUI_EXPORT XGUI_Workshop : public QObject, public Events_Listener
54 XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0);
55 virtual ~XGUI_Workshop();
57 //! Starting of the application
58 void startApplication();
60 //! Returns main window (Desktop) of the application
61 XGUI_MainWindow* mainWindow() const
66 //! Returns selection manager object
67 XGUI_SelectionMgr* selector() const
73 XGUI_Displayer* displayer() const
78 //! ! Returns operation manager.
79 XGUI_OperationMgr* operationMgr() const
81 return myOperationMgr;
84 //! ! Returns an actions manager
85 XGUI_ActionsMgr* actionsMgr() const
91 //! Returns property panel widget
92 XGUI_PropertyPanel* propertyPanel() const
94 return myPropertyPanel;
97 //! Returns context menu manager object
98 XGUI_ContextMenuMgr* contextMenuMgr() const
100 return myContextMenuMgr;
103 //! Creates and adds a new workbench (menu group) with the given name and returns it
104 XGUI_Workbench* addWorkbench(const QString& theName);
106 //! Redefinition of Events_Listener method
107 virtual void processEvent(const Events_Message* theMessage);
109 //! Returns an object which provides interface to Salome Module (LightApp_Module)
110 XGUI_SalomeConnector* salomeConnector() const
112 return mySalomeConnector;
115 //! Provides an object which provides interface to Salome Viewer
116 XGUI_SalomeViewer* salomeViewer() const;
118 //! Returns true if the application works as SALOME module
119 bool isSalomeMode() const
121 return mySalomeConnector != 0;
124 //! Returns Object browser
125 XGUI_ObjectsBrowser* objectBrowser() const
127 return myObjectBrowser;
130 void salomeViewerSelectionChanged();
132 XGUI_ViewerProxy* viewer() const
134 return myViewerProxy;
137 /// Returns the module connectory
138 /// \returns the instance of connector
139 XGUI_ModuleConnector* moduleConnector() const
141 return myModuleConnector;
144 //! Returns icon name according to feature Id
145 static QString featureIcon(const std::string& theId);
147 //! Activates or deactivates a part
148 //! If PartPtr is Null pointer then PartSet will be activated
149 void activatePart(ResultPartPtr theFeature);
152 void deleteObjects(const QList<ObjectPtr>& theList);
154 //! Show the given features in 3d Viewer
155 void showObjects(const QList<ObjectPtr>& theList, bool isVisible);
157 //! Show the given features in 3d Viewer
158 void showOnlyObjects(const QList<ObjectPtr>& theList);
160 ModuleBase_IModule* module() const
165 /// Returns current directory whic contains data files
166 QString currentDataDir() const { return myCurrentDir; }
168 /// Returns current directory whic contains data files
169 void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; }
172 * Save the current document into a directory
173 * \param theName - path to the directory
174 * \param theFileNames - returned file names created in this directory
176 void saveDocument(const QString& theName, std::list<std::string>& theFileNames);
179 * If there is an active (uncommited) operation shows a prompt to abort it
180 * and performs abortion if user agreed. Returns true if
181 * - operation aborted successfully
182 * - there is no active operation
184 bool isActiveOperationAborted();
187 void salomeViewerSelection();
188 void errorOccurred(const QString&);
191 void updateCommandStatus();
192 void updateCommandsOnViewSelection();
201 void onPreferences();
203 void showPropertyPanel();
204 void hidePropertyPanel();
205 void showObjectBrowser();
206 void hideObjectBrowser();
208 void onFeatureTriggered();
209 void changeCurrentDocument(ObjectPtr theObj);
211 void activateLastPart();
214 //Event-loop processing methods:
215 void addFeature(const Config_FeatureMessage*);
216 void connectWithOperation(ModuleBase_Operation* theOperation);
218 void onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
219 void onFeatureCreatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
220 void onFeatureRedisplayMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
221 void onObjectDeletedMsg(const ModelAPI_ObjectDeletedMessage* theMsg);
223 void validateOperation(const QString& theOperationId);
225 QList<QAction*> getModuleCommands() const;
227 void displayAllResults();
228 void displayDocumentResults(DocumentPtr theDoc);
229 void displayGroupResults(DocumentPtr theDoc, std::string theGroup);
232 /// SLOT, that is called after the operation is started. Update workshop state according to
233 /// the started operation, e.g. visualizes the property panel and connect to it.
234 void onOperationStarted();
235 /// SLOT, that is called after the operation is stopped. Update workshop state, e.g.
236 /// hides the property panel and udpate the command status.
237 /// \param theOpertion a stopped operation
238 void onOperationStopped(ModuleBase_Operation* theOperation);
240 void onContextMenuCommand(const QString& theId, bool isChecked);
242 void onWidgetValuesChanged();
244 void onStartWaiting();
249 void registerValidators() const;
251 ModuleBase_IModule* loadModule(const QString& theModule);
252 bool activateModule();
254 QDockWidget* createObjectBrowser(QWidget* theParent);
255 QDockWidget* createPropertyPanel(QWidget* theParent);
257 // Creates Dock widgets: Object browser and Property panel
258 void createDockWidgets();
260 XGUI_MainWindow* myMainWindow;
261 ModuleBase_IModule* myModule;
262 XGUI_ObjectsBrowser* myObjectBrowser;
263 XGUI_PropertyPanel* myPropertyPanel;
264 XGUI_SelectionMgr* mySelector;
265 XGUI_Displayer* myDisplayer;
266 XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations
267 XGUI_ActionsMgr* myActionsMgr;
268 XGUI_SalomeConnector* mySalomeConnector;
269 XGUI_ErrorDialog* myErrorDlg;
270 XGUI_ViewerProxy* myViewerProxy;
271 XGUI_ContextMenuMgr* myContextMenuMgr;
272 XGUI_ModuleConnector* myModuleConnector;
274 QString myCurrentDir;
275 static QMap<QString, QString> myIcons;
279 // Flag to check that part document is in process of activating
280 bool myPartActivating;