Salome HOME
#2027 Sketcher Trim Feature: correction of compilation on Linux
[modules/shaper.git] / src / Model / Model_Document.h
index a3f28a20f0262a1de52b9f82549c5fcaf260b65a..639d84b0b572c84c30f2fea5de99b22699e14c92 100644 (file)
@@ -36,19 +36,24 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual const std::string& kind() const {return myKind;}
 
   //! Loads the OCAF document from the file.
-  //! \param theFileName full name of the file to load
+  //! \param theDirName directory of the loaded file
+  //! \param theFileName a name of the file to load
   //! \param theThis the common shared pointer to the document to manage with it later
   //! \returns true if file was loaded successfully
-  MODEL_EXPORT virtual bool load(const char* theFileName, DocumentPtr theThis);
+  MODEL_EXPORT virtual bool load(
+    const char* theDirName, const char* theFileName, DocumentPtr theThis);
 
   //! Saves the OCAF document to the file.
-  //! \param theFileName full name of the file to store
+  //! \param theDirName directory where the document will be saved
+  //! \param theFileName a name of the document file to store
   //! \param theResults the result full file names that were stored by "save"
   //! \returns true if file was stored successfully
-  MODEL_EXPORT virtual bool save(const char* theFileName, std::list<std::string>& theResults);
+  MODEL_EXPORT virtual bool save(
+    const char* theDirName, const char* theFileName, std::list<std::string>& theResults);
 
   //! Removes document data
-  //! \param theForever if it is false, document is just hiden (to keep possibility make it back on Undo/Redo)
+  //! \param theForever if it is false, document is just hiden
+  //!                   (to keep possibility make it back on Undo/Redo)
   MODEL_EXPORT virtual void close(const bool theForever = false);
 
   //! Starts a new operation (opens a tansaction)
@@ -56,7 +61,7 @@ class Model_Document : public ModelAPI_Document
   //! 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 bool finishOperation();
-  //! Aborts the operation 
+  //! 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() const;
@@ -86,6 +91,8 @@ class Model_Document : public ModelAPI_Document
                                           const bool isSendError = true);
 
   //! Removes the feature from the document (with result)
+  //! It is necessary to flush REDISPLAY signal manually after this method because
+  //! the method sends it, but for the performance purpose does not flush it
   //! \param theFeature a removed feature
   MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature);
 
@@ -104,14 +111,11 @@ class Model_Document : public ModelAPI_Document
   //! \returns index started from zero, or -1 if object is invisible or belongs to another document
   MODEL_EXPORT virtual const int index(std::shared_ptr<ModelAPI_Object> theObject);
 
-  //! 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);
-
   //! Internal sub-document by ID
-  MODEL_EXPORT virtual std::shared_ptr<Model_Document> subDoc(std::string theDocID);
+  MODEL_EXPORT virtual std::shared_ptr<Model_Document> subDoc(int theDocID);
 
   ///! Returns the id of the document
-  MODEL_EXPORT virtual const std::string& id() const
+  MODEL_EXPORT virtual const int id() const
   {
     return myID;
   }
@@ -135,7 +139,7 @@ class Model_Document : public ModelAPI_Document
   //! \param theCurrent the selected feature as current: blow it everythin become disabled
   //! \param theVisible use visible features only: flag is true for Object Browser functionality
   MODEL_EXPORT virtual void setCurrentFeature(std::shared_ptr<ModelAPI_Feature> theCurrent,
-    const bool theVisible, const bool theFlushUpdates = true);
+    const bool theVisible);
 
   //! Makes the current feature one feature upper
   MODEL_EXPORT virtual void setCurrentFeatureUp();
@@ -146,10 +150,13 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Feature> internalFeature(const int theIndex);
   //! Performs synchronization of transactions with the module document:
   //! If some document is not active (by undo of activation) but in memory,
-  //! on activation the transactions must be synchronised because all redos performed 
+  //! on activation the transactions must be synchronised because all redos performed
   //! wihtout this participation
   MODEL_EXPORT virtual void synchronizeTransactions();
 
