Salome HOME
Add tools
[modules/shaper.git] / src / ModuleBase / ModuleBase_OperationFeature.h
index cc937e1a41017dc0a5f1cf4c7dbcee628920641a..f9d850fb8ac4e351ad63dd316b8f09e6b24aa90b 100755 (executable)
 #include <ModuleBase_Operation.h>
 #include <ModuleBase_ViewerPrs.h>
 
+#include <ModelAPI_Object.h>
 #include <ModelAPI_CompositeFeature.h>
 
 #include <QObject>
 #include <QString>
 #include <QStringList>
 
+#include <set>
+
 class ModuleBase_ModelWidget;
 class ModuleBase_ISelection;
 class ModuleBase_IViewer;
@@ -58,31 +61,15 @@ Q_OBJECT
   /// Destructor
   virtual ~ModuleBase_OperationFeature();
 
-  /**
-  * 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 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 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.
-  */
+  /// Must return True if the operation's feature is valid.
+  /// Since IOperation does not have any feature returns false.
   virtual bool isValid() const;
 
   /// Sets the operation feature
@@ -91,6 +78,11 @@ Q_OBJECT
   /// Returns True if the current operation works with the given object (feature or result)
   virtual bool hasObject(ObjectPtr theObj) const;
 
+  /// Returns true if the object is displayed when the operation was started
+  /// \param theObject a feature or result of the operation feature
+  /// \return boolean value whether the object display state was changed
+  virtual bool isDisplayedOnStart(ObjectPtr theObject);
+
   /// Initialisation of operation with preliminary selection
   /// \param theSelection an instance of Selection class
   /// \param theViewer a viewer to have the viewer the eye position
@@ -139,6 +131,12 @@ signals:
   bool commit();
 
  protected:
+  /// Displays the feature/results if it is hidden. It will be hided in stopOperation
+  virtual void startOperation();
+
+  /// Hide feature/results if they were hided on start
+  virtual void stopOperation();
+
   /// Creates an operation new feature
   /// \param theFlushMessage the flag whether the create message should be flushed
   /// \returns the created feature
@@ -151,22 +149,24 @@ signals:
    /// The operation feature to be handled
   FeaturePtr myFeature;
 
+  /// a list of hidden objects, whic are diplayed by operation start
+  /// and should be hidden by operation stop
+  std::set<ObjectPtr> myVisualizedObjects;
+
   /// Editing feature flag
   bool myIsEditing;
 
-  /// List of nested operations IDs
-  QStringList myNestedFeatures;
-
   /// List of pre-selected object 
   QList<ModuleBase_ViewerPrs> myPreSelection;
 
   /// 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;  
+  CompositeFeaturePtr myParentFeature;
 
-  /// Last current feature before editing operation
-  FeaturePtr myCurrentFeature;
+  /// Last current feature before editing operation. It is cashed when Edit operation is started
+  /// in order to restore the document current feature on commit/abort this operation.
+  FeaturePtr myPreviousCurrentFeature;
 };
 
 #endif