X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_OperationMgr.h;h=7a62ddbe3efd2cabecbfb81b341a28275580316f;hb=220bd2b37119be1c65abf88a88792445cb9d99f8;hp=609d8fde4a6c0bf99a3ab7557ed1da3938544222;hpb=4e0e38789c4cfa73b7c2f11e26e84da7e9cbc211;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_OperationMgr.h b/src/XGUI/XGUI_OperationMgr.h old mode 100644 new mode 100755 index 609d8fde4..7a62ddbe3 --- a/src/XGUI/XGUI_OperationMgr.h +++ b/src/XGUI/XGUI_OperationMgr.h @@ -10,6 +10,7 @@ #include "XGUI.h" #include +#include "ModelAPI_Feature.h" #include #include @@ -17,6 +18,10 @@ class QKeyEvent; +class ModuleBase_IWorkshop; +class XGUI_Workshop; +class XGUI_ShortCutListener; + /**\class XGUI_OperationMgr * \ingroup GUI * \brief Operation manager. Servers to manipulate to the workshop operations. Contains a stack @@ -32,10 +37,22 @@ Q_OBJECT public: /// Constructor /// \param theParent the parent - XGUI_OperationMgr(QObject* theParent); + /// \param theWorkshop a reference to workshop + XGUI_OperationMgr(QObject* theParent, ModuleBase_IWorkshop* theWorkshop); + /// Destructor virtual ~XGUI_OperationMgr(); + /// Switch on short cut listener + void activate(); + /// Switch off short cut listener + void deactivate(); + + /// Set reference to workshop + /// \param theWorkshop reference to workshop + void setWorkshop(ModuleBase_IWorkshop* theWorkshop) + { myWorkshop = theWorkshop; }; + /// Returns the current operation or NULL /// \return the current operation ModuleBase_Operation* currentOperation() const; @@ -50,8 +67,10 @@ Q_OBJECT /// Returns true is operation manager has an operation with given Id. bool hasOperation(const QString& theId) const; - /// Returns true if the operation can be aborted - bool canStopOperation(); + /// Returns true if the operation can be aborted. If the operation is modified, + /// the warning message box is shown. + /// \param theOperation an operation which is checked on stop + bool canStopOperation(ModuleBase_Operation* theOperation); /// Find and return operation by its Id. ModuleBase_Operation* findOperation(const QString& theId) const; @@ -67,6 +86,7 @@ Q_OBJECT ModuleBase_Operation* previousOperation(ModuleBase_Operation* theOperation) const; /// Redefinition of virtual function + /// \param theObject a sender of the event virtual bool eventFilter(QObject *theObject, QEvent *theEvent); /// Start the operation and append it to the stack of operations @@ -77,24 +97,15 @@ Q_OBJECT /// Returns whether the operation can be started. Check if there is already started operation and /// the granted parameter of the launched operation /// \param theId id of the operation which is going to start - bool canStartOperation(QString theId); - - /// Blocking/unblocking enabling of Ok button in property panel. - /// It is used when operation can not be validated even all attributes are valid - void setLockValidating(bool toLock) { myIsValidationLock = toLock; } + bool canStartOperation(const QString& theId); - /// Returns state of validation locking - bool isValidationLocked() const { return myIsValidationLock; } + /// Aborts the parameter operation if it is current, else abort operations from the stack + /// of operations until the operation is found. All operations upper the parameter one are + /// not aborted. + /// \param theOperation an aborted operation + void abortOperation(ModuleBase_Operation* theOperation); - /// Sets apply state to the value and emit signal about this state is changed - /// \param theEnabled the state value - void setApplyEnabled(const bool theEnabled); - - /// Returns enable apply state - /// \return theEnabled a boolean value - bool isApplyEnabled() const; - - public slots: +public slots: /// Slot that commits the current operation. void onCommitOperation(); /// Slot that aborts the current operation. @@ -123,60 +134,99 @@ signals: /// Emitted when current operation is aborted void operationAborted(ModuleBase_Operation* theOperation); - /// Signal is emitted after the apply enable state changed. - void validationStateChanged(bool); - - /// Signal is emitted after the apply enable state changed. - void nestedStateChanged(bool); - /// Signal is emitted after the current operation is filled with existing preselection. void operationActivatedByPreselection(); /// Signal is emitted after the key released click. void keyEnterReleased(); - /// Signal is emitted after the key delete released click. - void keyDeleteReleased(); +public: // TEMPORARY, it should be protected and be performed automatically + /// Emits nestedStateChange for operations with an information about validity of the operation + /// \param theOperation the sent operation. If it is NULL, all operations in the stack are sent. + void updateApplyOfOperations(ModuleBase_Operation* theOperation = 0); - protected: /// Commits the current operatin if it is valid bool commitOperation(); +protected: // TEMPORARY /// Sets the current operation or NULL /// \param theOperation the started operation void resumeOperation(ModuleBase_Operation* theOperation); + /// Returns whether the parameter operation is granted in relation to the previous operation + /// in a stack of started operations. It is used in canStopOperation to avoid warning message + /// when granted operation is aborted, e.g. SketchLine in Sketch + /// \param theId id of the operation which is checked + /// \return boolean result + bool isGrantedOperation(const QString& theId); + + /// Sets the feature as a current in the document + /// \param theFeature a feature + void setCurrentFeature(const FeaturePtr& theFeature); + public slots: /// SLOT, that is called by the key in the property panel is clicked. + /// \param theObject a sender of the event /// \param theEvent the mouse event - bool onKeyReleased(QKeyEvent* theEvent); + bool onKeyReleased(QObject *theObject, QKeyEvent* theEvent); + + /// The functionaly, that should be done by delete click + /// Fistly the active widget processes it, then workshop. If no one does not + /// process it, do nothing + /// \param theObject a sender of the event + bool onProcessDelete(QObject* theObject); protected slots: + /// The functionaly, that should be done by enter click + /// Fistly the active widget processes it, then module. If no one does not + /// process it, the current operation is committed + /// \param theObject a sender of the event + bool onProcessEnter(QObject *theObject); + /// Slot that is called by an operation stop. Removes the stopped operation form the stack. /// If there is a suspended operation, restart it. void onOperationStopped(); - /// Slot called on operation start + /// Slot called before operation started. Stores the previous current feature, set the feature + /// of the operation as a current in the document. The previous current feature should be restored + /// by the operation abort/commit + void onBeforeOperationStarted(); + + /// Slot called after operation started void onOperationStarted(); - /// Slot called on operation abort + /// Slot called before operation aborted. Restore the previous current operation + void onBeforeOperationAborted(); + + /// Slot called after operation aborted void onOperationAborted(); - /// Slot called on operation commit + /// Slot called before operation committed. Restore the previous current operation + void onBeforeOperationCommitted(); + + /// Slot called after operation committed void onOperationCommitted(); /// Slot called on operation resume void onOperationResumed(); +private: + XGUI_Workshop* workshop() const; + + /// Checks if the object is a parent or a child under + /// \param theObject an investivated object + /// \param theParent a candidate to be a parent + static bool isChildObject(const QObject* theObject, const QObject* theParent); + private: typedef QList Operations; ///< definition for a list of operations Operations myOperations; ///< a stack of started operations. The active operation is on top, // others are suspended and started by the active is finished - /// Lock/Unlock access to Ok button in property panel - bool myIsValidationLock; - /// Lock/Unlock access to Ok button in property panel - bool myIsApplyEnabled; + /// Current workshop + ModuleBase_IWorkshop* myWorkshop; + + XGUI_ShortCutListener* myShortCutListener; }; #endif