X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.h;h=07b413218a832b294cee888c56e5553b58cbee02;hb=9585dccdd4d56657ced8ef9b25797979ea237f76;hp=818476d6faf073a3eafc05bd01a95373f7600482;hpb=b96d49472ad23f609343fa158d1d7b96c729ed09;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.h b/src/ModuleBase/ModuleBase_Operation.h index 818476d6f..07b413218 100644 --- a/src/ModuleBase/ModuleBase_Operation.h +++ b/src/ModuleBase/ModuleBase_Operation.h @@ -5,21 +5,26 @@ * Author: sbh */ - -#ifndef MODULEBASE_OPERATION_H -#define MODULEBASE_OPERATION_H +#ifndef ModuleBase_Operation_H +#define ModuleBase_Operation_H #include +#include + +#include +#include #include #include +#include -#include +class ModuleBase_ModelWidget; +class ModuleBase_OperationDescription; +class ModuleBase_IPropertyPanel; +class ModuleBase_ISelection; +class ModuleBase_IViewer; -class SUIT_Study; -class XGUI_Workshop; -class ModelAPI_Feature; -class ModelAPI_Document; +class QKeyEvent; /*! \class ModuleBase_Operation @@ -37,104 +42,201 @@ class ModelAPI_Document; * - virtual void commitOperation(); */ -class MODULEBASE_EXPORT ModuleBase_Operation: public QObject +class MODULEBASE_EXPORT ModuleBase_Operation : public QObject { Q_OBJECT -public: - /*! Enum describes state of operation */ - enum OperationState - { - Waiting, //!< Operation is not used (it is not run or suspended) - Running //!< Operation is started - }; - - /*! - * Enum describes execution status of operation. Execution status often used after - * ending work of operation which was started from this one. In this case this - * operation can ask previously started operation whether it finished successfully. - */ - enum ExecStatus - { - Rejected, //!< Operation has not performed any action (modification of data model for example) - Accepted //!< Operation has performed an actions and must be stopped - }; - - /*! - * Enum describes setting of the operation. - */ - enum Flags - { - None = 0x00, //!< None options - Transaction = 0x01 //!< Automatically open (commit/abort) transaction during start (commit/abort). - }; - -public: - ModuleBase_Operation(const QString& theId = "", QObject* parent = 0); + public: + /// Constructor + /// \param theId the operation identifier + /// \param theParent the QObject parent + ModuleBase_Operation(const QString& theId = "", QObject* theParent = 0); + /// Destructor virtual ~ModuleBase_Operation(); - // Operation processing. - virtual QString operationId() const; + /// Returns the operation description + /// /returns the instance of the description class + ModuleBase_OperationDescription* getDescription() const { return myDescription; } - boost::shared_ptr feature() const; + /** + * 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(ModuleBase_Operation* theOperation) const { return false; } - OperationState state() const; - bool isRunning() const; - virtual bool isValid(ModuleBase_Operation* theOtherOp) const; - virtual bool isGranted() const; + /// Sets a list of model widgets, according to the operation feature xml definition + /// \param theXmlRepresentation an xml feature definition + /// \param theWidgets a list of widgets + //void setModelWidgets(const std::string& theXmlRepresentation, + // QList theWidgets); - bool setSlot(const QObject* theReceiver, const char* theSlot); + /// Returns True if data of its feature was modified during operation + virtual bool isModified() const { return myIsModified; } - void setFlags(const int); - void clearFlags(const int); - bool testFlags(const int) const; + /// Returns True id the current operation is launched in editing mode + bool isEditOperation() const { return myIsEditing; } - int execStatus() const; + /// Returns list of nested features + QStringList nestedFeatures() const { return myNestedFeatures; } -signals: - void started(); - void aborted(); - void committed(); - void stopped(); //!< operation aborted or committed + /// Sets list of nested features + void setNestedFeatures(const QStringList& theList) { myNestedFeatures = theList; } - void callSlot(); -public slots: - void start(); - void abort(); - void commit(); + // Returns operations Id from it's description + QString id() const; + + /// Returns the operation feature + /// \return the feature + FeaturePtr feature() const; + + /** + * Must return True if the operation's feature is valid. + * Since IOperation does not have any feature returns false. + */ + virtual bool isValid() const; - //true = do nothing, false = abort() - //Provided for S/S compatibility with QAction's toggle(bool) - void setRunning(bool); + /// Returns whether the nested operations are enabled. + /// The state can depend on the operation current state. + /// \return enabled state + virtual bool isNestedOperationsEnabled() const; - // Data model operations. - void storeReal(double); + /// Sets the operation feature + void setFeature(FeaturePtr theFeature); - // Data model operations. - void storeCustomValue(); + /// Returns True if the current operation works with the given object (feature or result) + virtual bool hasObject(ObjectPtr theObj) const; -protected: - virtual bool isReadyToStart() const; + virtual void keyReleased(const int theKey) {}; + /// If operation needs to redisplay its result during operation + /// then this method has to return True + virtual bool hasPreview() const { return false; } + + /// Initialisation of operation with preliminary selection + /// \param theSelected the list of selected presentations + /// \param theHighlighted the list of highlighted presentations + /// \param theViewer a viewer to have the viewer the eye position + virtual void initSelection(ModuleBase_ISelection* theSelection, + ModuleBase_IViewer* /* theViewer*/); + + virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp); + + ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; } + + /// Activates widgets by preselection if it is accepted + virtual bool activateByPreselection(); + +signals: + void started(); /// the operation is started + void aborted(); /// the operation is aborted + void committed(); /// the operation is committed + void stopped(); /// the operation is aborted or committed + void resumed(); /// the operation is resumed + + 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. + void start(); + /// 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. + 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 + 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 + bool commit(); + + /// Alias for start/abort slots + /// Public slot. Aborts operation if false, else does nothing. + /// Provided for S/S compatibility with QAction's toggle(bool) + /// \param theState th flag to abort, if it is true, do nothing, overwise abort + void setRunning(bool theState); + + // Data model methods. + /// Stores a custom value in model. + virtual void storeCustomValue(); + + /// Slots which listen the mode widget activation + /// \param theWidget the model widget + virtual void onWidgetActivated(ModuleBase_ModelWidget* theWidget); + + 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 method called when operation stopped - committed or aborted. 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(); - void setExecStatus(const int); - void setState(const OperationState); + /// Virtual method called after operation committed (see commit() method for more description) + virtual void afterCommitOperation(); + + /// Send update message by loop + void flushUpdated(); + /// Send created message by loop + void flushCreated(); + + /// Creates an operation new feature + /// \param theFlushMessage the flag whether the create message should be flushed + /// \param theCompositeFeature the feature that must be used for adding the created object or null + /// \returns the created + virtual FeaturePtr createFeature(const bool theFlushMessage = true, + CompositeFeaturePtr theCompositeFeature = CompositeFeaturePtr()); + + /// 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; + /// Returns pointer to the root document. boost::shared_ptr document() const; -private: - int myFlags; //!< Operation flags - OperationState myState; //!< Operation state - ExecStatus myExecStatus; //!< Execution status + /// Set value to the active widget + /// \param theFeature the feature + /// \param theX the horizontal coordinate + /// \param theY the vertical coordinate + /// \return true if the point is set + virtual bool setWidgetValue(ObjectPtr theFeature, double theX, double theY); + + protected: + FeaturePtr myFeature; /// the operation feature to be handled + + /// the container to have the operation description + ModuleBase_OperationDescription* myDescription; + + /// Editing feature flag + bool myIsEditing; + + /// Modified feature flag + bool myIsModified; + + /// List of nested operations IDs + QStringList myNestedFeatures; + + /// List of pre-selected object + QList myPreSelection; - //!< Next fields could be extracted into a subclass; - QString myOperationId; - boost::shared_ptr myFeature; + /// Access to property panel + ModuleBase_IPropertyPanel* myPropertyPanel; }; #endif