0024234: occt master is not compiled by VC++ 2005 (vc8 32/64 bit TKBO)
[occt.git] / src / DDF / DDF_Browser.cxx
CommitLineData
b311480e 1// Created by: DAUTRY Philippe
2// Copyright (c) 1997-1999 Matra Datavision
3// Copyright (c) 1999-2012 OPEN CASCADE SAS
4//
5// The content of this file is subject to the Open CASCADE Technology Public
6// License Version 6.5 (the "License"). You may not use the content of this file
7// except in compliance with the License. Please obtain a copy of the License
8// at http://www.opencascade.org and read it completely before using this file.
9//
10// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12//
13// The Original Code and all software distributed under the License is
14// distributed on an "AS IS" basis, without warranty of any kind, and the
15// Initial Developer hereby disclaims all such warranties, including without
16// limitation, any warranties of merchantability, fitness for a particular
17// purpose or non-infringement. Please see the License for the specific terms
18// and conditions governing the rights and limitations under the License.
19
7fd59977 20// ---------------
7fd59977 21
22// Version: 0.0
b311480e 23//Version Date Purpose
7fd59977 24// 0.0 Oct 3 1997 Creation
25
26
7fd59977 27#include <DDF_Browser.ixx>
28
29#include <DDF_AttributeBrowser.hxx>
30
31#include <TDF_Tool.hxx>
32#include <TDF_ChildIterator.hxx>
33#include <TDF_AttributeIterator.hxx>
34#include <TDF_Attribute.hxx>
35#include <TDF.hxx>
36
37#include <TDataStd_Name.hxx>
38
39#include <TCollection_ExtendedString.hxx>
40
41//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
42// Communication convention with tcl:
43// tcl waits for a string of characters, being an information list.
44// In this list, each item is separated from another by a separator: '\'.
45//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
46
47#define TDF_BrowserSeparator1 '\\'
48#define TDF_BrowserSeparator2 ' '
49#define TDF_BrowserSeparator3 '#'
50#define TDF_BrowserSeparator4 ','
51
52
53//=======================================================================
54//function : DDF_Browser
55//purpose :
56//=======================================================================
57
58DDF_Browser::DDF_Browser(const Handle(TDF_Data)& aDF)
59: myDF(aDF)
60{}
61
62
63//=======================================================================
64//function : DrawOn
65//purpose :
66//=======================================================================
67
68void DDF_Browser::DrawOn(Draw_Display& /*dis*/) const
69{
70 //cout<<"DDF_Browser"<<endl;
71}
72
73
74//=======================================================================
75//function : Copy
76//purpose :
77//=======================================================================
78
79Handle(Draw_Drawable3D) DDF_Browser::Copy() const
80{ return new DDF_Browser(myDF); }
81
82
83//=======================================================================
84//function : Dump
85//purpose :
86//=======================================================================
87
88void DDF_Browser::Dump(Standard_OStream& S) const
89{
90 S<<"DDF_Browser on a DF:"<<endl;
91 S<<myDF;
92}
93
94
95//=======================================================================
96//function : Whatis
97//purpose :
98//=======================================================================
99
100void DDF_Browser::Whatis(Draw_Interpretor& I) const
101{ I<<"Data Framework Browser"; }
102
103
104//=======================================================================
105//function : Data
106//purpose :
107//=======================================================================
108
109void DDF_Browser::Data(const Handle(TDF_Data)& aDF)
110{ myDF = aDF; }
111
112
113//=======================================================================
114//function : Data
115//purpose :
116//=======================================================================
117
118Handle(TDF_Data) DDF_Browser::Data() const
119{ return myDF; }
120
121
122//=======================================================================
123//function : OpenRoot
124//purpose :
125//=======================================================================
126
127TCollection_AsciiString DDF_Browser::OpenRoot() const
128{
129 TCollection_AsciiString list;
130 const TDF_Label& root = myDF->Root();
131 TDF_Tool::Entry(root,list);
132 Handle(TDataStd_Name) name;
133 list.AssignCat(TDF_BrowserSeparator2);
134 list.AssignCat("\"");
f767df4e 135 if (root.FindAttribute(TDataStd_Name::GetID(),name))
136 {
7fd59977 137 TCollection_AsciiString tmpStr(name->Get(),'?');
138 tmpStr.ChangeAll(' ','_');
139 list.AssignCat(tmpStr);
140 }
141 list.AssignCat("\"");
142 list.AssignCat(TDF_BrowserSeparator2);
143 if (!root.MayBeModified()) list.AssignCat("Not");
144 list.AssignCat("Modified");
145 list.AssignCat(TDF_BrowserSeparator2);
f767df4e 146 list.AssignCat((root.HasAttribute() || root.HasChild())? "1" : "0");
7fd59977 147 return list;
148}
149
150
151//=======================================================================
152//function : OpenLabel
153//purpose :
154// an item is composed as follows:
155// "Entry "Name" Modified|NotModified 0|1"
156// the end bit shows if the label has attributes or children.
157// The 1st can be
158// "AttributeList Modified|NotModified"
159// The items are separated by "\\".
160//=======================================================================
161
162TCollection_AsciiString DDF_Browser::OpenLabel(const TDF_Label& aLab) const
163{
164 Standard_Boolean split = Standard_False;
165 TCollection_AsciiString entry, list;
f767df4e 166 if (aLab.HasAttribute() || aLab.AttributesModified())
167 {
7fd59977 168 list.AssignCat("AttributeList");
169 list.AssignCat(TDF_BrowserSeparator2);
170 if (!aLab.AttributesModified()) list.AssignCat("Not");
171 list.AssignCat("Modified");
172 split = Standard_True;
173 }
174 Handle(TDataStd_Name) name;
f767df4e 175 for (TDF_ChildIterator itr(aLab); itr.More(); itr.Next())
176 {
7fd59977 177 if (split) list.AssignCat(TDF_BrowserSeparator1);
178 TDF_Tool::Entry(itr.Value(),entry);
179 list.AssignCat(entry);
180 list.AssignCat(TDF_BrowserSeparator2);
181 list.AssignCat("\"");
f767df4e 182 if (itr.Value().FindAttribute(TDataStd_Name::GetID(),name))
183 {
7fd59977 184 TCollection_AsciiString tmpStr(name->Get(),'?');
185 tmpStr.ChangeAll(' ','_');
186 list.AssignCat(tmpStr);
187 }
188 list.AssignCat("\"");
189 list.AssignCat(TDF_BrowserSeparator2);
190 if (!itr.Value().MayBeModified()) list.AssignCat("Not");
191 list.AssignCat("Modified");
192 list.AssignCat(TDF_BrowserSeparator2);
193 // May be open.
f767df4e 194 list.AssignCat((itr.Value().HasAttribute() || itr.Value().HasChild())? "1" : "0");
7fd59977 195 split = Standard_True;
196 }
7fd59977 197 return list;
198}
199
200
201//=======================================================================
202//function : OpenAttributeList
203//purpose :
204// an item is composed as follows:
205// "DynamicType#MapIndex TransactionIndex Valid|Notvalid Forgotten|NotForgotten Backuped|NotBackuped"
206// The items are separated by "\\".
207//=======================================================================
208
209TCollection_AsciiString DDF_Browser::OpenAttributeList
210 (const TDF_Label& aLab)
211{
212 TCollection_AsciiString list;
213 Standard_Boolean split1 = Standard_False;
f767df4e 214 for (TDF_AttributeIterator itr(aLab,Standard_False);itr.More();itr.Next())
215 {
7fd59977 216 if (split1) list.AssignCat(TDF_BrowserSeparator1);
217 const Handle(TDF_Attribute)& att = itr.Value();
218 const Standard_Integer index = myAttMap.Add(att);
219 TCollection_AsciiString indexStr(index);
220 list.AssignCat(att->DynamicType()->Name());
221 list.AssignCat(TDF_BrowserSeparator3);
222 list.AssignCat(indexStr);
223 list.AssignCat(TDF_BrowserSeparator2);
224 list.AssignCat(att->Transaction());
225 // Valid.
226 list.AssignCat(TDF_BrowserSeparator2);
227 if (!att->IsValid()) list.AssignCat("Not");
228 list.AssignCat("Valid");
229 // Forgotten.
230 list.AssignCat(TDF_BrowserSeparator2);
231 if (!att->IsForgotten()) list.AssignCat("Not");
232 list.AssignCat("Forgotten");
233 // Backuped.
234 list.AssignCat(TDF_BrowserSeparator2);
235 if (!att->IsBackuped()) list.AssignCat("Not");
236 list.AssignCat("Backuped");
237 // May be open.
238 list.AssignCat(TDF_BrowserSeparator2);
239 DDF_AttributeBrowser* br = DDF_AttributeBrowser::FindBrowser(att);
f767df4e 240 list.AssignCat(br? "1" : "0");
7fd59977 241 split1 = Standard_True;
242 }
7fd59977 243 return list;
244}
245
246
247//=======================================================================
248//function : OpenAttribute
249//purpose : Attribute's intrinsic information given by an attribute browser.
250//=======================================================================
251
252TCollection_AsciiString DDF_Browser::OpenAttribute
253 (const Standard_Integer anIndex)
254{
255 TCollection_AsciiString list;
256 Handle(TDF_Attribute) att = myAttMap.FindKey(anIndex);
257 DDF_AttributeBrowser* br = DDF_AttributeBrowser::FindBrowser(att);
258 if (br) list = br->Open(att);
7fd59977 259 return list;
260}
261
262
263//=======================================================================
264//function : Information
265//purpose : Information about <myDF>.
266//=======================================================================
267
268TCollection_AsciiString DDF_Browser::Information() const
269{
270 TCollection_AsciiString list;
271 return list;
272}
273
274
275//=======================================================================
276//function : Information
277//purpose : Information about a label.
278//=======================================================================
279
280TCollection_AsciiString DDF_Browser::Information(const TDF_Label& /*aLab*/) const
281{
282 TCollection_AsciiString list;
283 return list;
284}
285
286
287//=======================================================================
288//function : Information
289//purpose : Information about an attribute.
290//=======================================================================
291
292TCollection_AsciiString DDF_Browser::Information(const Standard_Integer /*anIndex*/) const
293{
294 TCollection_AsciiString list;
295 return list;
296}