+ static std::shared_ptr<ModelAPI_Session> get();
+
+ //! Loads the OCAF document from the file.
+ //! \param theFileName full name of the file to load
+ //! \returns true if file was loaded successfully
+ virtual bool load(const char* theFileName) = 0;
+
+ //! 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
+ virtual bool save(const char* theFileName, std::list<std::string>& theResults) = 0;
+
+ //! Closes all documents
+ virtual void closeAll() = 0;
+
+ //! Starts a new operation (opens a transaction)
+ //! \param theId of operation for history (optional)
+ //! \param theAttachedToNested if it is true, it means that this transaction is attached to the nested
+ //! where it is located and will be committed on the next commit with the nested
+ virtual void startOperation(
+ const std::string& theId = "", const bool theAttachedToNested = false) = 0;
+ //! Finishes the previously started operation (closes the transaction)
+ virtual void finishOperation() = 0;
+ //! Aborts the operation
+ virtual void abortOperation() = 0;
+ //! Returns true if operation has been started, but not yet finished or aborted
+ virtual bool isOperation() = 0;
+ //! Returns true if document was modified (since creation/opening)
+ virtual bool isModified() = 0;
+
+ //! Returns True if there are available Undos
+ virtual bool canUndo() = 0;
+ //! Undoes last operation
+ virtual void undo() = 0;
+ //! Returns True if there are available Redos
+ virtual bool canRedo() = 0;
+ //! Redoes last operation
+ virtual void redo() = 0;
+ //! Returns stack of performed operations (from last to first)
+ virtual std::list<std::string> undoList() = 0;
+ //! Returns stack of rolled back operations (from last rolled back to first)
+ virtual std::list<std::string> redoList() = 0;