0024057: Eliminate compiler warning C4100 in MSVC++ with warning level 4
[occt.git] / src / IGESSelect / IGESSelect_EditHeader.cxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #include <IGESSelect_EditHeader.ixx>
19 #include <Interface_TypedValue.hxx>
20 #include <Interface_Static.hxx>
21
22 #include <IGESData_IGESModel.hxx>
23 #include <IGESData_Protocol.hxx>
24 #include <IGESData_GlobalSection.hxx>
25 #include <IGESData_BasicEditor.hxx>
26
27
28 static Standard_Boolean IsTimeStamp
29   (const Handle(TCollection_HAsciiString)& val)
30 {
31   if (val.IsNull()) return Standard_False;
32 //  La date peut etre sur 13 ou 15 caracteres (15 : bonjour l an 2000!)
33 //  forme [YY]YYMMDD.HHMMSS
34   Standard_Integer lng = val->Length();
35   if (lng != 13 && lng != 15) return Standard_False;
36   lng -= 13;  // devient 0 ou 2 (offset siecle)
37
38 //  Cas du siecle present :
39   if (lng == 2) {
40     char uncar = val->Value(1);
41     if (uncar != '1' && uncar != '2') return Standard_False;
42     uncar = val->Value(2);
43     if (uncar < '0' || uncar > '9') return Standard_False;
44   }
45
46 //  On y va
47   char dizmois = val->Value(lng+3);
48   char dizjour = val->Value(lng+5);
49   char dizheur = val->Value(lng+8);
50   for (Standard_Integer i = 1; i <= 13; i ++) {
51     char uncar = val->Value(i+lng);
52     switch (i) {
53     case  1 :
54     case  2 : if (uncar < '0' || uncar > '9') return Standard_False; break;
55     case  3 : if (uncar != '0' && uncar != '1') return Standard_False;  break;
56     case  4 : if (uncar < '0' || uncar > '9') return Standard_False;
57       if (dizmois == '1' && (uncar < '0' || uncar > '2')) return Standard_False;
58       break;
59     case  5 : if (uncar < '0' || uncar > '3') return Standard_False; break;
60     case  6 : if (uncar < '0' || uncar > '9') return Standard_False;
61       if (dizjour == '3' && (uncar != '0' && uncar != '1')) return Standard_False;
62       break;
63     case  7 : if (uncar != '.') return Standard_False;  break;
64     case  8 : if (uncar < '0' || uncar > '2') return Standard_False; break;
65     case  9 : if (uncar < '0' || uncar > '9') return Standard_False;
66       if (dizheur == '2' && (uncar < '0' || uncar > '3')) return Standard_False; //szv#4:S4163:12Mar99 extra break
67       break;
68     case 10 : if (uncar < '0' || uncar > '5') return Standard_False; break;
69     case 11 : if (uncar < '0' || uncar > '9') return Standard_False; break;
70     case 12 : if (uncar < '0' || uncar > '5') return Standard_False; break;
71     case 13 : if (uncar < '0' || uncar > '9') return Standard_False; break;
72       default : break;
73     }
74   }
75   return Standard_True;
76 }
77
78
79     IGESSelect_EditHeader::IGESSelect_EditHeader  ()
80     : IFSelect_Editor (30)
81 {
82   Standard_Integer i,nb;
83 //  Definition
84   Handle(Interface_TypedValue) start = new Interface_TypedValue("Start Section");
85   start->SetMaxLength(72);
86   SetValue (1,start,"Start");
87   SetList  (1);
88
89   Handle(Interface_TypedValue) sep = new Interface_TypedValue("Parameter Delimiter");
90   sep->SetMaxLength(1);
91   SetValue (2,sep,"G1:Separator",IFSelect_Optional);
92   Handle(Interface_TypedValue) endmark = new Interface_TypedValue("Record Delimiter");
93   endmark->SetMaxLength(1);
94   SetValue (3,endmark,"G2:EndMark",IFSelect_Optional);
95
96   Handle(Interface_TypedValue) sendname = new Interface_TypedValue("Sender Product Id");
97   SetValue (4,sendname,"G3:SendName",IFSelect_Optional);
98
99   Handle(Interface_TypedValue) filename = new Interface_TypedValue("File Name");
100   SetValue (5,filename,"G4:FileName");
101
102   Handle(Interface_TypedValue) systid = new Interface_TypedValue("Native System Id");
103   SetValue (6,systid,"G5:SystemId");
104
105   Handle(Interface_TypedValue) version = new Interface_TypedValue("Preprocessor Version");
106   SetValue (7,version,"G6:Version");
107
108   Handle(Interface_TypedValue) intbits = new Interface_TypedValue("Integer Binary Bits",Interface_ParamInteger);
109   SetValue (8,intbits,"G7:IntBits");
110   Handle(Interface_TypedValue) pow10s = new Interface_TypedValue("Single Precision Magnitude",Interface_ParamInteger);
111   SetValue (9,pow10s,"G8:SingleMag");
112   Handle(Interface_TypedValue) dig10s = new Interface_TypedValue("Single Precision Significance",Interface_ParamInteger);
113   SetValue (10,dig10s,"G9:SingDigits");
114   Handle(Interface_TypedValue) pow10d = new Interface_TypedValue("Double Precision Magnitude",Interface_ParamInteger);
115   SetValue (11,pow10d,"G10:DoubleMag");
116   Handle(Interface_TypedValue) dig10d = new Interface_TypedValue("Double Precision Significance",Interface_ParamInteger);
117   SetValue (12,dig10d,"G11:DoubDigits");
118
119   Handle(Interface_TypedValue) recname = new Interface_TypedValue("Receiver Product Id");
120   SetValue (13,recname,"G12:Receiver",IFSelect_Optional);
121
122   Handle(Interface_TypedValue) scale = new Interface_TypedValue("Model Space Scale",Interface_ParamReal);
123   SetValue (14,scale,"G13:Scale",IFSelect_Optional);
124
125   Handle(Interface_TypedValue) unitflag = new Interface_TypedValue("Units Flag",Interface_ParamInteger);
126   unitflag->SetIntegerLimit(Standard_False,1);
127   unitflag->SetIntegerLimit(Standard_True,11);
128   SetValue (15,unitflag,"G14:UnitFlag",IFSelect_Optional);
129 //  On prend a la source ...  Mieux vaudrait "recopier" les definitions ...
130   Handle(Interface_TypedValue) unitname = new Interface_TypedValue("Units Name",Interface_ParamEnum);
131   unitname->StartEnum (1);
132   for (i = 1; i <= 11; i ++)
133     unitname->AddEnumValue (IGESData_BasicEditor::UnitFlagName(i),i);
134 //  similaire a Interface_Static::Static("XSTEP.iges.unit");
135   SetValue (16,unitname,"G15:UnitName",IFSelect_Optional);
136   Handle(Interface_TypedValue) unitval  = new Interface_TypedValue("Computed Unit Value",Interface_ParamReal);
137   SetValue (17,unitval,"V15:UnitValue",IFSelect_EditDynamic);
138
139   Handle(Interface_TypedValue) linwgr = new Interface_TypedValue("Max Line Weight Gradation",Interface_ParamInteger);
140   SetValue (18,linwgr,"G16:LineWGrad",IFSelect_Optional);
141   Handle(Interface_TypedValue) maxlw = new Interface_TypedValue("Width of Max Line Weight",Interface_ParamReal);
142   SetValue (19,maxlw,"G17:MaxLineW");
143
144   Handle(Interface_TypedValue) filedate = new Interface_TypedValue("Date of File Creation");
145   filedate->SetSatisfies (IsTimeStamp,"IsIGESDate");
146   SetValue (20,filedate,"G18:FileDate");
147
148   Handle(Interface_TypedValue) resol = new Interface_TypedValue("Max Resolution",Interface_ParamReal);
149   SetValue (21,resol,"G19:Resolution");
150   Handle(Interface_TypedValue) coord = new Interface_TypedValue("Max Coordinates",Interface_ParamReal);
151   SetValue (22,coord,"G20:MaxCoord",IFSelect_Optional);
152
153   Handle(Interface_TypedValue) author = new Interface_TypedValue("Name of Author");
154   SetValue (23,author,"G21:Author");
155   Handle(Interface_TypedValue) company = new Interface_TypedValue("Author Organization");
156   SetValue (24,company,"G22:Company");
157
158   Handle(Interface_TypedValue) igesvers = new Interface_TypedValue("Version Flag",Interface_ParamInteger);
159   nb = IGESData_BasicEditor::IGESVersionMax();
160   igesvers->SetIntegerLimit(Standard_False,1);
161   igesvers->SetIntegerLimit(Standard_True,nb);
162   SetValue (25,igesvers,"G23:IGESVersion");
163   Handle(Interface_TypedValue) versname = new Interface_TypedValue("IGES Version Name",Interface_ParamEnum);
164   versname->StartEnum (0);
165   for (i = 0; i <= IGESData_BasicEditor::IGESVersionMax(); i ++)
166     versname->AddEnumValue (IGESData_BasicEditor::IGESVersionName(i),i);
167   SetValue (26,versname,"V23:VersionName");
168
169   Handle(Interface_TypedValue) draft = new Interface_TypedValue("Drafting Standard Flag",Interface_ParamInteger);
170   nb = IGESData_BasicEditor::DraftingMax();
171   draft->SetIntegerLimit(Standard_False,0);
172   draft->SetIntegerLimit(Standard_True,nb);
173   SetValue (27,draft,"G24:Drafting");
174   Handle(Interface_TypedValue) draftname = new Interface_TypedValue("Drafting Standard Name",Interface_ParamEnum);
175   draftname->StartEnum (0);
176   for (i = 0; i <= nb; i ++)
177     draftname->AddEnumValue (IGESData_BasicEditor::DraftingName(i),i);
178   SetValue (28,draftname,"V24:DraftingName");
179
180   Handle(Interface_TypedValue) changedate = new Interface_TypedValue("Date of Creation/Change");
181   changedate->SetSatisfies (IsTimeStamp,"IsIGESDate");
182   SetValue (29,changedate,"G25:ChangeDate",IFSelect_Optional);
183
184   Handle(Interface_TypedValue) proto = new Interface_TypedValue("Application Protocol/Subset Id");
185   SetValue (30,proto,"G26:Protocol",IFSelect_Optional);
186
187 }
188
189     TCollection_AsciiString  IGESSelect_EditHeader::Label () const
190       {  return TCollection_AsciiString ("IGES Header");  }
191
192     Standard_Boolean  IGESSelect_EditHeader::Recognize
193   (const Handle(IFSelect_EditForm)& /*form*/) const
194 {  return Standard_True;  }  // ??
195
196     Handle(TCollection_HAsciiString)  IGESSelect_EditHeader::StringValue
197   (const Handle(IFSelect_EditForm)& /*form*/, const Standard_Integer num) const
198 {
199 //  Default Values
200   return TypedValue(num)->HStringValue();
201 }
202
203     Standard_Boolean  IGESSelect_EditHeader::Load
204   (const Handle(IFSelect_EditForm)& form,
205    const Handle(Standard_Transient)& /*ent*/,
206    const Handle(Interface_InterfaceModel)& model) const
207 {
208   Handle(IGESData_IGESModel) modl =
209     Handle(IGESData_IGESModel)::DownCast(model);
210   if (modl.IsNull()) return Standard_False;
211
212   IGESData_GlobalSection GS = modl->GlobalSection();
213
214   form->LoadList  (1 ,modl->StartSection());
215   form->LoadValue (2 ,new TCollection_HAsciiString(GS.Separator()) );
216   form->LoadValue (3 ,new TCollection_HAsciiString(GS.EndMark()) );
217   form->LoadValue (4 ,GS.SendName());
218   form->LoadValue (5 ,GS.FileName());
219   form->LoadValue (6 ,GS.SystemId());
220   form->LoadValue (7 ,GS.InterfaceVersion());
221
222   form->LoadValue (8 ,new TCollection_HAsciiString(GS.IntegerBits()) );
223   form->LoadValue (9 ,new TCollection_HAsciiString(GS.MaxPower10Single()) );
224   form->LoadValue (10 ,new TCollection_HAsciiString(GS.MaxDigitsSingle()) );
225   form->LoadValue (11 ,new TCollection_HAsciiString(GS.MaxPower10Double()) );
226   form->LoadValue (12 ,new TCollection_HAsciiString(GS.MaxDigitsDouble()) );
227
228   form->LoadValue (13 ,GS.ReceiveName());
229   form->LoadValue (14 ,new TCollection_HAsciiString(GS.Scale()) );
230
231   form->LoadValue (15 ,new TCollection_HAsciiString(GS.UnitFlag()) );
232   form->LoadValue (16 ,GS.UnitName());
233   form->LoadValue (17 ,new TCollection_HAsciiString(GS.UnitValue()) );
234   form->LoadValue (18 ,new TCollection_HAsciiString(GS.LineWeightGrad()) );
235   form->LoadValue (19 ,new TCollection_HAsciiString(GS.MaxLineWeight()) );
236
237   form->LoadValue (20 ,GS.Date());
238   form->LoadValue (21 ,new TCollection_HAsciiString(GS.Resolution()) );
239   if (GS.HasMaxCoord()) form->LoadValue (22 ,new TCollection_HAsciiString(GS.MaxCoord()) );
240
241   form->LoadValue (23 ,GS.AuthorName());
242   form->LoadValue (24 ,GS.CompanyName());
243   form->LoadValue (25 ,new TCollection_HAsciiString(GS.IGESVersion()) );
244   form->LoadValue (26 ,new TCollection_HAsciiString
245                    (IGESData_BasicEditor::IGESVersionName(GS.IGESVersion()) ));
246   form->LoadValue (27 ,new TCollection_HAsciiString(GS.DraftingStandard()) );
247   form->LoadValue (28 ,new TCollection_HAsciiString
248                    (IGESData_BasicEditor::DraftingName(GS.DraftingStandard()) ));
249   form->LoadValue (29 ,GS.LastChangeDate());
250   form->LoadValue (30 ,GS.ApplicationProtocol());
251
252   return Standard_True;
253 }
254
255     Standard_Boolean  IGESSelect_EditHeader::Update
256   (const Handle(IFSelect_EditForm)& form,
257    const Standard_Integer num,
258    const Handle(TCollection_HAsciiString)& val,
259    const Standard_Boolean enforce) const
260 {
261   if (num == 15) {
262     if (!enforce) return Standard_False;  // quand meme ...
263 //    Unit Flag : mettre a jour UnitName et UnitValue
264     Standard_Integer unitflag = val->IntegerValue();
265     Standard_CString unitname = IGESData_BasicEditor::UnitFlagName (unitflag);
266     if (unitname[0] == '\0') return Standard_False;
267     form->Touch (16,new TCollection_HAsciiString (unitname));
268     form->Touch (17,new TCollection_HAsciiString
269                  (IGESData_BasicEditor::UnitFlagValue(unitflag)) );
270   }
271   if (num == 16) {
272     if (!enforce) return Standard_False;  // quand meme ...
273 //    Unit Name : mettre a jour UnitFlag et UnitValue
274     Standard_Integer unitflag = IGESData_BasicEditor::UnitNameFlag
275       (val->ToCString());
276     if (unitflag == 0) return Standard_False;  // pas bon
277     form->Touch (15,new TCollection_HAsciiString (unitflag));
278     form->Touch (17,new TCollection_HAsciiString
279                  (IGESData_BasicEditor::UnitFlagValue(unitflag)) );
280   }
281
282   if (num == 25) {
283 //    Unit Version : mettre a jour son nom
284     Standard_Integer version = 3;  // par defaut ...
285     if (!val.IsNull()) version = atoi(val->ToCString());
286     Standard_CString versname = IGESData_BasicEditor::IGESVersionName(version);
287     if (versname[0] == '\0') return Standard_False;
288     form->Touch (26,new TCollection_HAsciiString (versname));
289   }
290   if (num == 27) {
291 //   Drafting : mettre a jour son nom
292     Standard_Integer draft = 0;
293     if (!val.IsNull()) draft = atoi(val->ToCString());
294     Standard_CString draftname = IGESData_BasicEditor::IGESVersionName(draft);
295     if (draftname[0] == '\0') return Standard_False;
296     form->Touch (28,new TCollection_HAsciiString (draftname));
297   }
298   return Standard_True;
299 }
300
301     Standard_Boolean  IGESSelect_EditHeader::Apply
302   (const Handle(IFSelect_EditForm)& form,
303    const Handle(Standard_Transient)& /*ent*/,
304    const Handle(Interface_InterfaceModel)& model) const
305 {
306   Handle(IGESData_IGESModel) modl =
307     Handle(IGESData_IGESModel)::DownCast(model);
308   if (modl.IsNull()) return Standard_False;
309
310   IGESData_GlobalSection GS = modl->GlobalSection();
311
312   Handle(TCollection_HAsciiString) str;
313
314   if (form->IsModified(1))  modl->SetStartSection (form->EditedList(1));
315   if (form->IsModified(2)) {
316     str = form->EditedValue(2);
317     if (!str.IsNull() && str->Length() >= 1) GS.SetSeparator (str->Value(1));
318   }
319   if (form->IsModified(3)) {
320     str = form->EditedValue(3);
321     if (!str.IsNull() && str->Length() >= 1) GS.SetEndMark (str->Value(1));
322   }
323   if (form->IsModified(4))  GS.SetSendName (form->EditedValue(4));
324   if (form->IsModified(5))  GS.SetFileName (form->EditedValue(5));
325   if (form->IsModified(6))  GS.SetSystemId (form->EditedValue(6));
326   if (form->IsModified(7))  GS.SetInterfaceVersion (form->EditedValue(7));
327
328   if (form->IsModified(8))  GS.SetIntegerBits (form->EditedValue(8)->IntegerValue());
329   if (form->IsModified(9))  GS.SetMaxPower10Single (form->EditedValue(9)->IntegerValue());
330   if (form->IsModified(10)) GS.SetMaxDigitsSingle (form->EditedValue(10)->IntegerValue());
331   if (form->IsModified(11)) GS.SetMaxPower10Double (form->EditedValue(11)->IntegerValue());
332   if (form->IsModified(12)) GS.SetMaxDigitsDouble (form->EditedValue(12)->IntegerValue());
333
334   if (form->IsModified(13)) GS.SetReceiveName (form->EditedValue(13));
335   if (form->IsModified(14)) GS.SetScale (form->EditedValue(14)->RealValue());
336   if (form->IsModified(15)) GS.SetUnitFlag (form->EditedValue(15)->IntegerValue());
337   if (form->IsModified(16)) GS.SetUnitName (form->EditedValue(16));
338
339   if (form->IsModified(18)) GS.SetLineWeightGrad (form->EditedValue(18)->IntegerValue());
340   if (form->IsModified(19)) GS.SetMaxLineWeight (form->EditedValue(19)->RealValue());
341
342   if (form->IsModified(20)) GS.SetDate (form->EditedValue(20));
343   if (form->IsModified(21)) GS.SetResolution (form->EditedValue(21)->RealValue());
344   if (form->IsModified(22)) {
345     str = form->EditedValue(22);
346     if (str.IsNull()) GS.SetMaxCoord();
347     else GS.SetMaxCoord (str->RealValue());
348   }
349
350   if (form->IsModified(23)) GS.SetAuthorName (form->EditedValue(23));
351   if (form->IsModified(24)) GS.SetCompanyName (form->EditedValue(24));
352   if (form->IsModified(25)) GS.SetIGESVersion (form->EditedValue(25)->IntegerValue());
353   if (form->IsModified(27)) GS.SetDraftingStandard (form->EditedValue(27)->IntegerValue());
354   if (form->IsModified(29)) GS.SetLastChangeDate (form->EditedValue(29));
355   if (form->IsModified(30)) GS.SetApplicationProtocol (form->EditedValue(30));
356
357   modl->SetGlobalSection (GS);
358
359 //  Pour l unite
360   if (form->IsModified(15) || form->IsModified(16)) {
361     IGESData_BasicEditor bed
362       (modl,Handle(IGESData_Protocol)::DownCast(modl->Protocol()) );
363     if (bed.SetUnitValue (GS.UnitValue()) ) return Standard_False;
364     bed.ApplyUnit (Standard_True);
365   }
366
367   return Standard_True;
368 }