b311480e |
1 | -- Created on: 1998-02-23 |
2 | -- Created by: Christian CAILLET |
3 | -- Copyright (c) 1998-1999 Matra Datavision |
973c2be1 |
4 | -- Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | -- |
973c2be1 |
6 | -- This file is part of Open CASCADE Technology software library. |
b311480e |
7 | -- |
d5f74e42 |
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 |
973c2be1 |
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. |
b311480e |
13 | -- |
973c2be1 |
14 | -- Alternatively, this file may be used under the terms of Open CASCADE |
15 | -- commercial license or contractual agreement. |
7fd59977 |
16 | |
17 | class EditForm from IFSelect inherits TShared |
18 | |
19 | ---Purpose : An EditForm is the way to apply an Editor on an Entity or on |
20 | -- the Model |
21 | -- It gives read-only or read-write access, with or without undo |
22 | -- |
23 | -- It can be complete (all the values of the Editor are present) |
24 | -- or partial (a sub-list of these value are present) |
25 | -- Anyway, all references to Number (argument <num>) refer to |
26 | -- Number of Value for the Editor |
27 | -- While references to Rank are for rank in the EditForm, which |
28 | -- may differ if it is not Complete |
29 | -- Two methods give the correspondance between this Number and |
30 | -- the Rank in the EditForm : RankFromNumber and NumberFromRank |
31 | -- |
32 | |
33 | uses CString, Transient, |
34 | AsciiString from TCollection, |
35 | HAsciiString from TCollection, |
36 | Array1OfInteger from TColStd, |
37 | SequenceOfInteger from TColStd, |
38 | Array1OfTransient from TColStd, |
39 | HSequenceOfHAsciiString from TColStd, |
40 | Messenger from Message, |
41 | InterfaceModel from Interface, |
42 | Editor from IFSelect, ListEditor from IFSelect |
43 | |
44 | is |
45 | |
46 | Create (editor : Editor; readonly : Boolean; undoable : Boolean; |
47 | label : CString = "") returns EditForm; |
48 | ---Purpose : Creates a complete EditForm from an Editor |
49 | -- A specific Label can be given |
50 | |
51 | Create (editor : Editor; nums : SequenceOfInteger; |
52 | readonly : Boolean; undoable : Boolean; |
53 | label : CString = "") returns EditForm; |
54 | ---Purpose : Creates an extracted EditForm from an Editor, limited to |
55 | -- the values identified in <nums> |
56 | -- A specific Label can be given |
57 | |
58 | EditKeepStatus (me : mutable) returns Boolean; |
59 | ---Purpose : Returns and may change the keep status on modif |
60 | -- It starts as False |
61 | -- If it is True, Apply does not clear modification status |
62 | -- and the EditForm can be loaded again, modified value remain |
63 | -- and may be applied again |
64 | -- Remark that ApplyData does not clear the modification status, |
65 | -- a call to ClearEdit does |
66 | ---C++ : return & |
67 | |
68 | Label (me) returns CString; |
69 | |
70 | IsLoaded (me) returns Boolean; |
71 | ---Purpose : Tells if the EditForm is loaded now |
72 | |
73 | ClearData (me : mutable); |
74 | |
75 | SetData (me : mutable; ent : Transient; model : InterfaceModel); |
76 | |
77 | SetEntity (me : mutable; ent : Transient); |
78 | |
79 | SetModel (me : mutable; model : InterfaceModel); |
80 | |
81 | Entity (me) returns Transient; |
82 | |
83 | Model (me) returns InterfaceModel; |
84 | |
85 | Editor (me) returns Editor; |
86 | |
87 | IsComplete (me) returns Boolean; |
88 | ---Purpose : Tells if an EditForm is complete or is an extract from Editor |
89 | |
90 | NbValues (me; editable : Boolean) returns Integer; |
91 | ---Purpose : Returns the count of values |
92 | -- <editable> True : count of editable values, i.e. |
93 | -- For a complete EditForm, it is given by the Editor |
94 | -- Else, it is the length of the extraction map |
95 | -- <editable> False : all the values from the Editor |
96 | |
97 | NumberFromRank (me; rank : Integer) returns Integer; |
98 | ---Purpose : Returns the Value Number in the Editor from a given Rank in |
99 | -- the EditForm |
100 | -- For a complete EditForm, both are equal |
101 | -- Else, it is given by the extraction map |
102 | -- Returns 0 if <rank> exceeds the count of editable values, |
103 | |
104 | RankFromNumber (me; number : Integer) returns Integer; |
105 | ---Purpose : Returns the Rank in the EditForm from a given Number of Value |
106 | -- for the Editor |
107 | -- For a complete EditForm, both are equal |
108 | -- Else, it is given by the extraction map |
109 | -- Returns 0 if <number> is not forecast to be edited, or is |
110 | -- out of range |
111 | |
112 | NameNumber (me; name : CString) returns Integer; |
113 | ---Purpose : Returns the Value Number in the Editor for a given Name |
114 | -- i.e. the true ValueNumber which can be used in various methods |
115 | -- of EditForm |
116 | -- If it is not complete, for a recorded (in the Editor) but |
117 | -- non-loaded name, returns negative value (- number) |
118 | |
119 | NameRank (me; name : CString) returns Integer; |
120 | ---Purpose : Returns the Rank of Value in the EditForm for a given Name |
121 | -- i.e. if it is not complete, for a recorded (in the Editor) but |
122 | -- non-loaded name, returns 0 |
123 | |
124 | |
125 | LoadDefault (me : mutable); |
126 | ---Purpose : For a read-write undoable EditForm, loads original values |
127 | -- from defaults stored in the Editor |
128 | |
129 | LoadData (me : mutable; ent : Transient; model : InterfaceModel) |
130 | returns Boolean is virtual; |
131 | ---Purpose : Loads modifications to data |
132 | -- Default uses Editor. Can be redefined |
133 | -- Remark that <ent> and/or <model> may be null, according to the |
134 | -- kind of Editor. Shortcuts are available for these cases, but |
135 | -- they finally call LoadData (hence, just ignore non-used args) |
136 | |
137 | LoadEntity (me : mutable; ent : Transient) returns Boolean; |
138 | ---Purpose : Shortcut for LoadData when <model> is not used |
139 | |
140 | LoadModel (me : mutable; model : InterfaceModel) returns Boolean; |
141 | ---Purpose : Shortcut for LoadData when only the model is concerned |
142 | |
143 | LoadData (me : mutable) returns Boolean; |
144 | ---Purpose : Shortcut when both <ent> and <model> are not used |
145 | -- (when the Editor works on fully static or global data) |
146 | |
147 | |
148 | |
149 | ListEditor (me; num : Integer) returns ListEditor; |
150 | ---Purpose : Returns a ListEditor to edit the parameter <num> of the |
151 | -- EditForm, if it is a List |
152 | -- The Editor created it (by ListEditor) then loads it (by |
153 | -- ListValue) |
154 | -- For a single parameter, returns a Null Handle ... |
155 | |
156 | LoadValue (me : mutable; num : Integer; val : HAsciiString); |
157 | ---Purpose : Loads an original value (single). Called by the Editor only |
158 | |
159 | LoadList (me : mutable; num : Integer; list : HSequenceOfHAsciiString); |
160 | ---Purpose : Loads an original value as a list. Called by the Editor only |
161 | |
162 | OriginalValue (me; num : Integer) returns HAsciiString; |
163 | ---Purpose : From an edited value, returns its ... value (original one) |
164 | -- Null means that this value is not defined |
165 | -- <num> is for the EditForm, not the Editor |
166 | -- It is for a single parameter. For a list, gives a Null Handle |
167 | |
168 | OriginalList (me; num : Integer) returns HSequenceOfHAsciiString; |
169 | ---Purpose : Returns an original value, as a list |
170 | -- <num> is for the EditForm, not the Editor |
171 | -- For a single parameter, gives a Null Handle |
172 | |
173 | |
174 | EditedValue (me; num : Integer) returns HAsciiString; |
175 | ---Purpose : Returns the Edited (i.e. Modified) Value (string for single) |
176 | -- <num> reports to the EditForm |
177 | -- If IsModified is False, returns OriginalValue |
178 | -- Null with IsModified True : means that this value is not |
179 | -- defined or has been removed |
180 | -- It is for a single parameter. For a list, gives a Null Handle |
181 | |
182 | EditedList (me; num : Integer) returns HSequenceOfHAsciiString; |
183 | ---Purpose : Returns the Edited Value as a list |
184 | -- If IsModified is False, returns OriginalValue |
185 | -- Null with IsModified True : means that this value is not |
186 | -- defined or has been removed |
187 | -- For a single parameter, gives a Null Handle |
188 | |
189 | IsModified (me; num : Integer) returns Boolean; |
190 | ---Purpose : Tells if a Value (of the EditForm) is modified (directly or |
191 | -- through touching by Update) |
192 | |
193 | IsTouched (me; num : Integer) returns Boolean; |
194 | ---Purpose : Tells if a Value (of the EditForm) has been touched, i.e. |
195 | -- not modified directly but by the modification of another one |
196 | -- (by method Update from the Editor) |
197 | |
198 | Modify (me : mutable; num : Integer; newval : HAsciiString; |
199 | enforce : Boolean = Standard_False) returns Boolean; |
200 | ---Purpose : Gives a new value for the item <num> of the EditForm, if |
201 | -- it is a single parameter (for a list, just returns False) |
202 | -- Null means to Remove it |
203 | -- <enforce> True to overpass Protected or Computed Access Mode |
204 | -- Calls the method Update from the Editor, which can touch other |
205 | -- parameters (see NbTouched) |
206 | -- Returns True if well recorded, False if this value is not |
207 | -- allowed |
208 | -- Warning : Does not apply immediately : will be applied by the method |
209 | -- Apply |
210 | |
211 | ModifyList (me : mutable; num : Integer; edited : ListEditor; |
212 | enforce : Boolean = Standard_False) returns Boolean; |
213 | ---Purpose : Changes the value of an item of the EditForm, if it is a List |
214 | -- (else, just returns False) |
215 | -- The ListEditor contains the edited values of the list |
216 | -- If no edition was recorded, just returns False |
217 | -- Calls the method Update from the Editor, which can touch other |
218 | -- parameters (see NbTouched) |
219 | -- Returns True if well recorded, False if this value is not |
220 | -- allowed |
221 | -- Warning : Does not apply immediately : will be applied by the method |
222 | -- Apply |
223 | |
224 | ModifyListValue (me : mutable; num : Integer; list : HSequenceOfHAsciiString; |
225 | enforce : Boolean = Standard_False) returns Boolean; |
226 | ---Purpose : As ModifyList but the new value is given as such |
227 | -- Creates a ListEditor, Loads it, then calls ModifyList |
228 | |
229 | Touch (me : mutable; num : Integer; newval : HAsciiString) returns Boolean; |
230 | ---Purpose : Gives a new value computed by the Editor, if another parameter |
231 | -- commands the value of <num> |
232 | -- It is generally the case for a Computed Parameter for instance |
233 | -- Increments the counter of touched parameters |
234 | -- Warning : it gives no protection for ReadOnly etc... while it is the |
235 | -- internal way of touching parameters |
236 | -- Does not work (returns False) if <num> is for a list |
237 | |
238 | TouchList (me : mutable; num : Integer; newlist : HSequenceOfHAsciiString) |
239 | returns Boolean; |
240 | ---Purpose : Acts as Touch but for a list |
241 | -- Does not work (returns False) if <num> is for a single param |
242 | |
243 | NbTouched (me) returns Integer; |
244 | ---Purpose : Returns the count of parameters touched by the last Modify |
245 | -- (apart from the modified parameter itself) |
246 | -- Normally it is zero |
247 | |
248 | ClearEdit (me : mutable; num : Integer = 0); |
249 | ---Purpose : Clears modification status : by default all, or one by its |
250 | -- numbers (in the Editor) |
251 | |
252 | |
253 | PrintDefs (me; S : Messenger from Message); |
254 | ---Purpose : Prints Definitions, relative to the Editor |
255 | |
256 | PrintValues (me; S : Messenger from Message; what : Integer; |
257 | names : Boolean; alsolist : Boolean = Standard_False); |
258 | ---Purpose : Prints Values, according to what and alsolist |
259 | -- <names> True : prints Long Names; False : prints Short Names |
260 | -- <what> < 0 : prints Original Values (+ flag Modified) |
261 | -- <what> > 0 : prints Final Values (+flag Modified) |
262 | -- <what> = 0 : prints Modified Values (Original + Edited) |
263 | -- <alsolist> False (D) : lists are printed only as their count |
264 | -- <alsolist> True : lists are printed for all their items |
265 | |
266 | |
267 | Apply (me : mutable) returns Boolean; |
268 | ---Purpose : Applies modifications to own data |
269 | -- Calls ApplyData then Clears Status according EditKeepStatus |
270 | |
271 | -- Specific methods : they work with the Editor (which provides the |
272 | -- specific behavior) but they can be redefined |
273 | |
274 | Recognize (me) returns Boolean is virtual; |
275 | ---Purpose : Tells if this EditForm can work with its Editor and its actual |
276 | -- Data (Entity and Model) |
277 | -- Default uses Editor. Can be redefined |
278 | |
279 | ApplyData (me : mutable; ent : Transient; model : InterfaceModel) |
280 | returns Boolean is virtual; |
281 | ---Purpose : Applies modifications to data |
282 | -- Default uses Editor. Can be redefined |
283 | |
284 | Undo (me : mutable) returns Boolean; |
285 | ---Purpose : For an undoable EditForm, Applies ... origibal values ! |
286 | -- and clears modified ones |
287 | -- Can be run only once |
288 | |
289 | fields |
290 | |
291 | thecomplete : Boolean; -- complete ? else see thenums for mapping |
292 | theloaded : Boolean; -- loaded ? |
293 | thekeepst : Boolean; -- to keep edits |
294 | thelabel : AsciiString; |
295 | thenums : Array1OfInteger; |
296 | theorigs : Array1OfTransient; |
297 | themodifs : Array1OfTransient; |
298 | thestatus : Array1OfInteger; |
299 | theeditor : Editor; |
300 | theent : Transient; |
301 | themodel : InterfaceModel; |
302 | thetouched : Integer; |
303 | |
304 | end EditForm; |