+  //! Returns feature by the id of the feature (produced by the Data "featureId" method)
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Feature> featureById(const int theId);
+
 
   /// Creates a construction cresults
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultConstruction> createConstruction(
@@ -164,10 +171,13 @@ class Model_Document : public ModelAPI_Document
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultPart> copyPart(
     const std::shared_ptr<ModelAPI_ResultPart>& theOrigin,
     const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
-  /// Creates a group results
+  /// Creates a group result
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultGroup> createGroup(
       const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
-
+  /// Creates a field result
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultField> createField(
+      const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
+  /// Creates a parameter result
   MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultParameter> createParameter(
       const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
 
@@ -181,6 +191,8 @@ class Model_Document : public ModelAPI_Document
 
   //! Registers the name of the shape for the topological naming needs
   void addNamingName(const TDF_Label theLabel, std::string theName);
+  //! Updates the name of some object
+  void changeNamingName(std::string theOldName, const std::string theNewName);
   //! Returns the label, keeper of the name  for the topological naming needs
   TDF_Label findNamingName(std::string theName);
   //! Returns the result by name of the result (names of results must be unique, used for naming
@@ -205,12 +217,20 @@ class Model_Document : public ModelAPI_Document
   /// \returns null if there is no features
   FeaturePtr lastFeature();
 
+  /// Returns the feature that produced the given face of the given result.
+  MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Feature> producedByFeature(
+    std::shared_ptr<ModelAPI_Result> theResult,
+    const std::shared_ptr<GeomAPI_Shape>& theShape);
+
+  /// Returns true if theLater is in history of features creation later than theCurrent
+  MODEL_EXPORT virtual bool isLater(FeaturePtr theLater, FeaturePtr theCurrent) const;
+
  protected:
   //! Returns (creates if needed) the general label
   TDF_Label generalLabel() const;
 
   //! Creates new document with binary file format
-  Model_Document(const std::string theID, const std::string theKind);
+  Model_Document(const int theID, const std::string theKind);
 
   //! Returns the internal OCCT document of this interface
   Handle_TDocStd_Document document()
@@ -222,8 +242,8 @@ class Model_Document : public ModelAPI_Document
   //! \returns true if resulting transaction is not empty and can be undoed
   void compactNested();
 
-  //! Returns all sub documents
-  const std::set<std::string> subDocuments(const bool theActivatedOnly) const;
+  //! Returns all loaded sub documents
+  const std::set<int> subDocuments() const;
 
   //! The implementation of undo: with or without recoursive calls in the sub-documents
   void undoInternal(const bool theWithSubs, const bool theSynchronize);
@@ -256,21 +276,37 @@ class Model_Document : public ModelAPI_Document
   //! Returns true if this document is currently active
   virtual bool isActive() const;
 
-  //! Returns the selection attribute that is used for calculation of selection externally from the document
+  //! Returns the selection attribute that is used
+  //! for calculation of selection externally from the document
   std::shared_ptr<ModelAPI_AttributeSelectionList> selectionInPartFeature();
 
+  /// Stores in the document boolean flags: states of the nodes in the object browser.
+  /// Normally is called outside of the transaction, just before "save".
+  virtual void storeNodesState(const std::list<bool>& theStates);
+
+  /// Returns the stored nodes states. Normally it is calles just after "open".
+  /// Appends the values to theStates list.
+  virtual void restoreNodesState(std::list<bool>& theStates) const;
+
+  /// Label that constains structures for selection of constructions of another document
+  TDF_Label extConstructionsLabel() const;
+
   friend class Model_Application;
   friend class Model_Session;
   friend class Model_Update;
   friend class Model_AttributeReference;
   friend class Model_AttributeRefAttr;
   friend class Model_AttributeRefList;
+  friend class Model_AttributeRefAttrList;
+  friend class Model_AttributeSelection;
   friend class Model_ResultPart;
   friend class Model_ResultCompSolid;
+  friend class Model_ResultConstruction;
+  friend class Model_SelectionNaming;
   friend class DFBrowser;
 
  private:
-  std::string myID;  ///< identifier of the document in the application
+  int myID;  ///< identifier of the document in the application
   std::string myKind;  ///< kind of the document in the application
   Handle_TDocStd_Document myDoc;  ///< OCAF document