X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.h;h=0fffbc0fdae9bea6f8bfd4fbf3e9678e2b79f2f1;hb=0d9a107853208317a6352bb7f8c77eb54d5efbe1;hp=17be4cba4286a6e6e63ea45c6ed6e3ec622c681a;hpb=cc532e129fefef094f3d3a082aaacfbf494d0c95;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.h b/src/ModuleBase/ModuleBase_Operation.h index 17be4cba4..0fffbc0fd 100644 --- a/src/ModuleBase/ModuleBase_Operation.h +++ b/src/ModuleBase/ModuleBase_Operation.h @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + /* * ModuleBase_Operation.h * @@ -9,22 +11,20 @@ #define ModuleBase_Operation_H #include -#include - -#include #include #include +#include -#include - -class ModelAPI_Document; class ModuleBase_ModelWidget; +class ModuleBase_OperationDescription; +class ModuleBase_IPropertyPanel; class QKeyEvent; /*! - \class ModuleBase_Operation + * \class ModuleBase_Operation + * \ingroup GUI * \brief Base class for all operations * * Base class for all operations. If you perform an action it is reasonable to create @@ -39,7 +39,7 @@ class QKeyEvent; * - virtual void commitOperation(); */ -class MODULEBASE_EXPORT ModuleBase_Operation : public ModuleBase_IOperation +class MODULEBASE_EXPORT ModuleBase_Operation : public QObject { Q_OBJECT @@ -48,84 +48,145 @@ Q_OBJECT /// \param theId the operation identifier /// \param theParent the QObject parent ModuleBase_Operation(const QString& theId = "", QObject* theParent = 0); + /// Destructor virtual ~ModuleBase_Operation(); - // Returns operations Id from it's description + /// Returns the operation description + /// /returns the instance of the description class + ModuleBase_OperationDescription* getDescription() const { return myDescription; } + + /// Returns list of granted operation indices + const QStringList& grantedOperationIds() const; + + /// Sets list of operation indices, which can be started without the current operation stop + /// \param theList an ids + void setGrantedOperationIds(const QStringList& theList); + + /// Must return true if this operation can be launched as nested for any current operation + /// and it is not necessary to check this operation on validity. By default + /// the operation is not granted. + /// The method has to be redefined for granted operations. + virtual bool isGranted(QString theId) const; + + /// Returns True if data of its feature was modified during operation + virtual bool isModified() const { return myIsModified; } + + /// Change the modified state of the operation + void setIsModified(const bool theIsModified) { myIsModified = theIsModified; } + + /// Returns operations Id from it's description QString id() const; - /// Returns the operation feature - /// \return the feature - FeaturePtr feature() const; - /// Returns true is feature of operation is valid. + /// Must return True if the operation's feature is valid. + /// Since IOperation does not have any feature returns false. virtual bool isValid() const; - /// Returns whether the nested operations are enabled. - /// The state can depend on the operation current state. - /// \return enabled state - virtual bool isNestedOperationsEnabled() const; + /// \brief Set property pane to the operation + /// \param theProp a property panel instance + virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp); - // Data model methods. - /// Stores a custom value in model. - void storeCustomValue(); + /// \return Currently installed property panel + ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; } - /// Sets the operation feature - void setEditingFeature(FeaturePtr theFeature); +signals: + /// The operation is started + void beforeStarted(); + /// The operation is started + void started(); - /// Returns True if the current operation works with the given object (feature or result) - virtual bool hasObject(ObjectPtr theObj) const; + /// The operation is aborted + void beforeAborted(); + /// The operation is aborted + void aborted(); - virtual void keyReleased(const int theKey) {}; + /// The operation is committed + void beforeCommitted(); + /// The operation is committed + void committed(); - virtual void activateNextToCurrentWidget() {}; + /// The operation is aborted or committed + void stopped(); - /// If operation needs to redisplay its result during operation - /// then this method has to return True - virtual bool hasPreview() const { return false; } + /// The operation is resumed + void resumed(); - public slots: - /// Slots which listen the mode widget activation - /// \param theWidget the model widget - virtual void onWidgetActivated(ModuleBase_ModelWidget* theWidget); + /// The operation is postponed + void postponed(); -signals: - /// Signals about the activating of the next widget - /// \param theWidget the previous active widget - void activateNextWidget(ModuleBase_ModelWidget* theWidget); + public slots: + /// Starts operation + /// Public slot. Verifies whether operation can be started and starts operation. + /// This slot is not virtual and cannot be redefined. Redefine startOperation method + /// to change behavior of operation. There is no point in using this method. It would + /// be better to inherit own operator from base one and redefine startOperation method + /// instead. + /// \return true if the start is successful + virtual bool start(); + + /// Deactivates current operation which can be resumed later. + virtual void postpone(); + + /// Resumes operation + /// Public slot. Verifies whether operation can be started and starts operation. + /// This slot is not virtual and cannot be redefined. Redefine startOperation method + /// to change behavior of operation. There is no point in using this method. It would + /// be better to inherit own operator from base one and redefine startOperation method + /// instead. + virtual void resume(); + + /// Aborts operation + /// Public slot. Aborts operation. This slot is not virtual and cannot be redefined. + /// Redefine abortOperation method to change behavior of operation instead + virtual void abort(); + + /// Commits operation + /// Public slot. Commits operation. This slot is not virtual and cannot be redefined. + /// Redefine commitOperation method to change behavior of operation instead + virtual bool commit(); + + /// Changes the modified flag of the operation + void onValuesChanged(); protected: /// Virtual method called when operation started (see start() method for more description) /// Default impl calls corresponding slot and commits immediately. - virtual void startOperation(); + virtual void startOperation() {} + + /// Implementation of specific steps on postpone operation + virtual void postponeOperation() {} + /// Virtual method called when operation stopped - committed or aborted. - virtual void stopOperation(); + virtual void stopOperation() {} + /// Virtual method called when operation aborted (see abort() method for more description) - virtual void abortOperation(); - /// Virtual method called when operation committed (see commit() method for more description) - virtual void commitOperation(); - /// Virtual method called after operation committed (see commit() method for more description) - virtual void afterCommitOperation(); + virtual void abortOperation() {} - /// Send update message by loop - void flushUpdated(); - /// Send created message by loop - void flushCreated(); + /// Virtual method called when operation committed (see commit() method for more description) + virtual void commitOperation() {}; - /// Creates an operation new feature - /// \param theFlushMessage the flag whether the create message should be flushed - /// \returns the created feature - virtual FeaturePtr createFeature(const bool theFlushMessage = true); + /// Virtual method called after operation committed (see commit() method for more description) + virtual void afterCommitOperation() {} - protected: - /// Sets the operation feature - void setFeature(FeaturePtr theFeature); + /// Virtual method called after operation resume (see resume() method for more description) + virtual void resumeOperation() {} /// Verifies whether this operator can be commited. /// \return Returns TRUE if current operation can be committed, e.g. all parameters are filled virtual bool canBeCommitted() const; - protected: - FeaturePtr myFeature; /// the operation feature to be handled +private: + /// the container to have the operation description + ModuleBase_OperationDescription* myDescription; + + /// Modified feature flag + bool myIsModified; + + /// List of operations IDs which are granted of the current operation + QStringList myGrantedIds; + + /// Access to property panel + ModuleBase_IPropertyPanel* myPropertyPanel; }; #endif