X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModuleBase%2FModuleBase_Operation.h;h=208e3503581df161ca6895fc7981cc60a8da9818;hb=efaa3e56c591f0b6a0e018cc91027ff5f82b2438;hp=17be4cba4286a6e6e63ea45c6ed6e3ec622c681a;hpb=cc532e129fefef094f3d3a082aaacfbf494d0c95;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.h b/src/ModuleBase/ModuleBase_Operation.h index 17be4cba4..208e35035 100644 --- a/src/ModuleBase/ModuleBase_Operation.h +++ b/src/ModuleBase/ModuleBase_Operation.h @@ -9,17 +9,21 @@ #define ModuleBase_Operation_H #include -#include +#include -#include +#include +#include #include #include +#include -#include - -class ModelAPI_Document; class ModuleBase_ModelWidget; +class ModuleBase_OperationDescription; +class ModuleBase_IPropertyPanel; +class ModuleBase_ISelection; +class ModuleBase_IViewer; +class ModuleBase_WidgetValueFeature; class QKeyEvent; @@ -39,7 +43,7 @@ class QKeyEvent; * - virtual void commitOperation(); */ -class MODULEBASE_EXPORT ModuleBase_Operation : public ModuleBase_IOperation +class MODULEBASE_EXPORT ModuleBase_Operation : public QObject { Q_OBJECT @@ -51,13 +55,48 @@ Q_OBJECT /// Destructor virtual ~ModuleBase_Operation(); + /// Returns the operation description + /// /returns the instance of the description class + ModuleBase_OperationDescription* getDescription() const { return myDescription; } + + /** + * 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; + + /// 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); + + /// Returns True if data of its feature was modified during operation + virtual bool isModified() const { return myIsModified; } + + /// Returns True id the current operation is launched in editing mode + bool isEditOperation() const { return myIsEditing; } + + /// Returns list of nested features + QStringList nestedFeatures() const { return myNestedFeatures; } + + /// Sets list of nested features + void setNestedFeatures(const QStringList& theList) { myNestedFeatures = theList; } + + // 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. @@ -65,67 +104,176 @@ Q_OBJECT /// \return enabled state virtual bool isNestedOperationsEnabled() const; - // Data model methods. - /// Stores a custom value in model. - void storeCustomValue(); - /// Sets the operation feature - void setEditingFeature(FeaturePtr theFeature); + void setFeature(FeaturePtr theFeature); /// Returns True if the current operation works with the given object (feature or result) virtual bool hasObject(ObjectPtr theObj) const; - virtual void keyReleased(const int theKey) {}; - - virtual void activateNextToCurrentWidget() {}; + //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; } + //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(); + + /// If the operation works with feature which is sub-feature of another one + /// then this variable has to be initialised by parent feature + /// before operation feature creating + void setParentFeature(CompositeFeaturePtr theParent) { myParentFeature = theParent; } + CompositeFeaturePtr parentFeature() const { return myParentFeature; } + +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 + void postponed(); /// the operation is postponed 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(); + + /// Deactivates current operation which can be resumed later. + 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. + 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); - -signals: - /// Signals about the activating of the next widget - /// \param theWidget the previous active widget - void activateNextWidget(ModuleBase_ModelWidget* theWidget); + //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 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 void abortOperation() {} + /// Virtual method called when operation committed (see commit() method for more description) - virtual void commitOperation(); + virtual void commitOperation() {} + /// Virtual method called after operation committed (see commit() method for more description) - virtual void afterCommitOperation(); + virtual void afterCommitOperation() {} /// Send update message by loop - void flushUpdated(); + //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 - /// \returns the created feature + /// \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); - protected: - /// Sets the operation feature - void setFeature(FeaturePtr theFeature); - /// 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. + std::shared_ptr document() const; + + /// 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); + + /// Return a widget value point by the selection and the viewer position + /// The default realization returns false + /// \param thePrs the presentation + /// \param theViewer a viewer to have the viewer the eye position + /// \param theX the horizontal coordinate + /// \param theY the vertical coordinate + /// \return true if the point exits in the selection + virtual bool getViewerPoint(ModuleBase_ViewerPrs thePrs, + ModuleBase_IViewer* theViewer, + double& theX, double& theY); + + // Removes the preselection information and clears the map of preselection + void clearPreselection(); + 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; + + /// Access to property panel + ModuleBase_IPropertyPanel* myPropertyPanel; + + /// If the operation works with feature which is sub-feature of another one + /// then this variable has to be initialised by parent feature + /// before operation feature creating + CompositeFeaturePtr myParentFeature; + }; #endif