1 // Created on: 1998-02-23
2 // Created by: Christian CAILLET
3 // Copyright (c) 1998-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #ifndef _IFSelect_EditForm_HeaderFile
18 #define _IFSelect_EditForm_HeaderFile
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
23 #include <Standard_Boolean.hxx>
24 #include <TCollection_AsciiString.hxx>
25 #include <TColStd_Array1OfInteger.hxx>
26 #include <TColStd_Array1OfTransient.hxx>
27 #include <Standard_Integer.hxx>
28 #include <MMgt_TShared.hxx>
29 #include <Standard_CString.hxx>
30 #include <TColStd_SequenceOfInteger.hxx>
31 #include <TColStd_HSequenceOfHAsciiString.hxx>
32 class IFSelect_Editor;
33 class Standard_Transient;
34 class Interface_InterfaceModel;
35 class IFSelect_ListEditor;
36 class TCollection_HAsciiString;
37 class Message_Messenger;
40 class IFSelect_EditForm;
41 DEFINE_STANDARD_HANDLE(IFSelect_EditForm, MMgt_TShared)
43 //! An EditForm is the way to apply an Editor on an Entity or on
45 //! It gives read-only or read-write access, with or without undo
47 //! It can be complete (all the values of the Editor are present)
48 //! or partial (a sub-list of these value are present)
49 //! Anyway, all references to Number (argument <num>) refer to
50 //! Number of Value for the Editor
51 //! While references to Rank are for rank in the EditForm, which
52 //! may differ if it is not Complete
53 //! Two methods give the correspondance between this Number and
54 //! the Rank in the EditForm : RankFromNumber and NumberFromRank
55 class IFSelect_EditForm : public MMgt_TShared
61 //! Creates a complete EditForm from an Editor
62 //! A specific Label can be given
63 Standard_EXPORT IFSelect_EditForm(const Handle(IFSelect_Editor)& editor, const Standard_Boolean readonly, const Standard_Boolean undoable, const Standard_CString label = "");
65 //! Creates an extracted EditForm from an Editor, limited to
66 //! the values identified in <nums>
67 //! A specific Label can be given
68 Standard_EXPORT IFSelect_EditForm(const Handle(IFSelect_Editor)& editor, const TColStd_SequenceOfInteger& nums, const Standard_Boolean readonly, const Standard_Boolean undoable, const Standard_CString label = "");
70 //! Returns and may change the keep status on modif
71 //! It starts as False
72 //! If it is True, Apply does not clear modification status
73 //! and the EditForm can be loaded again, modified value remain
74 //! and may be applied again
75 //! Remark that ApplyData does not clear the modification status,
76 //! a call to ClearEdit does
77 Standard_EXPORT Standard_Boolean& EditKeepStatus();
79 Standard_EXPORT Standard_CString Label() const;
81 //! Tells if the EditForm is loaded now
82 Standard_EXPORT Standard_Boolean IsLoaded() const;
84 Standard_EXPORT void ClearData();
86 Standard_EXPORT void SetData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
88 Standard_EXPORT void SetEntity (const Handle(Standard_Transient)& ent);
90 Standard_EXPORT void SetModel (const Handle(Interface_InterfaceModel)& model);
92 Standard_EXPORT Handle(Standard_Transient) Entity() const;
94 Standard_EXPORT Handle(Interface_InterfaceModel) Model() const;
96 Standard_EXPORT Handle(IFSelect_Editor) Editor() const;
98 //! Tells if an EditForm is complete or is an extract from Editor
99 Standard_EXPORT Standard_Boolean IsComplete() const;
101 //! Returns the count of values
102 //! <editable> True : count of editable values, i.e.
103 //! For a complete EditForm, it is given by the Editor
104 //! Else, it is the length of the extraction map
105 //! <editable> False : all the values from the Editor
106 Standard_EXPORT Standard_Integer NbValues (const Standard_Boolean editable) const;
108 //! Returns the Value Number in the Editor from a given Rank in
110 //! For a complete EditForm, both are equal
111 //! Else, it is given by the extraction map
112 //! Returns 0 if <rank> exceeds the count of editable values,
113 Standard_EXPORT Standard_Integer NumberFromRank (const Standard_Integer rank) const;
115 //! Returns the Rank in the EditForm from a given Number of Value
117 //! For a complete EditForm, both are equal
118 //! Else, it is given by the extraction map
119 //! Returns 0 if <number> is not forecast to be edited, or is
121 Standard_EXPORT Standard_Integer RankFromNumber (const Standard_Integer number) const;
123 //! Returns the Value Number in the Editor for a given Name
124 //! i.e. the true ValueNumber which can be used in various methods
126 //! If it is not complete, for a recorded (in the Editor) but
127 //! non-loaded name, returns negative value (- number)
128 Standard_EXPORT Standard_Integer NameNumber (const Standard_CString name) const;
130 //! Returns the Rank of Value in the EditForm for a given Name
131 //! i.e. if it is not complete, for a recorded (in the Editor) but
132 //! non-loaded name, returns 0
133 Standard_EXPORT Standard_Integer NameRank (const Standard_CString name) const;
135 //! For a read-write undoable EditForm, loads original values
136 //! from defaults stored in the Editor
137 Standard_EXPORT void LoadDefault();
139 //! Loads modifications to data
140 //! Default uses Editor. Can be redefined
141 //! Remark that <ent> and/or <model> may be null, according to the
142 //! kind of Editor. Shortcuts are available for these cases, but
143 //! they finally call LoadData (hence, just ignore non-used args)
144 Standard_EXPORT virtual Standard_Boolean LoadData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
146 //! Shortcut for LoadData when <model> is not used
147 Standard_EXPORT Standard_Boolean LoadEntity (const Handle(Standard_Transient)& ent);
149 //! Shortcut for LoadData when only the model is concerned
150 Standard_EXPORT Standard_Boolean LoadModel (const Handle(Interface_InterfaceModel)& model);
152 //! Shortcut when both <ent> and <model> are not used
153 //! (when the Editor works on fully static or global data)
154 Standard_EXPORT Standard_Boolean LoadData();
156 //! Returns a ListEditor to edit the parameter <num> of the
157 //! EditForm, if it is a List
158 //! The Editor created it (by ListEditor) then loads it (by
160 //! For a single parameter, returns a Null Handle ...
161 Standard_EXPORT Handle(IFSelect_ListEditor) ListEditor (const Standard_Integer num) const;
163 //! Loads an original value (single). Called by the Editor only
164 Standard_EXPORT void LoadValue (const Standard_Integer num, const Handle(TCollection_HAsciiString)& val);
166 //! Loads an original value as a list. Called by the Editor only
167 Standard_EXPORT void LoadList (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list);
169 //! From an edited value, returns its ... value (original one)
170 //! Null means that this value is not defined
171 //! <num> is for the EditForm, not the Editor
172 //! It is for a single parameter. For a list, gives a Null Handle
173 Standard_EXPORT Handle(TCollection_HAsciiString) OriginalValue (const Standard_Integer num) const;
175 //! Returns an original value, as a list
176 //! <num> is for the EditForm, not the Editor
177 //! For a single parameter, gives a Null Handle
178 Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) OriginalList (const Standard_Integer num) const;
180 //! Returns the Edited (i.e. Modified) Value (string for single)
181 //! <num> reports to the EditForm
182 //! If IsModified is False, returns OriginalValue
183 //! Null with IsModified True : means that this value is not
184 //! defined or has been removed
185 //! It is for a single parameter. For a list, gives a Null Handle
186 Standard_EXPORT Handle(TCollection_HAsciiString) EditedValue (const Standard_Integer num) const;
188 //! Returns the Edited Value as a list
189 //! If IsModified is False, returns OriginalValue
190 //! Null with IsModified True : means that this value is not
191 //! defined or has been removed
192 //! For a single parameter, gives a Null Handle
193 Standard_EXPORT Handle(TColStd_HSequenceOfHAsciiString) EditedList (const Standard_Integer num) const;
195 //! Tells if a Value (of the EditForm) is modified (directly or
196 //! through touching by Update)
197 Standard_EXPORT Standard_Boolean IsModified (const Standard_Integer num) const;
199 //! Tells if a Value (of the EditForm) has been touched, i.e.
200 //! not modified directly but by the modification of another one
201 //! (by method Update from the Editor)
202 Standard_EXPORT Standard_Boolean IsTouched (const Standard_Integer num) const;
204 //! Gives a new value for the item <num> of the EditForm, if
205 //! it is a single parameter (for a list, just returns False)
206 //! Null means to Remove it
207 //! <enforce> True to overpass Protected or Computed Access Mode
208 //! Calls the method Update from the Editor, which can touch other
209 //! parameters (see NbTouched)
210 //! Returns True if well recorded, False if this value is not
212 //! Warning : Does not apply immediately : will be applied by the method
214 Standard_EXPORT Standard_Boolean Modify (const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval, const Standard_Boolean enforce = Standard_False);
216 //! Changes the value of an item of the EditForm, if it is a List
217 //! (else, just returns False)
218 //! The ListEditor contains the edited values of the list
219 //! If no edition was recorded, just returns False
220 //! Calls the method Update from the Editor, which can touch other
221 //! parameters (see NbTouched)
222 //! Returns True if well recorded, False if this value is not
224 //! Warning : Does not apply immediately : will be applied by the method
226 Standard_EXPORT Standard_Boolean ModifyList (const Standard_Integer num, const Handle(IFSelect_ListEditor)& edited, const Standard_Boolean enforce = Standard_False);
228 //! As ModifyList but the new value is given as such
229 //! Creates a ListEditor, Loads it, then calls ModifyList
230 Standard_EXPORT Standard_Boolean ModifyListValue (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& list, const Standard_Boolean enforce = Standard_False);
232 //! Gives a new value computed by the Editor, if another parameter
233 //! commands the value of <num>
234 //! It is generally the case for a Computed Parameter for instance
235 //! Increments the counter of touched parameters
236 //! Warning : it gives no protection for ReadOnly etc... while it is the
237 //! internal way of touching parameters
238 //! Does not work (returns False) if <num> is for a list
239 Standard_EXPORT Standard_Boolean Touch (const Standard_Integer num, const Handle(TCollection_HAsciiString)& newval);
241 //! Acts as Touch but for a list
242 //! Does not work (returns False) if <num> is for a single param
243 Standard_EXPORT Standard_Boolean TouchList (const Standard_Integer num, const Handle(TColStd_HSequenceOfHAsciiString)& newlist);
245 //! Returns the count of parameters touched by the last Modify
246 //! (apart from the modified parameter itself)
247 //! Normally it is zero
248 Standard_EXPORT Standard_Integer NbTouched() const;
250 //! Clears modification status : by default all, or one by its
251 //! numbers (in the Editor)
252 Standard_EXPORT void ClearEdit (const Standard_Integer num = 0);
254 //! Prints Definitions, relative to the Editor
255 Standard_EXPORT void PrintDefs (const Handle(Message_Messenger)& S) const;
257 //! Prints Values, according to what and alsolist
258 //! <names> True : prints Long Names; False : prints Short Names
259 //! <what> < 0 : prints Original Values (+ flag Modified)
260 //! <what> > 0 : prints Final Values (+flag Modified)
261 //! <what> = 0 : prints Modified Values (Original + Edited)
262 //! <alsolist> False (D) : lists are printed only as their count
263 //! <alsolist> True : lists are printed for all their items
264 Standard_EXPORT void PrintValues (const Handle(Message_Messenger)& S, const Standard_Integer what, const Standard_Boolean names, const Standard_Boolean alsolist = Standard_False) const;
266 //! Applies modifications to own data
267 //! Calls ApplyData then Clears Status according EditKeepStatus
268 Standard_EXPORT Standard_Boolean Apply();
270 //! Tells if this EditForm can work with its Editor and its actual
271 //! Data (Entity and Model)
272 //! Default uses Editor. Can be redefined
273 Standard_EXPORT virtual Standard_Boolean Recognize() const;
275 //! Applies modifications to data
276 //! Default uses Editor. Can be redefined
277 Standard_EXPORT virtual Standard_Boolean ApplyData (const Handle(Standard_Transient)& ent, const Handle(Interface_InterfaceModel)& model);
279 //! For an undoable EditForm, Applies ... origibal values !
280 //! and clears modified ones
281 //! Can be run only once
282 Standard_EXPORT Standard_Boolean Undo();
287 DEFINE_STANDARD_RTTIEXT(IFSelect_EditForm,MMgt_TShared)
297 Standard_Boolean thecomplete;
298 Standard_Boolean theloaded;
299 Standard_Boolean thekeepst;
300 TCollection_AsciiString thelabel;
301 TColStd_Array1OfInteger thenums;
302 TColStd_Array1OfTransient theorigs;
303 TColStd_Array1OfTransient themodifs;
304 TColStd_Array1OfInteger thestatus;
305 Handle(IFSelect_Editor) theeditor;
306 Handle(Standard_Transient) theent;
307 Handle(Interface_InterfaceModel) themodel;
308 Standard_Integer thetouched;
319 #endif // _IFSelect_EditForm_HeaderFile