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 boost::shared_ptr<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 void setDisplayMode(const QList<ObjectPtr>& theList, int theMode);
162 ModuleBase_IModule* module() const
167 /// Returns current directory whic contains data files
168 QString currentDataDir() const { return myCurrentDir; }
170 /// Returns current directory whic contains data files
171 void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; }
174 * Save the current document into a directory
175 * \param theName - path to the directory
176 * \param theFileNames - returned file names created in this directory
178 void saveDocument(const QString& theName, std::list<std::string>& theFileNames);
181 * If there is an active (uncommited) operation shows a prompt to abort it
182 * and performs abortion if user agreed. Returns true if
183 * - operation aborted successfully
184 * - there is no active operation
186 bool isActiveOperationAborted();
189 void salomeViewerSelection();
190 void errorOccurred(const QString&);
193 void updateCommandStatus();
194 void updateCommandsOnViewSelection();
204 void onPreferences();
206 void showPropertyPanel();
207 void hidePropertyPanel();
208 void showObjectBrowser();
209 void hideObjectBrowser();
211 void onFeatureTriggered();
212 void changeCurrentDocument(ObjectPtr theObj);
214 void activateLastPart();
217 bool event(QEvent * theEvent);
218 //Event-loop processing methods:
219 void addFeature(const boost::shared_ptr<Config_FeatureMessage>&);
220 void connectWithOperation(ModuleBase_Operation* theOperation);
222 void onFeatureUpdatedMsg(const boost::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg);
223 void onFeatureCreatedMsg(const boost::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg);
224 void onFeatureRedisplayMsg(const boost::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg);
225 void onObjectDeletedMsg(const boost::shared_ptr<ModelAPI_ObjectDeletedMessage>& theMsg);
227 void validateOperation(const QString& theOperationId);
229 QList<QAction*> getModuleCommands() const;
231 void displayAllResults();
232 void displayDocumentResults(DocumentPtr theDoc);
233 void displayGroupResults(DocumentPtr theDoc, std::string theGroup);
236 /// SLOT, that is called after the operation is started. Update workshop state according to
237 /// the started operation, e.g. visualizes the property panel and connect to it.
238 void onOperationStarted();
239 /// SLOT, that is called after the operation is stopped. Update workshop state, e.g.
240 /// hides the property panel and udpate the command status.
241 /// \param theOpertion a stopped operation
242 void onOperationStopped(ModuleBase_Operation* theOperation);
244 void onContextMenuCommand(const QString& theId, bool isChecked);
246 void onWidgetValuesChanged();
248 void onStartWaiting();
253 void registerValidators() const;
255 ModuleBase_IModule* loadModule(const QString& theModule);
256 bool activateModule();
258 QDockWidget* createObjectBrowser(QWidget* theParent);
259 QDockWidget* createPropertyPanel(QWidget* theParent);
261 // Creates Dock widgets: Object browser and Property panel
262 void createDockWidgets();
264 XGUI_MainWindow* myMainWindow;
265 ModuleBase_IModule* myModule;
266 XGUI_ObjectsBrowser* myObjectBrowser;
267 XGUI_PropertyPanel* myPropertyPanel;
268 XGUI_SelectionMgr* mySelector;
269 XGUI_Displayer* myDisplayer;
270 XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations
271 XGUI_ActionsMgr* myActionsMgr;
272 XGUI_SalomeConnector* mySalomeConnector;
273 XGUI_ErrorDialog* myErrorDlg;
274 XGUI_ViewerProxy* myViewerProxy;
275 XGUI_ContextMenuMgr* myContextMenuMgr;
276 XGUI_ModuleConnector* myModuleConnector;
278 QString myCurrentDir;
279 static QMap<QString, QString> myIcons;
283 // Flag to check that part document is in process of activating
284 bool myPartActivating;