X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FXGUI%2FXGUI_Workshop.h;h=b492fa1134d3bf225c9ef7dd0b4a19d7feb88f15;hb=6a7b7e89852489a242ed25f5808d9306b00cc7d9;hp=c83583cc0f8094bbcf973eaeb5d381776d156a41;hpb=0db0e55b71cdb92db4697c5325cb1472a8bc9f00;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Workshop.h b/src/XGUI/XGUI_Workshop.h index c83583cc0..b492fa113 100644 --- a/src/XGUI/XGUI_Workshop.h +++ b/src/XGUI/XGUI_Workshop.h @@ -1,22 +1,26 @@ +// 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 #include +#include +class AppElements_MainWindow; +class AppElements_Command; +class AppElements_Workbench; -class XGUI_MainWindow; -class XGUI_Command; -class XGUI_Workbench; class XGUI_SelectionMgr; class XGUI_Displayer; class XGUI_OperationMgr; @@ -32,28 +36,31 @@ class XGUI_ModuleConnector; class ModuleBase_Operation; class ModuleBase_IModule; +class ModuleBase_IViewer; class Config_FeatureMessage; class Config_PointerMessage; class QWidget; class QDockWidget; +class QMainWindow; class ModelAPI_ObjectUpdatedMessage; class ModelAPI_ObjectDeletedMessage; +class ModelAPI_ResultPart; class QAction; -class SUIT_ResourceMgr; - /**\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: + /// Constructor + /// \param theConnector a Salome connector object. + /// Used only if the workshop is launched in Salome environment XGUI_Workshop(XGUI_SalomeConnector* theConnector = 0); virtual ~XGUI_Workshop(); @@ -61,152 +68,335 @@ 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; + } + /// This method is called by Salome module when selection is changed void salomeViewerSelectionChanged(); - XGUI_ViewerProxy* viewer() const { return myViewerProxy; } + /// Returns viewer which unifies access as to Salome viewer as to standalone viewer + XGUI_ViewerProxy* viewer() const + { + return myViewerProxy; + } /// Returns the module connectory /// \returns the instance of connector - XGUI_ModuleConnector* moduleConnector() const { return myModuleConnector; } + XGUI_ModuleConnector* moduleConnector() const + { + return myModuleConnector; + } - //! Returns icon name according to feature Id - static QString featureIcon(const std::string& theId); + /// Returns a desktop + /// \return a desktop instance + QMainWindow* desktop() const; - static SUIT_ResourceMgr* resourceMgr() { return myResourceMgr; } + //! 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(ResultPartPtr theFeature); + void activatePart(std::shared_ptr theFeature); //! Delete features - void deleteObjects(const QList& 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 showObjects(const QList& theList, bool isVisible); + void showOnlyObjects(const QObjectPtrList& theList); - ModuleBase_IModule* module() const { return myModule; } + /// Set display mode for the given onjects + /// \param theList a list of displayed objects + /// \param theMode a mode to set (see \ref XGUI_Displayer) + void setDisplayMode(const QObjectPtrList& theList, int theMode); + + /// Returns current module + 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: + /// Emitted when selection happens in Salome viewer void salomeViewerSelection(); + + /// Emitted when error in applivation happens void errorOccurred(const QString&); -public slots: + //! the signal about the workshop actions states are updated. + void commandStatusUpdated(); + + //! the application is started + void applicationStarted(); + + void updateUndoHistory(const QList&); + void updateRedoHistory(const QList&); + + public slots: + /// Update of commands status void updateCommandStatus(); - void updateCommandsOnViewSelection(); + /// update history list (undo/redo commands) + void updateHistory(); + + /// Create a new dokument void onNew(); + + /// Open document from file void onOpen(); + + /// Save current document bool onSave(); + + /// Save current document to a file selected by user bool onSaveAs(); + + /// Exit application void onExit(); - void onUndo(); - void onRedo(); + /// Undo last command + void onUndo(int times = 1); + + /// Redo previous command + void onRedo(int times = 1); + + /// Rebuild data tree + void onRebuild(); + + /// Open preferences dialog box + void onPreferences(); + + /// Show property panel void showPropertyPanel(); + + /// Hide property panel void hidePropertyPanel(); + + /// Show object Browser void showObjectBrowser(); + + /// Hide object Browser void hideObjectBrowser(); + /// Reaction on command call void onFeatureTriggered(); + + /// Change active document + /// \param theObj a part object. If it is NULL then active document is a main document void changeCurrentDocument(ObjectPtr theObj); - void activateLastPart(); + //void activateLastPart(); + + /// Close document + 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); + + /// Procedure to process postponed events + bool event(QEvent * theEvent); -protected: //Event-loop processing methods: - void addFeature(const Config_FeatureMessage*); + + /// Process event "Add a feature" + void addFeature(const std::shared_ptr&); + + /// Connect to operation signals + /// \param theOperation an operation void connectWithOperation(ModuleBase_Operation* theOperation); - void saveDocument(QString theName); - void onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg); - void onFeatureCreatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg); - void onFeatureRedisplayMsg(const ModelAPI_ObjectUpdatedMessage* theMsg); - void onObjectDeletedMsg(const ModelAPI_ObjectDeletedMessage* theMsg); + /// Process feature update message + void onFeatureUpdatedMsg(const std::shared_ptr& ); + + ///Process feature created message + void onFeatureCreatedMsg(const std::shared_ptr& ); - QList getModuleCommands() const; + /// Process feature redisplay message + void onFeatureRedisplayMsg(const std::shared_ptr& ); + /// Process feature delete message + void onObjectDeletedMsg(const std::shared_ptr& ); + + /// Display all results void displayAllResults(); + + /// Displau results from document + /// \param theDoc a document void displayDocumentResults(DocumentPtr theDoc); + + /// Display results from a group void displayGroupResults(DocumentPtr theDoc, std::string theGroup); -protected slots: + 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); - void onContextMenuCommand(const QString& theId, bool isChecked); + /// SLOT, that is called after the operation is committed. + /// \param theOpertion a commmitted operation + virtual void onOperationCommitted(ModuleBase_Operation* theOperation); - void onWidgetValuesChanged(); + /// SLOT, that is called after the operation is aborted. + /// \param theOpertion an aborted operation + void onOperationAborted(ModuleBase_Operation* theOperation); + /// Slot, which reacts to the context popup menu call + /// \param theId the data value of the clicked action + /// \param isChecked a state of toggle if the action is checkable + void onContextMenuCommand(const QString& theId, bool isChecked); + + /// Set waiting cursor void onStartWaiting(); -private: + private: + /// Init menu void initMenu(); + /// Register validators void registerValidators() const; - + /// Load module from external library + /// \param theModule name of the module ModuleBase_IModule* loadModule(const QString& theModule); + + /// Activate module bool activateModule(); + /// Create object browser widget + /// \param theParent a parent of widget QDockWidget* createObjectBrowser(QWidget* theParent); + + /// Create property panel widget + /// \param theParent a parent of widget QDockWidget* createPropertyPanel(QWidget* theParent); // Creates Dock widgets: Object browser and Property panel void createDockWidgets(); - XGUI_MainWindow* myMainWindow; + /// Displaus object and fit all viewer if the object is first (update viewer will not be called) + void displayObject(ObjectPtr theObj); + + //! Extends undo/redo toolbutton's with history menu + //! \param theObject - in the OpenParts it is a QToolButton by itself, + //! in salome mode - QAction that creates a button. + //! \param theSignal - void "updateUndoHistory" or "updateRedoHistory" SIGNAL; + //! \param theSlot - onUndo(int) or onRedo(int) SLOT + void addHistoryMenu(QObject* theObject, const char* theSignal, const char* theSlot); + +private: + 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; @@ -217,8 +407,10 @@ private: QString myCurrentDir; static QMap myIcons; - static SUIT_ResourceMgr* myResourceMgr; + bool myUpdatePrefs; + // Flag to check that part document is in process of activating + bool myPartActivating; }; #endif