Salome HOME
Merge branch 'Dev_1.1.0' of newgeom:newgeom into Dev_1.1.0
[modules/shaper.git] / src / Model / Model_Document.h
index 56490a15c337b60a825b729215da58567411df97..453422ffcf9900e7f3cf846c1dd3ece339a3f5e8 100644 (file)
@@ -11,6 +11,7 @@
 #include <ModelAPI_Document.h>
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Result.h>
+#include <ModelAPI_ResultParameter.h>
 
 #include <TDocStd_Document.hxx>
 #include <NCollection_DataMap.hxx>
@@ -40,7 +41,6 @@ class Model_Document : public ModelAPI_Document
 
   //! Loads the OCAF document from the file.
   //! \param theFileName full name of the file to load
-  //! \param theStudyID identifier of the SALOME study to associate with loaded file
   //! \returns true if file was loaded successfully
   MODEL_EXPORT virtual bool load(const char* theFileName);
 
@@ -57,12 +57,12 @@ class Model_Document : public ModelAPI_Document
   //! Starts a new operation (opens a tansaction)
   MODEL_EXPORT virtual void startOperation();
   //! Finishes the previously started operation (closes the transaction)
-  //! Returns true if transaction in this document is not empty and really was performed
-  MODEL_EXPORT virtual void finishOperation();
+  //! \returns true if transaction in this document is not empty and really was performed
+  MODEL_EXPORT virtual bool finishOperation();
   //! Aborts the operation 
   MODEL_EXPORT virtual void abortOperation();
   //! Returns true if operation has been started, but not yet finished or aborted
-  MODEL_EXPORT virtual bool isOperation();
+  MODEL_EXPORT virtual bool isOperation() const;
   //! Returns true if document was modified (since creation/opening)
   MODEL_EXPORT virtual bool isModified();
 
@@ -76,12 +76,20 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual void redo();
 
   //! Adds to the document the new feature of the given feature id
-  //! \param creates feature and puts it in the document
+  //! \param theID creates feature and puts it in the document
   MODEL_EXPORT virtual FeaturePtr addFeature(std::string theID);
 
+  //! Return a list of features, which refers to the feature
+  //! \param theFeature a feature
+  //! \param theRefs a list of reference features
+  //! \param isSendError a flag whether the error message should be send
+  MODEL_EXPORT virtual void refsToFeature(FeaturePtr theFeature,
+                                          std::set<FeaturePtr>& theRefs,
+                                          const bool isSendError = true);
+
   //! Removes the feature from the document (with result)
-  //! \param theCheck if it is false, do not check the references
-  MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature, const bool theCheck = true);
+  //! \param theFeature a removed feature
+  MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature);
 
   //! Returns the existing feature by the label
   //! \param theLabel base label of the feature
@@ -91,6 +99,14 @@ class Model_Document : public ModelAPI_Document
   //! \param theLabel base label of the object
   MODEL_EXPORT virtual ObjectPtr object(TDF_Label theLabel);
 
+  //! Returns the first found object in the group by the object name
+  //! \param theGroupID group that contains an object
+  //! \param theName name of the object to search
+  //! \returns null if such object is not found
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Object> objectByName(
+    const std::string& theGroupID, const std::string& theName);
+
+
   //! Adds a new sub-document by the identifier, or returns existing one if it is already exist
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Document> subDocument(std::string theDocID);
 
@@ -106,7 +122,6 @@ class Model_Document : public ModelAPI_Document
   //! Returns the feature in the group by the index (started from zero)
   //! \param theGroupID group that contains a feature
   //! \param theIndex zero-based index of feature in the group
-  //! \param isOperation if it is true, returns feature (not Object)
   //! \param theHidden if it is true, it counts also the features that are not in tree
   MODEL_EXPORT virtual ObjectPtr object(const std::string& theGroupID, const int theIndex,
                                         const bool theHidden = false);
@@ -128,6 +143,9 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultGroup> createGroup(
       const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
 
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultParameter> createParameter(
+      const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
+
   //! Returns a feature by result (owner of result)
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Feature>
     feature(const std::shared_ptr<ModelAPI_Result>& theResult);
@@ -156,13 +174,16 @@ class Model_Document : public ModelAPI_Document
   //! Synchronizes myFeatures list with the updated document
   //! \param theMarkUpdated causes the "update" event for all features
   //! \param theUpdateReferences causes the update of back-references
-  void synchronizeFeatures(const bool theMarkUpdated, const bool theUpdateReferences);
+  //! \param theFlush makes flush all events in the end of all modifications of this method
+  void synchronizeFeatures(const bool theMarkUpdated, const bool theUpdateReferences,
+    const bool theFlush);
   //! Synchronizes the BackReferences list in Data of Features and Results
   void synchronizeBackRefs();
 
   //! Creates new document with binary file format
   Model_Document(const std::string theID, const std::string theKind);
 
+  //! Returns the internal OCCT document of this interface
   Handle_TDocStd_Document document()
   {
     return myDoc;
@@ -190,7 +211,22 @@ class Model_Document : public ModelAPI_Document
   const std::set<std::string> subDocuments(const bool theActivatedOnly) const;
 
   //! The implementation of undo: with or without recoursive calls in the sub-documents
-  void undoInternal(const bool theWithSubs);
+  void undoInternal(const bool theWithSubs, const bool theSynchronize);
+
+  //! Stores the Id of the current operation (normally is called for the root document)
+  void operationId(const std::string& theId);
+
+  //! Returns the list of Ids of the operations that can be undoed (called for the root document)
+  std::list<std::string> undoList() const;
+
+  //! Returns the list of Ids of the operations that can be redoed (called for the root document)
+  std::list<std::string> redoList() const;
+
+  /// Internally makes document know that feature was removed or added in history after creation
+  MODEL_EXPORT virtual void addToHistory(const std::shared_ptr<ModelAPI_Object> theObject);
+
+  /// Returns true if the document is root module document
+  bool isRoot() const;
 
   friend class Model_Application;
   friend class Model_Session;
@@ -209,11 +245,19 @@ class Model_Document : public ModelAPI_Document
   /// the list is empty if not nested transaction is performed
   std::list<int> myNestedNum;
 
-  /// transaction indexes (related to myTransactionsAfterSave) and number of real transactions 
+  /// Information related to the every user-transaction
+  struct Transaction {
+    int myOCAFNum; ///< number of OCAF transactions related to each "this" transaction, may be 0
+    std::string myId; ///< user-identifier string of transaction
+    /// default constructor with default Id
+    Transaction(): myOCAFNum(0), myId("") {}
+  };
+
+  /// transaction indexes (related to myTransactionsAfterSave) and info about the real transactions
   /// in myDocument connected to this operation (may be zero for empty transaction)
-  std::list<int> myTransactions;
-  /// list of numbers of real document transactions undone (first is oldest undone)
-  std::list<int> myRedos;
+  std::list<Transaction> myTransactions;
+  /// list of info about transactions undone (first is oldest undone)
+  std::list<Transaction> myRedos;
   /// All features managed by this document (not only in history of OB)
   /// For optimization mapped by labels
   NCollection_DataMap<TDF_Label, FeaturePtr> myObjs;