X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FModel_Document.h;h=db04509ba5e941d98f11140deda59744ad2577f8;hb=07bc7fd1c59cbe7a2d916654edf77409670f215b;hp=240082532a2460065439f76d3436a7079d3d1250;hpb=8dc74f82810d5f597b78633b457efb0ef4f89f9f;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.h b/src/Model/Model_Document.h index 240082532..db04509ba 100644 --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + // File: Model_Document.h // Created: 28 Feb 2014 // Author: Mikhail PONIKAROV @@ -31,6 +33,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 @@ -40,11 +46,13 @@ class Model_Document : public ModelAPI_Document //! Saves the OCAF document to the file. //! \param theFileName full name of the 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); + MODEL_EXPORT virtual bool save(const char* theFileName, std::list& theResults); //! Removes document data - MODEL_EXPORT virtual void close(); + //! \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) MODEL_EXPORT virtual void startOperation(); @@ -72,7 +80,8 @@ class Model_Document : public ModelAPI_Document MODEL_EXPORT virtual FeaturePtr addFeature(std::string theID); //! Removes the feature from the document (with result) - MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature); + //! \param theCheck if it is false, do not check the references + MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature, const bool theCheck = true); //! Returns the existing feature by the label //! \param theLabel base label of the feature @@ -83,7 +92,10 @@ class Model_Document : public ModelAPI_Document MODEL_EXPORT virtual ObjectPtr object(TDF_Label theLabel); //! Adds a new sub-document by the identifier, or returns existing one if it is already exist - MODEL_EXPORT virtual boost::shared_ptr subDocument(std::string theDocID); + MODEL_EXPORT virtual std::shared_ptr subDocument(std::string theDocID); + + //! Internal sub-document by ID + MODEL_EXPORT virtual std::shared_ptr subDoc(std::string theDocID); ///! Returns the id of hte document MODEL_EXPORT virtual const std::string& id() const @@ -104,18 +116,25 @@ class Model_Document : public ModelAPI_Document MODEL_EXPORT virtual int size(const std::string& theGroupID, const bool theHidden = false); /// Creates a construction cresults - MODEL_EXPORT virtual boost::shared_ptr createConstruction( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + MODEL_EXPORT virtual std::shared_ptr createConstruction( + const std::shared_ptr& theFeatureData, const int theIndex = 0); /// Creates a body results - MODEL_EXPORT virtual boost::shared_ptr createBody( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + MODEL_EXPORT virtual std::shared_ptr createBody( + const std::shared_ptr& theFeatureData, const int theIndex = 0); /// Creates a part results - MODEL_EXPORT virtual boost::shared_ptr createPart( - const boost::shared_ptr& theFeatureData, const int theIndex = 0); + MODEL_EXPORT virtual std::shared_ptr createPart( + const std::shared_ptr& theFeatureData, const int theIndex = 0); + /// Creates a group results + MODEL_EXPORT virtual std::shared_ptr createGroup( + const std::shared_ptr& theFeatureData, const int theIndex = 0); //! Returns a feature by result (owner of result) - MODEL_EXPORT virtual boost::shared_ptr - feature(const boost::shared_ptr& theResult); + MODEL_EXPORT virtual std::shared_ptr + feature(const std::shared_ptr& theResult); + + ///! Returns true if parametric updater need to execute feature on recomputartion + ///! On abort, undo or redo it is not necessary: results in document are updated automatically + bool executeFeatures() {return myExecuteFeatures;} protected: @@ -127,36 +146,55 @@ class Model_Document : public ModelAPI_Document void setUniqueName(FeaturePtr theFeature); //! Synchronizes myFeatures list with the updated document - void synchronizeFeatures(const bool theMarkUpdated = false); + //! \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); + //! 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); + 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); //! Allows to store the result in the data tree of the document (attaches 'data' of result to tree) - MODEL_EXPORT virtual void storeResult(boost::shared_ptr theFeatureData, - boost::shared_ptr theResult, + MODEL_EXPORT virtual void storeResult(std::shared_ptr theFeatureData, + std::shared_ptr theResult, const int theResultIndex = 0); + //! returns the label of result by index; creates this label if it was not created before + TDF_Label resultLabel(const std::shared_ptr& theFeatureData, const int theResultIndex); + + //! Updates the results list of the feature basing on the current data tree + void updateResults(FeaturePtr theFeature); + + //! Returns all sub documents + const std::set& subDocuments() const {return mySubs;} + friend class Model_Application; - friend class Model_PluginManager; + friend class Model_Session; + friend class Model_Update; + 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; + /// counter of transactions + int myTransactionsCounter; + /// counter value of transaction on the last "save" call, used for "IsModified" method + int myTransactionSave; /// number of nested transactions performed (or -1 if not nested) int myNestedNum; /// All features managed by this document (not only in history of OB) @@ -167,6 +205,8 @@ class Model_Document : public ModelAPI_Document std::set mySubs; /// transaction indexes (related to myTransactionsAfterSave) which were empty in this doc std::map myIsEmptyTr; + /// If it is true, features are not executed on update (on abort, undo, redo) + bool myExecuteFeatures; }; #endif