]> SALOME platform Git repositories - modules/shaper.git/blob - src/ModelAPI/ModelAPI_Session.h
Salome HOME
522cf595260fe0a300b5ffff8d6a52c61d4349e6
[modules/shaper.git] / src / ModelAPI / ModelAPI_Session.h
1 // Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
18 //
19
20 #ifndef ModelAPI_Session_H_
21 #define ModelAPI_Session_H_
22
23 #include "ModelAPI.h"
24 #include <string>
25 #include <list>
26 #include <memory>
27
28 class ModelAPI_Feature;
29 class ModelAPI_Plugin;
30 class ModelAPI_Document;
31 class ModelAPI_ValidatorsFactory;
32
33 /**\class ModelAPI_Session
34  * \ingroup DataModel
35  * \brief Object that knows (from the initial XML file) which
36  * plugin contains which feature, loads and stores reference to loaded plugins by
37  * the feature functionality request.
38  */
39
40 class MODELAPI_EXPORT ModelAPI_Session
41 {
42  public:
43   /// Returns the real implementation (the alone instance per application) of the plugin manager
44   static std::shared_ptr<ModelAPI_Session> get();
45
46   //! Loads the OCAF document from the file.
47   //! \param theFileName full name of the file to load
48   //! \returns true if file was loaded successfully
49   virtual bool load(const char* theFileName) = 0;
50
51   //! Saves the OCAF document to the file.
52   //! \param theFileName full name of the file to store
53   //! \param theResults the result full file names that were stored by "save"
54   //! \returns true if file was stored successfully
55   virtual bool save(const char* theFileName, std::list<std::string>& theResults) = 0;
56
57   //! Closes all documents
58   virtual void closeAll() = 0;
59
60   //! Starts a new operation (opens a transaction)
61   //! \param theId of operation for history (optional)
62   //! \param theAttachedToNested if it is true,
63   //!          it means that this transaction is attached to the nested
64   //!          where it is located and will be committed on the next commit with the nested
65   virtual void startOperation(
66     const std::string& theId = "", const bool theAttachedToNested = false) = 0;
67   //! Finishes the previously started operation (closes the transaction)
68   virtual void finishOperation() = 0;
69   //! Aborts the operation
70   virtual void abortOperation() = 0;
71   //! Returns true if operation has been started, but not yet finished or aborted
72   virtual bool isOperation() = 0;
73   //! Returns true if document was modified (since creation/opening)
74   virtual bool isModified() = 0;
75
76   //! Returns True if there are available Undos
77   virtual bool canUndo() = 0;
78   //! Undoes last operation
79   virtual void undo() = 0;
80   //! Returns True if there are available Redos
81   virtual bool canRedo() = 0;
82   //! Redoes last operation
83   virtual void redo() = 0;
84   //! Returns stack of performed operations (from last to first)
85   virtual std::list<std::string> undoList() = 0;
86   //! Returns stack of rolled back operations (from last rolled back to first)
87   virtual std::list<std::string> redoList() = 0;
88
89   /// Registers the plugin that creates features.
90   /// It is obligatory for each plugin to call this function on loading to be found by
91   /// the plugin manager on call of the feature)
92   virtual void registerPlugin(ModelAPI_Plugin* thePlugin) = 0;
93
94   /// Returns the root document of the application (that may contains sub-documents)
95   virtual std::shared_ptr<ModelAPI_Document> moduleDocument() = 0;
96
97   /// Returns the document by ID. Returns null if no such document.
98   virtual std::shared_ptr<ModelAPI_Document> document(int theDocID) = 0;
99
100   /// Return true if root document has been already created
101   virtual bool hasModuleDocument() = 0;
102
103   /// Returns the current document that used for current work in the application
104   virtual std::shared_ptr<ModelAPI_Document> activeDocument() = 0;
105
106   /// Defines the current document that used for current work in the application
107   virtual void setActiveDocument(
108     std::shared_ptr<ModelAPI_Document> theDoc, bool theSendSignal = true) = 0;
109
110   /// Returns all the opened documents of the session (without postponed)
111   virtual std::list<std::shared_ptr<ModelAPI_Document> > allOpenedDocuments() = 0;
112
113   /// Returns true if document is not loaded yet
114   virtual bool isLoadByDemand(const std::string theDocID) = 0;
115
116   /// Copies the document to the new one with the given id
117   virtual std::shared_ptr<ModelAPI_Document> copy(
118     std::shared_ptr<ModelAPI_Document> theSource, const int theDestID) =0;
119
120   /// Returns the validators factory: the only one instance per application
121   virtual ModelAPI_ValidatorsFactory* validators() = 0;
122
123   /// To virtually destroy the fields of successors
124   virtual ~ModelAPI_Session()
125   {
126   }
127
128   /// Returns the global identifier of the current transaction (needed for the update algo)
129   virtual int transactionID() = 0;
130
131  protected:
132   /// Sets the session interface implementation (once per application launch)
133   static void setSession(std::shared_ptr<ModelAPI_Session> theManager);
134 };
135
136 typedef std::shared_ptr<ModelAPI_Session> SessionPtr;
137
138 #endif