#include <ModelAPI_Document.h>
#include <ModelAPI_Feature.h>
#include <ModelAPI_Result.h>
+#include <ModelAPI_ResultParameter.h>
#include <TDocStd_Document.hxx>
#include <NCollection_DataMap.hxx>
//! 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();
+ MODEL_EXPORT virtual bool isOperation() const;
//! Returns true if document was modified (since creation/opening)
MODEL_EXPORT virtual bool isModified();
//! \param theID creates feature and puts it in the document
MODEL_EXPORT virtual FeaturePtr addFeature(std::string theID);
+ //! Return a list of features, which refers to the feature
+ //! \param theFeature a feature
+ //! \param theRefs a list of reference features
+ //! \param isSendError a flag whether the error message should be send
+ MODEL_EXPORT virtual void refsToFeature(FeaturePtr theFeature,
+ std::set<FeaturePtr>& theRefs,
+ const bool isSendError = true);
+
//! Removes the feature from the document (with result)
- //! \param theFeature the feature to be removed
- //! \param theCheck if it is false, do not check the references
- MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature, const bool theCheck = true);
+ //! \param theFeature a removed feature
+ MODEL_EXPORT virtual void removeFeature(FeaturePtr theFeature);
//! Returns the existing feature by the label
//! \param theLabel base label of the feature
//! \param theLabel base label of the object
MODEL_EXPORT virtual ObjectPtr object(TDF_Label theLabel);
+ //! Returns the first found object in the group by the object name
+ //! \param theGroupID group that contains an object
+ //! \param theName name of the object to search
+ //! \returns null if such object is not found
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Object> objectByName(
+ const std::string& theGroupID, const std::string& theName);
+
+
//! 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);
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultGroup> createGroup(
const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_ResultParameter> createParameter(
+ const std::shared_ptr<ModelAPI_Data>& theFeatureData, const int theIndex = 0);
+
//! Returns a feature by result (owner of result)
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_Feature>
feature(const std::shared_ptr<ModelAPI_Result>& theResult);
//! Synchronizes myFeatures list with the updated document
//! \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);
+ //! \param theFlush makes flush all events in the end of all modifications of this method
+ void synchronizeFeatures(const bool theMarkUpdated, const bool theUpdateReferences,
+ const bool theFlush);
//! Synchronizes the BackReferences list in Data of Features and Results
void synchronizeBackRefs();
//! The implementation of undo: with or without recoursive calls in the sub-documents
void undoInternal(const bool theWithSubs, const bool theSynchronize);
+ //! Stores the Id of the current operation (normally is called for the root document)
+ void operationId(const std::string& theId);
+
+ //! Returns the list of Ids of the operations that can be undoed (called for the root document)
+ std::list<std::string> undoList() const;
+
+ //! Returns the list of Ids of the operations that can be redoed (called for the root document)
+ std::list<std::string> redoList() const;
+
+ /// Internally makes document know that feature was removed or added in history after creation
+ MODEL_EXPORT virtual void addToHistory(const std::shared_ptr<ModelAPI_Object> theObject);
+
+ /// Returns true if the document is root module document
+ bool isRoot() const;
+
friend class Model_Application;
friend class Model_Session;
friend class Model_Update;
/// the list is empty if not nested transaction is performed
std::list<int> myNestedNum;
- /// transaction indexes (related to myTransactionsAfterSave) and number of real transactions
+ /// Information related to the every user-transaction
+ struct Transaction {
+ int myOCAFNum; ///< number of OCAF transactions related to each "this" transaction, may be 0
+ std::string myId; ///< user-identifier string of transaction
+ /// default constructor with default Id
+ Transaction(): myOCAFNum(0), myId("") {}
+ };
+
+ /// transaction indexes (related to myTransactionsAfterSave) and info about the real transactions
/// in myDocument connected to this operation (may be zero for empty transaction)
- std::list<int> myTransactions;
- /// list of numbers of real document transactions undone (first is oldest undone)
- std::list<int> myRedos;
+ std::list<Transaction> myTransactions;
+ /// list of info about transactions undone (first is oldest undone)
+ std::list<Transaction> myRedos;
/// All features managed by this document (not only in history of OB)
/// For optimization mapped by labels
NCollection_DataMap<TDF_Label, FeaturePtr> myObjs;