0024002: Overall code and build procedure refactoring -- automatic
[occt.git] / src / TDocStd / TDocStd_Document.hxx
CommitLineData
42cf5bc1 1// Created on: 1999-04-07
2// Created by: Denis PASCAL
3// Copyright (c) 1999 Matra Datavision
4// Copyright (c) 1999-2014 OPEN CASCADE SAS
5//
6// This file is part of Open CASCADE Technology software library.
7//
8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
13//
14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
16
17#ifndef _TDocStd_Document_HeaderFile
18#define _TDocStd_Document_HeaderFile
19
20#include <Standard.hxx>
21#include <Standard_Type.hxx>
22
23#include <TCollection_ExtendedString.hxx>
24#include <Standard_Integer.hxx>
25#include <TDF_Transaction.hxx>
26#include <TDF_DeltaList.hxx>
27#include <Standard_Boolean.hxx>
28#include <CDM_Document.hxx>
29#include <TDF_LabelMap.hxx>
30#include <Standard_Address.hxx>
31class TDF_Data;
32class TDF_Delta;
33class TDF_Label;
34class TCollection_ExtendedString;
35class TCollection_AsciiString;
36class CDM_Document;
37class TDocStd_CompoundDelta;
38
39
40class TDocStd_Document;
41DEFINE_STANDARD_HANDLE(TDocStd_Document, CDM_Document)
42
43//! The contents of a TDocStd_Application, a
44//! document is a container for a data framework
45//! composed of labels and attributes. As such,
46//! TDocStd_Document is the entry point into the data framework.
47//! To gain access to the data, you create a document as follows:
48//! Handle(TDocStd_Document) MyDF = new TDocStd_Document
49//! The document also allows you to manage:
50//! - modifications, providing Undo and Redo functions.
51//! - command transactions.
52//! Warning: The only data saved is the framework (TDF_Data)
53class TDocStd_Document : public CDM_Document
54{
55
56public:
57
58
59 //! Will Abort any execution, clear fields
60 //! returns the document which contains <L>. raises an
61 //! exception if the document is not found.
62 Standard_EXPORT static Handle(TDocStd_Document) Get (const TDF_Label& L);
63
64 //! Constructs a document object defined by the
65 //! string astorageformat.
66 Standard_EXPORT TDocStd_Document(const TCollection_ExtendedString& astorageformat);
67
68 //! the document is saved in a file.
69 Standard_EXPORT Standard_Boolean IsSaved() const;
70
71 //! returns True if document differs from the state of last saving.
72 //! this method have to be called only wroking in the transaction mode
73 Standard_Boolean IsChanged() const;
74
75 //! This method have to be called to show document that it has been saved
76 void SetSaved();
77
78 //! Say to document what it is not saved.
79 //! Use value, returned earlier by GetSavedTime().
80 void SetSavedTime (const Standard_Integer theTime);
81
82 //! Returns value of <mySavedTime> to be used later in SetSavedTime()
83 Standard_Integer GetSavedTime() const;
84
85 //! raise if <me> is not saved.
86 Standard_EXPORT TCollection_ExtendedString GetName() const;
87
88 //! returns the OS path of the file, in wich one <me> is
89 //! saved. Raise an exception if <me> is not saved.
90 Standard_EXPORT TCollection_ExtendedString GetPath() const;
91
92 Standard_EXPORT void SetData (const Handle(TDF_Data)& data);
93
94 Standard_EXPORT Handle(TDF_Data) GetData() const;
95
96 //! Returns the main label in this data framework.
97 //! By definition, this is the label with the entry 0:1.
98 Standard_EXPORT TDF_Label Main() const;
99
100 //! Returns True if the main label has no attributes
101 Standard_EXPORT Standard_Boolean IsEmpty() const;
102
103 //! Returns False if the document has been modified
104 //! but not recomputed.
105 Standard_EXPORT Standard_Boolean IsValid() const;
106
107 //! Notify the label as modified, the Document becomes UnValid.
108 //! returns True if <L> has been notified as modified.
109 Standard_EXPORT void SetModified (const TDF_Label& L);
110
111 //! Remove all modifications. After this call The document
112 //! becomesagain Valid.
113 Standard_EXPORT void PurgeModified();
114
115 //! Returns the labels which have been modified in
116 //! this document.
117 Standard_EXPORT const TDF_LabelMap& GetModified() const;
118
119 //! Launches a new command. This command may be undone.
120 Standard_EXPORT void NewCommand();
121
122 //! returns True if a Command transaction is open in the curret .
123 Standard_EXPORT Standard_Boolean HasOpenCommand() const;
124
125 //! Opens a new command transaction in this document.
126 //! You can use HasOpenCommand to see whether a command is already open.
127 //! Exceptions
128 //! Standard_DomainError if a command is already open in this document.
129 Standard_EXPORT void OpenCommand();
130
131 //! Commits documents transactions and fills the
132 //! transaction manager with documents that have
133 //! been changed during the transaction.
134 //! If no command transaction is open, nothing is done.
135 //! Returns True if a new delta has been added to myUndos.
136 Standard_EXPORT Standard_Boolean CommitCommand();
137
138 //! Abort the Command transaction. Does nothing If there is
139 //! no Command transaction open.
140 Standard_EXPORT void AbortCommand();
141
142 //! The current limit on the number of undos
143 Standard_EXPORT Standard_Integer GetUndoLimit() const;
144
145 //! Set the limit on the number of Undo Delta stored 0
146 //! will disable Undo on the document A negative value
147 //! means no limit. Note that by default Undo is disabled.
148 //! Enabling it will take effect with the next call to
149 //! NewCommand. Of course this limit is the same for Redo
150 Standard_EXPORT void SetUndoLimit (const Standard_Integer L);
151
152 //! Remove all stored Undos and Redos
153 Standard_EXPORT void ClearUndos();
154
155 //! Remove all stored Redos
156 Standard_EXPORT void ClearRedos();
157
158 //! Returns the number of undos stored in this
159 //! document. If this figure is greater than 0, the method Undo
160 //! can be used.
161 Standard_EXPORT Standard_Integer GetAvailableUndos() const;
162
163 //! Will UNDO one step, returns False if no undo was
164 //! done (Undos == 0).
165 //! Otherwise, true is returned and one step in the
166 //! list of undoes is undone.
167 Standard_EXPORT Standard_Boolean Undo();
168
169 //! Returns the number of redos stored in this
170 //! document. If this figure is greater than 0, the method Redo
171 //! can be used.
172 Standard_EXPORT Standard_Integer GetAvailableRedos() const;
173
174 //! Will REDO one step, returns False if no redo was
175 //! done (Redos == 0).
176 //! Otherwise, true is returned, and one step in the list of redoes is done again.
177 Standard_EXPORT Standard_Boolean Redo();
178
179 Standard_EXPORT const TDF_DeltaList& GetUndos() const;
180
181 Standard_EXPORT const TDF_DeltaList& GetRedos() const;
182
183 //! Removes the first undo in the list of document undos.
184 //! It is used in the application when the undo limit is exceed.
185 Standard_EXPORT void RemoveFirstUndo();
186
187 //! Initializes the procedure of delta compaction
188 //! Returns false if there is no delta to compact
189 //! Marks the last delta as a "from" delta
190 Standard_EXPORT Standard_Boolean InitDeltaCompaction();
191
192 //! Performs the procedure of delta compaction
193 //! Makes all deltas starting from "from" delta
194 //! till the last one to be one delta.
195 Standard_EXPORT Standard_Boolean PerformDeltaCompaction();
196
197 //! Set modifications on labels impacted by external
198 //! references to the entry. The document becomes invalid
199 //! and must be recomputed.
200 Standard_EXPORT void UpdateReferences (const TCollection_AsciiString& aDocEntry);
201
202 //! Recompute if the document was not valid and propagate
203 //! the reccorded modification.
204 Standard_EXPORT void Recompute();
205
206 //! This method Update will be called
207 //! to signal the end of the modified references list.
208 //! The document should be recomputed and
209 //! UpdateFromDocuments should be called. Update should
210 //! returns True in case of success, false otherwise. In
211 //! case of Failure, additional information can be given in
212 //! ErrorString.
213 //! Update the document by propagation
214 //! ==================================
215 //! Update the document from internal stored
216 //! modifications. If you want to undoing this
217 //! operation, please call NewCommand before.
218 //! to change format (advanced programming)
219 //! ================
220 Standard_EXPORT virtual void Update (const Handle(CDM_Document)& aToDocument, const Standard_Integer aReferenceIdentifier, const Standard_Address aModifContext) Standard_OVERRIDE;
221
222 Standard_EXPORT virtual TCollection_ExtendedString StorageFormat() const;
223
224 //! methods for the nested transaction mode
225 Standard_EXPORT virtual void ChangeStorageFormat (const TCollection_ExtendedString& newStorageFormat);
226
227 //! Sets nested transaction mode if isAllowed == Standard_True
228 Standard_EXPORT void SetNestedTransactionMode (const Standard_Boolean isAllowed = Standard_True);
229
230 //! Returns Standard_True if mode is set
231 Standard_Boolean IsNestedTransactionMode() const;
232
233 //! if theTransactionOnly is True changes is denied outside transactions
234 void SetModificationMode (const Standard_Boolean theTransactionOnly);
235
236 //! returns True if changes allowed only inside transactions
237 Standard_Boolean ModificationMode() const;
238
239 //! Prepares document for closing
240 Standard_EXPORT virtual void BeforeClose();
241
242
243
244
245 DEFINE_STANDARD_RTTI(TDocStd_Document,CDM_Document)
246
247protected:
248
249
250 //! Returns Standard_True done
251 Standard_EXPORT virtual Standard_Boolean CommitTransaction();
252
253 Standard_EXPORT virtual void AbortTransaction();
254
255 //! methods for protection of changes outside transactions
256 Standard_EXPORT virtual void OpenTransaction();
257
258 TCollection_ExtendedString myStorageFormat;
259 TDF_DeltaList myUndos;
260 TDF_DeltaList myRedos;
261
262
263private:
264
265
266 //! Appends delta to the first delta in the myUndoFILO
267 //! private methods
268 //! ===============
269 Standard_EXPORT static void AppendDeltaToTheFirst (const Handle(TDocStd_CompoundDelta)& theDelta1, const Handle(TDF_Delta)& theDelta2);
270
271 Handle(TDF_Data) myData;
272 Standard_Integer myUndoLimit;
273 TDF_Transaction myUndoTransaction;
274 Handle(TDF_Delta) myFromUndo;
275 Handle(TDF_Delta) myFromRedo;
276 Standard_Integer mySaveTime;
277 Standard_Boolean myIsNestedTransactionMode;
278 TDF_DeltaList myUndoFILO;
279 Standard_Boolean myOnlyTransactionModification;
280
281
282};
283
284
285#include <TDocStd_Document.lxx>
286
287
288
289
290
291#endif // _TDocStd_Document_HeaderFile