Integration of OCCT 6.5.0 from SVN
[occt.git] / src / DDocStd / DDocStd_ToolsCommands.cxx
1 // File:        DDocStd_ToolsCommands.cxx
2 // Created:     Wed Mar  1 14:07:43 2000
3 // Author:      Denis PASCAL
4 //              <dp@dingox.paris1.matra-dtv.fr>
5
6
7 #include <DDocStd.hxx>
8
9 #include <Draw.hxx>
10 #include <Draw_Interpretor.hxx>
11 #include <TDocStd_Document.hxx>
12 #include <TDF_Label.hxx>
13 #include <TCollection_AsciiString.hxx>
14 #include <TDF_Tool.hxx>
15 #include <TDF_ListIteratorOfAttributeDeltaList.hxx>
16 #include <TDF_AttributeDelta.hxx>
17 #include <TDF_Delta.hxx> 
18 #include <TDF_AttributeDelta.hxx> 
19 #include <TDF_DeltaOnAddition.hxx> 
20 #include <TDF_DeltaOnForget.hxx>
21 #include <TDF_DeltaOnResume.hxx>
22 #include <TDF_DeltaOnRemoval.hxx>
23 #include <TDF_DeltaOnModification.hxx>
24 #include <TDF_AttributeDeltaList.hxx>
25 #include <TDF_ListIteratorOfAttributeDeltaList.hxx> 
26 #include <Standard_DomainError.hxx>
27
28
29
30 //=======================================================================
31 //function : UpdateXLinks 
32 //=======================================================================
33
34 static Standard_Integer DDocStd_UpdateXLinks(Draw_Interpretor& /*di*/,Standard_Integer n, const char** a)
35 {
36   if (n < 3) return 1;
37   Handle(TDocStd_Document) D;
38   if (!DDocStd::GetDocument(a[1],D)) return 1;
39   TCollection_AsciiString Entry(a[2]);
40   D->UpdateReferences(Entry);
41   // DDocStd::DisplayModified(a[1]);
42   return 0;
43 }
44
45 //=======================================================================
46 //function : DDocStd_DumpCommand
47 //purpose  : DumpDocument (DOC)
48 //=======================================================================
49
50 static Standard_Integer DDocStd_DumpCommand (Draw_Interpretor& di,
51                                              Standard_Integer nb, 
52                                              const char** arg) 
53 {   
54   if (nb == 2) {   
55     Handle(TDocStd_Document) D;       
56     if (!DDocStd::GetDocument(arg[1],D)) return 1;
57     //
58     TDF_AttributeDeltaList added, forgoten, resumed, removed, modified;
59     Handle(TDF_AttributeDelta) AD;
60     if (D->GetUndos().IsEmpty()) {   
61       di << "no UNDO available" << "\n";
62       return 0;
63     }
64     Handle(TDF_Delta) DELTA = D->GetUndos().Last();
65     TDF_ListIteratorOfAttributeDeltaList it (DELTA->AttributeDeltas());
66     for (;it.More();it.Next()) {
67       AD = it.Value();
68       if      (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnAddition)))     {added.Append(AD);}
69       else if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnForget)))       {forgoten.Append(AD);}
70       else if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnResume)))       {resumed.Append(AD);}
71       else if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnRemoval)))      {removed.Append(AD);}
72       else if (AD->IsKind(STANDARD_TYPE(TDF_DeltaOnModification))) {modified.Append(AD);}
73       else {
74         Standard_DomainError::Raise("DDocStd_DumpCommand : unknown delta");
75       }
76     }
77     //
78     TCollection_AsciiString string;   
79     //  
80     TCollection_AsciiString name; // (D->Name());
81     di << "ADDED    :"; 
82     it.Initialize(added);
83     if (it.More()) di << "\n";
84     else di << " empty" << "\n";
85     for (;it.More();it.Next()) {   
86       TDF_Tool::Entry (it.Value()->Label(),string);
87       di << "- " << string.ToCString() << " ";      
88       di <<  it.Value()->Attribute()->DynamicType()->Name();
89       di << "\n";
90     }
91     //
92     // forgoten    
93     di << "FORGOTEN :";
94     it.Initialize(forgoten);    
95     if (it.More()) di << "\n";
96     else di << " empty" << "\n";
97     for (;it.More();it.Next()) {   
98       TDF_Tool::Entry (it.Value()->Label(),string);
99       di << "- " << string.ToCString() << " ";
100       di <<  it.Value()->Attribute()->DynamicType()->Name();
101       di << "\n";
102     }
103     //
104     // resumed
105     di << "RESUMED  :"; 
106     it.Initialize(resumed);
107     if (it.More()) di << "\n";
108     else di << " empty" << "\n";
109     for (;it.More();it.Next()) {   
110       TDF_Tool::Entry (it.Value()->Label(),string);
111       di << "- " << string.ToCString() << " ";
112       di <<  it.Value()->Attribute()->DynamicType()->Name();
113       di << "\n";
114     }
115     //
116     // removed  
117     di << "REMOVED  :";     
118     it.Initialize(removed);
119     if (it.More()) di << "\n";
120     else di << " empty" << "\n";
121     for (;it.More();it.Next()) {   
122       TDF_Tool::Entry (it.Value()->Label(),string);
123       di << "- " << string.ToCString() << " "; 
124       di <<  it.Value()->Attribute()->DynamicType()->Name();
125       di << "\n";
126     }
127     //
128     // modified  
129     di << "MODIFIED :";   
130     it.Initialize(modified);
131     if (it.More()) di << "\n";
132     else di << " empty" << "\n";
133     for (;it.More();it.Next()) {   
134       TDF_Tool::Entry (it.Value()->Label(),string);
135       di << "- " << string.ToCString() << " ";
136       di <<  it.Value()->Attribute()->DynamicType()->Name();
137       di << "\n";
138     }
139     return 0;
140   } 
141   di << "TDocStd_DumpCommand : Error" << "\n";
142   return 1;
143 }
144
145
146
147 //=======================================================================
148 //function : ModificationCommands
149 //purpose  : 
150 //=======================================================================
151
152 void DDocStd::ToolsCommands(Draw_Interpretor& theCommands) 
153 {
154   static Standard_Boolean done = Standard_False;
155   if (done) return;
156   done = Standard_True;
157
158   const char* g = "DDocStd commands";
159
160
161   theCommands.Add("UpdateXLinks","UpdateXLinks DocName DocEntry",
162                   __FILE__, DDocStd_UpdateXLinks, g);  
163
164   theCommands.Add ("DumpCommand", 
165                    "DumpCommand (DOC)",
166                    __FILE__, DDocStd_DumpCommand, g);   
167
168 }
169