X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModel%2FModel_Document.h;h=678a3f83d00466f33a40db2fb7b0aaf94ea0e277;hb=34c92803a174324249d12ae0eb45143e0d8a9c23;hp=22ad95fa0cb72e7ddb8f19a32b23c2c43cb9837b;hpb=475c7f8d39e081fb9defe50a05f18bca625993bf;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.h b/src/Model/Model_Document.h index 22ad95fa0..678a3f83d 100644 --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@ -1,4 +1,4 @@ -// File: Model_Document.cxx +// File: Model_Document.h // Created: 28 Feb 2014 // Author: Mikhail PONIKAROV @@ -7,7 +7,10 @@ #include #include + #include +#include +#include class Handle_Model_Document; @@ -24,56 +27,102 @@ class Model_Document: public ModelAPI_Document { public: - //! Creates new document with binary file format - Model_Document(); - //! Deletes all high-level data, managed this document - ~Model_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 bool Load(const char* theFileName); + MODEL_EXPORT virtual bool load(const char* theFileName); //! Saves the OCAF document to the file. //! \param theFileName full name of the file to store //! \returns true if file was stored successfully - MODEL_EXPORT bool Save(const char* theFileName); + MODEL_EXPORT virtual bool save(const char* theFileName); //! Removes document data - MODEL_EXPORT void Close(); + MODEL_EXPORT virtual void close(); //! Starts a new operation (opens a tansaction) - MODEL_EXPORT void StartOperation(); + MODEL_EXPORT virtual void startOperation(); //! Finishes the previously started operation (closes the transaction) - MODEL_EXPORT void FinishOperation(); + //! Returns true if transaction in this document is not empty and really was performed + MODEL_EXPORT virtual void finishOperation(); //! Aborts the operation - MODEL_EXPORT void AbortOperation(); + MODEL_EXPORT virtual void abortOperation(); //! Returns true if operation has been started, but not yet finished or aborted - MODEL_EXPORT bool IsOperation(); + MODEL_EXPORT virtual bool isOperation(); //! Returns true if document was modified (since creation/opening) - MODEL_EXPORT bool IsModified(); + MODEL_EXPORT virtual bool isModified(); //! Returns True if there are available Undos - MODEL_EXPORT bool CanUndo(); + MODEL_EXPORT virtual bool canUndo(); //! Undoes last operation - MODEL_EXPORT void Undo(); + MODEL_EXPORT virtual void undo(); //! Returns True if there are available Redos - MODEL_EXPORT bool CanRedo(); + MODEL_EXPORT virtual bool canRedo(); //! Redoes last operation - MODEL_EXPORT void Redo(); + 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 + MODEL_EXPORT virtual std::shared_ptr addFeature(std::string theID); + + //! Returns the existing feature by the label + //! \param theLabel base label of the feature + MODEL_EXPORT virtual std::shared_ptr feature(TDF_Label& theLabel); + + //! Adds a new sub-document by the identifier, or returns existing one if it is already exist + MODEL_EXPORT virtual std::shared_ptr subDocument(std::string theDocID); + + //! Creates an iterator of the features by the specific groups + MODEL_EXPORT virtual std::shared_ptr featuresIterator( + const std::string theGroup); + + MODEL_EXPORT virtual const std::string& id() const {return myID;} + + //! Returns the feature in the group by the index (started from zero) + MODEL_EXPORT virtual std::shared_ptr + feature(const std::string& theGroupID, const int theIndex); - //! Adds to the document the new object of the given group id - //! \param theFeature a feature object that will be connected to the document in this method - //! \param theGroupID identifier of the groups of objects (must be greater than zero) - MODEL_EXPORT virtual void AddObject(std::shared_ptr theFeature, - const int theGroupID); + ///! Returns the vector of groups already added to the document + MODEL_EXPORT virtual const std::vector& getGroups() const; + + //! Returns the index of feature in the group (zero based) + //! \retruns -1 if not found + MODEL_EXPORT virtual int featureIndex(std::shared_ptr theFeature); protected: + //! Returns (creates if needed) the group label + TDF_Label groupLabel(const std::string theGroup); + + //! Initializes feature with a unique name in this group (unique name is generated as + //! feature type + "_" + index + void setUniqueName(std::shared_ptr theFeature); + + //! Adds to the document the new feature + void addFeature(const std::shared_ptr theFeature); + + //! Synchronizes myGroups, myGroupsNames, myFeatures and mySubs list with the updated document + void synchronizeFeatures(); + + //! Creates new document with binary file format + Model_Document(const std::string theID); + + friend class Model_Application; + private: + std::string myID; ///< identifier of the document in the application Handle_TDocStd_Document myDoc; ///< OCAF document - int myTransactionsAfterSave; ///< number of transactions after the last "save" call, used for "IsModified" method + /// number of transactions after the last "save" call, used for "IsModified" method + int myTransactionsAfterSave; + /// root labels of the features groups identified by names + std::map myGroups; + std::vector myGroupsNames; ///< names of added groups to the document + /// Features managed by this document: by group name + std::map > > myFeatures; + std::set mySubs; ///< set of identifiers of sub-documents of this document + /// transaction indexes (related to myTransactionsAfterSave) which were empty in this doc + std::map myIsEmptyTr; }; #endif