X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Document.h;h=340ecd4ccf9d662be95224b9c883686c01a1ac99;hb=0c10db12692c21f2ce38b9eebd27981a8eee6b41;hp=6dd9e4396c0e8b57c06c307739fdecf28cea9682;hpb=10e3997cef183d4737df5ee0ac2118cbd960b1c0;p=modules%2Fshaper.git diff --git a/src/Model/Model_Document.h b/src/Model/Model_Document.h index 6dd9e4396..340ecd4cc 100644 --- a/src/Model/Model_Document.h +++ b/src/Model/Model_Document.h @@ -7,22 +7,27 @@ #include #include -#include +#include +#include #include +#include +#include #include +#include class Handle_Model_Document; +// for TDF_Label map usage +static Standard_Integer HashCode(const TDF_Label& theLab,const Standard_Integer theUpper); +static Standard_Boolean IsEqual(const TDF_Label& theLab1,const TDF_Label& theLab2); + /**\class Model_Document * \ingroup DataModel - * \brief Document for internal data structure of any object storage. Corresponds to the SALOME study. - * Document contains all data of te SALOME Study specific to this module - * that must be written into the HDF file. + * \brief Document for internal data structure of any object storage. + * Document contains all data that must be stored/retrived in the file. * Also it provides acces to this data: open/save, transactions management etc. - * to provide access to all stored data. */ - class Model_Document: public ModelAPI_Document { public: @@ -31,104 +36,129 @@ public: //! \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); + MODEL_EXPORT virtual FeaturePtr addFeature(std::string theID); + + //! Removes the feature from the document (with result) + MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature); //! Returns the existing feature by the label //! \param theLabel base label of the feature - MODEL_EXPORT virtual std::shared_ptr feature(TDF_Label& theLabel); + MODEL_EXPORT virtual FeaturePtr 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); + //! Returns the existing object: result or feature + //! \param theLabel base label of the object + MODEL_EXPORT virtual ObjectPtr object(TDF_Label theLabel); - //! Creates an iterator of the features by the specific groups - MODEL_EXPORT virtual std::shared_ptr featuresIterator( - const std::string theGroup); + //! 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); + ///! Returns the id of hte document 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); + //! \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) + MODEL_EXPORT virtual ObjectPtr object(const std::string& theGroupID, const int theIndex); - ///! Returns the vector of groups already added to the document - MODEL_EXPORT virtual const std::vector& getGroups() const; + //! Returns the number of features in the group + MODEL_EXPORT virtual int size(const std::string& theGroupID); + + /// Creates a construction cresults + MODEL_EXPORT virtual boost::shared_ptr createConstruction( + const boost::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); + /// Creates a part results + MODEL_EXPORT virtual boost::shared_ptr createPart( + const boost::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); - //! 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); + //! Returns (creates if needed) the features label + TDF_Label featuresLabel(); //! Initializes feature with a unique name in this group (unique name is generated as //! feature type + "_" + index - void setUniqueName(std::shared_ptr theFeature); + void setUniqueName(FeaturePtr theFeature); - //! Adds to the document the new feature - void addFeature(const std::shared_ptr theFeature); + //! Synchronizes myFeatures list with the updated document + void synchronizeFeatures(const bool theMarkUpdated = false); //! Creates new document with binary file format Model_Document(const std::string theID); - friend class Model_Application; + Handle_TDocStd_Document document() {return myDoc;} -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 - std::map myGroups; ///< root labels of the features groups identified by names - std::vector myGroupsNames; ///< names of added groups to the document -}; + //! performas compactification of all nested operations into one + void compactNested(); -/// Event ID that model is updated -static const char * EVENT_FEATURE_UPDATED = "FeatureUpdated"; + //! Initializes the data fields of the feature + void initData(ObjectPtr theObj, TDF_Label theLab, const int theTag); -/// Message that feature was changed (used for Object Browser update) -class ModelAPI_FeatureUpdatedMessage : public Event_Message { - std::shared_ptr myFeature; ///< which feature is changed -public: - /// sender is not important, all information is located in the feature - ModelAPI_FeatureUpdatedMessage(std::shared_ptr theFeature); + //! 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, const int theResultIndex = 0); - /// Returns the ID of this message - static const Event_ID messageId(); - /// Returns the feature that has been updated - std::shared_ptr feature(); + friend class Model_Application; + friend class Model_PluginManager; + friend class DFBrowser; + +private: + std::string myID; ///< identifier 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; + /// number of nested transactions performed (or -1 if not nested) + int myNestedNum; + /// All features managed by this document (not only in history of OB) + /// For optimization mapped by labels + NCollection_DataMap myObjs; + + ///< set of identifiers of sub-documents of this document + std::set mySubs; + /// transaction indexes (related to myTransactionsAfterSave) which were empty in this doc + std::map myIsEmptyTr; }; #endif