X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Workshop.h;h=c35db675bea7811d3e401c589b12d92e52e2b25c;hb=47ed5645c9784f62ffe5d706a0d48539f192beb0;hp=dad0857074b93a92e6e91d51226012ecf5e5e4ea;hpb=dc4b9ee9f5445b39bcaeb3b7f05627774e343ffa;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.h b/src/XGUI/XGUI_Workshop.h index dad085707..c35db675b 100644 --- a/src/XGUI/XGUI_Workshop.h +++ b/src/XGUI/XGUI_Workshop.h @@ -1,19 +1,24 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + #ifndef XGUI_WORKSHOP_H #define XGUI_WORKSHOP_H #include "XGUI.h" -#include "XGUI_Constants.h" +//#include "XGUI_Constants.h" #include +#include +#include +#include #include #include -#include #include +#include + +class AppElements_MainWindow; +class AppElements_Command; +class AppElements_Workbench; -class XGUI_MainWindow; -class XGUI_Command; -class XGUI_Module; -class XGUI_Workbench; class XGUI_SelectionMgr; class XGUI_Displayer; class XGUI_OperationMgr; @@ -28,6 +33,8 @@ class XGUI_ContextMenuMgr; class XGUI_ModuleConnector; class ModuleBase_Operation; +class ModuleBase_IModule; +class ModuleBase_IViewer; class Config_FeatureMessage; class Config_PointerMessage; @@ -35,14 +42,19 @@ class Config_PointerMessage; class QWidget; class QDockWidget; +class ModelAPI_ObjectUpdatedMessage; +class ModelAPI_ObjectDeletedMessage; +class ModelAPI_ResultPart; +class QAction; + /**\class XGUI_Workshop * \ingroup GUI * \brief Class which defines a configuration of the application (Workshop) and launches it. */ -class XGUI_EXPORT XGUI_Workshop: public QObject, public Events_Listener +class XGUI_EXPORT XGUI_Workshop : public QObject, public Events_Listener { Q_OBJECT -public: + public: XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0); virtual ~XGUI_Workshop(); @@ -51,69 +63,137 @@ public: void startApplication(); //! Returns main window (Desktop) of the application - XGUI_MainWindow* mainWindow() const + AppElements_MainWindow* mainWindow() const { return myMainWindow; } //! Returns selection manager object - XGUI_SelectionMgr* selector() const { return mySelector; } + XGUI_SelectionMgr* selector() const + { + return mySelector; + } //! Returns displayer - XGUI_Displayer* displayer() const { return myDisplayer; } + XGUI_Displayer* displayer() const + { + return myDisplayer; + } //! ! Returns operation manager. - XGUI_OperationMgr* operationMgr() const { return myOperationMgr; } + XGUI_OperationMgr* operationMgr() const + { + return myOperationMgr; + } //! ! Returns an actions manager - XGUI_ActionsMgr* actionsMgr() const { return myActionsMgr; }; + XGUI_ActionsMgr* actionsMgr() const + { + return myActionsMgr; + } //! Returns property panel widget - XGUI_PropertyPanel* propertyPanel() const { return myPropertyPanel; } + XGUI_PropertyPanel* propertyPanel() const + { + return myPropertyPanel; + } //! Returns context menu manager object - XGUI_ContextMenuMgr* contextMenuMgr() const { return myContextMenuMgr; } + XGUI_ContextMenuMgr* contextMenuMgr() const + { + return myContextMenuMgr; + } //! Creates and adds a new workbench (menu group) with the given name and returns it - XGUI_Workbench* addWorkbench(const QString& theName); + AppElements_Workbench* addWorkbench(const QString& theName); //! Redefinition of Events_Listener method - virtual void processEvent(const Events_Message* theMessage); + virtual void processEvent(const std::shared_ptr& theMessage); //! Returns an object which provides interface to Salome Module (LightApp_Module) - XGUI_SalomeConnector* salomeConnector() const { return mySalomeConnector; } + XGUI_SalomeConnector* salomeConnector() const + { + return mySalomeConnector; + } //! Provides an object which provides interface to Salome Viewer - XGUI_SalomeViewer* salomeViewer() const; + ModuleBase_IViewer* salomeViewer() const; //! Returns true if the application works as SALOME module - bool isSalomeMode() const { return mySalomeConnector != 0; } + bool isSalomeMode() const + { + return mySalomeConnector != 0; + } //! Returns Object browser - XGUI_ObjectsBrowser* objectBrowser() const { return myObjectBrowser; } + XGUI_ObjectsBrowser* objectBrowser() const + { + return myObjectBrowser; + } void salomeViewerSelectionChanged(); - XGUI_ViewerProxy* viewer() const { return myViewerProxy; } + XGUI_ViewerProxy* viewer() const + { + return myViewerProxy; + } + + /// Returns the module connectory + /// \returns the instance of connector + XGUI_ModuleConnector* moduleConnector() const + { + return myModuleConnector; + } - //! Returns icon name according to feature Id - static QString featureIcon(const std::string& theId); + //! Returns icon name according to feature + static QIcon featureIcon(const FeaturePtr& theFeature); //! Activates or deactivates a part //! If PartPtr is Null pointer then PartSet will be activated - void activatePart(FeaturePtr theFeature); + void activatePart(std::shared_ptr theFeature); //! Delete features - void deleteFeatures(QFeatureList theList); + void deleteObjects(const QObjectPtrList& theList); + + //! Show the given features in 3d Viewer + void showObjects(const QObjectPtrList& theList, bool isVisible); //! Show the given features in 3d Viewer - void showFeatures(QFeatureList theList, bool isVisible); + void showOnlyObjects(const QObjectPtrList& theList); + + void setDisplayMode(const QObjectPtrList& theList, int theMode); + + ModuleBase_IModule* module() const + { + return myModule; + } + + /// Returns current directory whic contains data files + QString currentDataDir() const { return myCurrentDir; } + + /// Returns current directory whic contains data files + void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; } + + /** + * Save the current document into a directory + * \param theName - path to the directory + * \param theFileNames - returned file names created in this directory + */ + void saveDocument(const QString& theName, std::list& theFileNames); + + /* + * If there is an active (uncommited) operation shows a prompt to abort it + * and performs abortion if user agreed. Returns true if + * - operation aborted successfully + * - there is no active operation + */ + bool isActiveOperationAborted(); signals: void salomeViewerSelection(); void errorOccurred(const QString&); -public slots: + public slots: void updateCommandStatus(); void onNew(); @@ -123,6 +203,8 @@ public slots: void onExit(); void onUndo(); void onRedo(); + void onRebuild(); + void onPreferences(); void showPropertyPanel(); void hidePropertyPanel(); @@ -130,31 +212,73 @@ public slots: void hideObjectBrowser(); void onFeatureTriggered(); - void changeCurrentDocument(FeaturePtr thePart); + void changeCurrentDocument(ObjectPtr theObj); void activateLastPart(); -protected: + void closeDocument(); + + protected: + // Find the nested features and set them into the operation + // \param theOperation an operation + void setNestedFeatures(ModuleBase_Operation* theOperation); + // Update the property panel content by the XML description of the operation and set the panel + // into the operation + // \param theOperation an operation + void setPropertyPanel(ModuleBase_Operation* theOperation); + + bool event(QEvent * theEvent); //Event-loop processing methods: - void addFeature(const Config_FeatureMessage*); + void addFeature(const std::shared_ptr&); void connectWithOperation(ModuleBase_Operation* theOperation); - void saveDocument(QString theName); -protected slots: + void onFeatureUpdatedMsg(const std::shared_ptr& theMsg); + void onFeatureCreatedMsg(const std::shared_ptr& theMsg); + void onFeatureRedisplayMsg(const std::shared_ptr& theMsg); + void onObjectDeletedMsg(const std::shared_ptr& theMsg); + + void validateOperation(const QString& theOperationId); + + void displayAllResults(); + void displayDocumentResults(DocumentPtr theDoc); + void displayGroupResults(DocumentPtr theDoc, std::string theGroup); + + private slots: /// SLOT, that is called after the operation is started. Update workshop state according to /// the started operation, e.g. visualizes the property panel and connect to it. - void onOperationStarted(); + /// \param theOpertion a started operation + void onOperationStarted(ModuleBase_Operation* theOperation); + + /// SLOT, that is called after the operation is resumed. Update workshop state according to + /// the started operation, e.g. visualizes the property panel and connect to it. + /// \param theOpertion a resumed operation + virtual void onOperationResumed(ModuleBase_Operation* theOperation); + /// SLOT, that is called after the operation is stopped. Update workshop state, e.g. /// hides the property panel and udpate the command status. /// \param theOpertion a stopped operation - void onOperationStopped(ModuleBase_Operation* theOperation); + virtual void onOperationStopped(ModuleBase_Operation* theOperation); + + /// SLOT, that is called after the operation is committed. + /// \param theOpertion a commmitted operation + virtual void onOperationCommitted(ModuleBase_Operation* theOperation); + + /// SLOT, that is called after the operation is aborted. + /// \param theOpertion an aborted operation + void onOperationAborted(ModuleBase_Operation* theOperation); void onContextMenuCommand(const QString& theId, bool isChecked); -private: + void onWidgetValuesChanged(); + + void onStartWaiting(); + + private: void initMenu(); - XGUI_Module* loadModule(const QString& theModule); + void registerValidators() const; + + ModuleBase_IModule* loadModule(const QString& theModule); bool activateModule(); QDockWidget* createObjectBrowser(QWidget* theParent); @@ -163,13 +287,13 @@ private: // Creates Dock widgets: Object browser and Property panel void createDockWidgets(); - XGUI_MainWindow* myMainWindow; - XGUI_Module* myPartSetModule; + AppElements_MainWindow* myMainWindow; + ModuleBase_IModule* myModule; XGUI_ObjectsBrowser* myObjectBrowser; XGUI_PropertyPanel* myPropertyPanel; XGUI_SelectionMgr* mySelector; XGUI_Displayer* myDisplayer; - XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations + XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations XGUI_ActionsMgr* myActionsMgr; XGUI_SalomeConnector* mySalomeConnector; XGUI_ErrorDialog* myErrorDlg; @@ -180,6 +304,10 @@ private: QString myCurrentDir; static QMap myIcons; + bool myUpdatePrefs; + + // Flag to check that part document is in process of activating + bool myPartActivating; }; #endif