X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ActionsMgr.h;h=f1f4e80ca571c2203b6264128d33b71a33a9c3a3;hb=81870af2d38a9fc77e96ce17271a434614187b2d;hp=965f2289f05e884d451e2c32450a68ad7aea7f3d;hpb=ef523c1c20fecaf086c9f9fe712750ae8e180ec0;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ActionsMgr.h b/src/XGUI/XGUI_ActionsMgr.h index 965f2289f..f1f4e80ca 100644 --- a/src/XGUI/XGUI_ActionsMgr.h +++ b/src/XGUI/XGUI_ActionsMgr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + /* * XGUI_ActionsMgr.h */ @@ -7,50 +9,133 @@ #include "XGUI.h" +#include +#include + +#include + #include #include +#include #include +#include -class XGUI_Command; class XGUI_Workshop; +class XGUI_OperationMgr; +class ModuleBase_Operation; class QAction; -class XGUI_EXPORT XGUI_ActionsMgr: public QObject +/** +* \ingroup GUI +* A class for management of actions (features) activation/deactivation +*/ +class XGUI_EXPORT XGUI_ActionsMgr : public QObject, public Events_Listener { Q_OBJECT -public: - XGUI_ActionsMgr(XGUI_Workshop* theParent); + public: + /// Constructor + /// \param theWorkshop an instance of workshop + XGUI_ActionsMgr(XGUI_Workshop* theWorkshop); virtual ~XGUI_ActionsMgr(); - - void addCommand(XGUI_Command* theCmd); - - /// Register a command in SALOME mode - /// \param theId - string ID of the command - /// \param theCmd - command object - void addCommand(QString theId, QAction* theCmd); - - void saveCommandsState(); - void restoreCommandState(); - - /// Set the action is checked - /// \param theId - string ID of the command - /// \praram theChecked - the new checked state + /// Actions on operations + enum OperationStateActionId { + Abort = 0, + Accept = 1, + Help = 2, + AbortAll = 3, + AcceptAll = 4, + Preview = 5 + }; + + //! Add a command in the manager. + //! Please note that nested commands in the Salome mode (No AppElements_Command, pure QActions) + //! won't be extracted and should be added manually using the addNestedCommands method. + void addCommand(QAction* theCmd); + + //! Sets relation between the command (with given Id) and it's nested actions. + void addNestedCommands(const QString& theId, const QStringList& theCommands); + + //! Returns list of nested commands by parent command Id + //! \param theId a parent command Id + QStringList nestedCommands(const QString& theId) const; + + /// Returns True if the given Id is an Id of nested command + /// \param theId an Id to check + bool isNested(const QString& theId) const; + + /// Registers shortcut (key sequence) for the command triggering + /// \param theKeySequence a key sequence to register + QKeySequence registerShortcut(const QKeySequence& theKeySequence); + + /// This is an overloaded function. + /// Registers shortcut (key sequence) for the command triggering + /// \param theKeySequence - string that contain a key sequence to register + QKeySequence registerShortcut(const QString& theKeySequence); + + //! Redefinition of Events_Listener method + virtual void processEvent(const std::shared_ptr& theMessage); + + //! Return property panel's action like ok, cancel, help. + //! If there is no such action, it will be created. + QAction* operationStateAction(OperationStateActionId theId, QObject* theParent = 0); + + /// Return an action by the given id, if it was registered in the manager + QAction* action(const QString& theId); + + /// Return info (icon, text, etc) about the action by the given id, if it was registered in the manager + ActionInfo actionInfoById(const QString& theId); + + private: + //! Update workbench actions according to OperationMgr state: + //! No active operations: all actions but nested are available + //! There is active operation: current operation + it's nested + //! are enabled, all the rest is disabled. All active commands is checked. + void updateCommandsStatus(); + + //! Sets all commands checked if it's operation is active. + void updateCheckState(); + + //! Updates actions according to current selection in the viewer + void updateOnViewSelection(); + + //! Sets all actions to enabled state. + void setAllEnabled(); + + //! Sets all nested actions to isEnabled state for the command with given ID. + //! If ID is empty - all nested actions will be affected. + void setNestedCommandsEnabled(bool isEnabled, const QString& theParent = QString()); + + //! Sets to enabled state all siblings of the given operation and it's parents recursively + void setNestedStackEnabled(ModuleBase_Operation* theOperation); + + //! Sets the action with theId to theChecked state. void setActionChecked(const QString& theId, const bool theChecked); + + //! Sets the action with theId to theEnabled state. + void setActionEnabled(const QString& theId, const bool theEnabled); + + //! Updates actions according to their "document" tag + void updateByDocumentKind(); + + //! Asks plugins about their features state, using the Events system + void updateByPlugins(FeaturePtr theActiveFeature); - void updateAction(const QString&); - void setNestedActionsEnabled(bool); + QStringList allNestedCommands(ModuleBase_Operation* theOperation); -public slots: - void setActionsDisabled(bool isEnabled); + private: -private: - QStringList myNestedActions; QMap myActions; - QMap myActionsState; + QMap myNestedActions; + QMap myOperationActions; + QList myShortcuts; XGUI_Workshop* myWorkshop; + XGUI_OperationMgr* myOperationMgr; + + friend class XGUI_Workshop; }; #endif /* XGUI_ACTIONSMGR_H_ */ +