X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_OperationMgr.h;h=3cd0f9a379eeaac1ebbe805d8d191858d93f4eae;hb=4bd5b3938f3aba070cd4a79b8e6ffd625dcdbe81;hp=25a155617e1558996221e6e5c00facc2a590b954;hpb=e30796dab1aa68c01201b2b89d4292d3fcbbc4d4;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_OperationMgr.h b/src/XGUI/XGUI_OperationMgr.h index 25a155617..3cd0f9a37 100644 --- a/src/XGUI/XGUI_OperationMgr.h +++ b/src/XGUI/XGUI_OperationMgr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + // File: XGUI_OperationMgr.h // Created: 20 Apr 2014 // Author: Natalia ERMOLAEVA @@ -15,6 +17,9 @@ class QKeyEvent; +class ModuleBase_IWorkshop; +class XGUI_Workshop; + /**\class XGUI_OperationMgr * \ingroup GUI * \brief Operation manager. Servers to manipulate to the workshop operations. Contains a stack @@ -30,20 +35,38 @@ Q_OBJECT public: /// Constructor /// \param theParent the parent - XGUI_OperationMgr(QObject* theParent); + XGUI_OperationMgr(QObject* theParent, ModuleBase_IWorkshop* theWorkshop); /// Destructor virtual ~XGUI_OperationMgr(); + void setWorkshop(ModuleBase_IWorkshop* theWorkshop) + { myWorkshop = theWorkshop; }; + /// Returns the current operation or NULL /// \return the current operation ModuleBase_Operation* currentOperation() const; + /// Check if the given operation is active operation. /// Also, returns false is ther is no active operation. bool isCurrentOperation(ModuleBase_Operation* theOperation); + /// Returns true is operation manager has at least one non-null operation. bool hasOperation() const; + + /// 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. 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; + /// Returns number of operations in the stack int operationsCount() const; + /// Returns list of all operations IDs QStringList operationList() const; @@ -51,6 +74,7 @@ Q_OBJECT /// else, or if there is no parent - returns NULL ModuleBase_Operation* previousOperation(ModuleBase_Operation* theOperation) const; + /// Redefinition of virtual function virtual bool eventFilter(QObject *theObject, QEvent *theEvent); /// Start the operation and append it to the stack of operations @@ -58,50 +82,104 @@ Q_OBJECT /// \return the state whether the current operation is started bool startOperation(ModuleBase_Operation* theOperation); - bool abortAllOperations(); + /// 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 + /// \param isAdditionallyGranted a boolean flag whether the id operation is granted in the previous one + bool canStartOperation(const QString& theId, const bool isAdditionallyGranted = false); - public slots: + /// 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); + + /// 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); + + /// Returns state of validation locking + bool isValidationLocked() const { return myIsValidationLock; } + + /// Returns enable apply state + /// \return theEnabled a boolean value + bool isApplyEnabled() const; + + /// Returns valid state of the parent operation. If the current operation is the last one + /// it returns the valid state of the operation + /// \return boolean value + bool isParentOperationValid() const; + +public slots: /// Slot that commits the current operation. void onCommitOperation(); /// Slot that aborts the current operation. void onAbortOperation(); /// Slot that validates the current operation using the validateOperation method. void onValidateOperation(); + /// Commit all operations + bool commitAllOperations(); + /// Abort all operations + bool abortAllOperations(); signals: /// Signal about an operation is started. It is emitted after the start() of operation is done. void operationStarted(ModuleBase_Operation* theOperation); + /// Signal about an operation is stopped. It is emitted after the stop() of operation is done. /// \param theOperation a stopped operation void operationStopped(ModuleBase_Operation* theOperation); + /// Signal about an operation is resumed. It is emitted after the resume() of operation is done. - void operationResumed(); - /// Signal is emitted after the validate methods calls. - void operationValidated(bool); + void operationResumed(ModuleBase_Operation* theOperation); + + /// Emitted when current operation is Committed + void operationCommitted(ModuleBase_Operation* theOperation); + + /// 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 model is modified. It is emitted for all active operations. + /// \param theFeatureKind a feature id + /// \param theState validity of the operation with the feature kind + //void nestedStateChanged(const std::string& theFeatureKind, const bool theState); + + /// Signal is emitted after the current operation is filled with existing preselection. + void operationActivatedByPreselection(); + + /// Signal is emitted after the key released click. + void keyEnterReleased(); protected: + /// Sets apply state to the value and emit signal about this state is changed + /// \param theEnabled the state value + void setApplyEnabled(const bool theEnabled); + +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); /// Commits the current operatin if it is valid bool commitOperation(); + +protected: // TEMPORARY /// Sets the current operation or NULL /// \param theOperation the started operation - /// \param isCheckBeforeStart the flag whether to check whether the operation can be started - /// \return the state whether the operation is resumed void resumeOperation(ModuleBase_Operation* theOperation); - /// Returns whether the operation can be started. Check if there is already started operation and - /// the granted parameter of the launched operation - /// \param theOperation an operation to check - bool canStartOperation(ModuleBase_Operation* theOperation); - - bool canStopOperation(); - - /// Returns true if the operation can be aborted - bool canAbortOperation(); + /// 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 theOperation the started operation + /// \return boolean result + bool isGrantedOperation(ModuleBase_Operation* theOperation); public slots: /// SLOT, that is called by the key in the property panel is clicked. - /// \param theName the attribute name /// \param theEvent the mouse event bool onKeyReleased(QKeyEvent* theEvent); @@ -109,12 +187,35 @@ signals: /// 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 void onOperationStarted(); + /// Slot called on operation abort + void onOperationAborted(); + + /// Slot called on operation commit + void onOperationCommitted(); + + /// Slot called on operation resume + void onOperationResumed(); + +private: + XGUI_Workshop* workshop() const; + 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 + + /// Current workshop + ModuleBase_IWorkshop* myWorkshop; + + + /// Lock/Unlock access to Ok button in property panel + bool myIsValidationLock; + /// Lock/Unlock access to Ok button in property panel + bool myIsApplyEnabled; }; #endif