Salome HOME
Merge branch 'master' of newgeom:newgeom.git
[modules/shaper.git] / src / Model / Model_Document.h
index 7b407252052d97afed27e17a523034b7a5fe7e50..443d00c1036626f95e0fb2cf1437ac6b8ff84bab 100644 (file)
@@ -31,6 +31,10 @@ static Standard_Boolean IsEqual(const TDF_Label& theLab1, const TDF_Label& theLa
 class Model_Document : public ModelAPI_Document
 {
  public:
+  //! Returns the kind of the document: "PartSet", "Part", or something else.
+  //! This kind is used for feature buttons enable/disable depending on active document
+  //! (it uses workbench "document" identifier in XML configuration file for this)
+  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
@@ -86,6 +90,9 @@ class Model_Document : public ModelAPI_Document
   //! Adds a new sub-document by the identifier, or returns existing one if it is already exist
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_Document> subDocument(std::string theDocID);
 
+  //! Internal sub-document by ID
+  MODEL_EXPORT virtual boost::shared_ptr<Model_Document> subDoc(std::string theDocID);
+
   ///! Returns the id of hte document
   MODEL_EXPORT virtual const std::string& id() const
   {
@@ -135,15 +142,16 @@ class Model_Document : public ModelAPI_Document
   void synchronizeFeatures(const bool theMarkUpdated = false);
 
   //! Creates new document with binary file format
-  Model_Document(const std::string theID);
+  Model_Document(const std::string theID, const std::string theKind);
 
   Handle_TDocStd_Document document()
   {
     return myDoc;
   }
 
-  //! performas compactification of all nested operations into one
-  void compactNested();
+  //! performs compactification of all nested operations into one
+  //! \returns true if resulting transaction is not empty and can be undoed
+  bool compactNested();
 
   //! Initializes the data fields of the feature
   void initData(ObjectPtr theObj, TDF_Label theLab, const int theTag);
@@ -159,12 +167,22 @@ class Model_Document : public ModelAPI_Document
   //! Updates the results list of the feature basing on the current data tree
   void updateResults(FeaturePtr theFeature);
 
+  //! Stores information that there is a reference to this object
+  void objectIsReferenced(const ObjectPtr& theObject);
+  //! Removes information that there is a reference to this object
+  void objectIsNotReferenced(const ObjectPtr& theObject);
+
+  //! Returns all sub documents
+  const std::set<std::string>& subDocuments() const {return mySubs;}
+
   friend class Model_Application;
-  friend class Model_PluginManager;
+  friend class Model_Session;
+  friend class Model_AttributeReference;
   friend class DFBrowser;
 
  private:
   std::string myID;  ///< identifier of the document in the application
+  std::string myKind;  ///< kind of the document in the application
   Handle_TDocStd_Document myDoc;  ///< OCAF document
   /// number of transactions after the last "save" call, used for "IsModified" method
   int myTransactionsAfterSave;
@@ -173,6 +191,8 @@ class Model_Document : public ModelAPI_Document
   /// All features managed by this document (not only in history of OB)
   /// For optimization mapped by labels
   NCollection_DataMap<TDF_Label, FeaturePtr> myObjs;
+  /// Results that are referenced and must be concealed for object browser
+  std::set<ResultPtr> myConcealedResults;
 
   ///< set of identifiers of sub-documents of this document
   std::set<std::string> mySubs;