0031939: Coding - correction of spelling errors in comments [part 2]
[occt.git] / tools / DFBrowser / DFBrowser_Module.cxx
1 // Created on: 2017-06-16
2 // Created by: Natalia ERMOLAEVA
3 // Copyright (c) 2017 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement. 
15
16 #include <inspector/DFBrowser_Module.hxx>
17
18 #include <inspector/DFBrowser_Item.hxx>
19 #include <inspector/DFBrowser_ItemApplication.hxx>
20 #include <inspector/DFBrowser_ItemBase.hxx>
21 #include <inspector/DFBrowser_ItemRole.hxx>
22 #include <inspector/DFBrowser_Tools.hxx>
23 #include <inspector/DFBrowser_TreeModel.hxx>
24
25 #include <inspector/DFBrowserPane_AttributePane.hxx>
26 #include <inspector/DFBrowserPane_AttributePaneCreator.hxx>
27 #include <inspector/DFBrowserPane_ItemRole.hxx>
28 #include <inspector/DFBrowserPane_Tools.hxx>
29
30 #include <inspector/DFBrowserPaneXDE_AttributePaneCreator.hxx>
31 #include <inspector/DFBrowserPaneXDE_Tools.hxx>
32
33 #include <XCAFApp_Application.hxx>
34
35 #include <Standard_WarningsDisable.hxx>
36 #include <QItemSelectionModel>
37 #include <QMessageBox>
38 #include <Standard_WarningsRestore.hxx>
39
40 // =======================================================================
41 // function : Constructor
42 // purpose :
43 // =======================================================================
44 DFBrowser_Module::DFBrowser_Module()
45 : myOCAFViewModel (0)
46 {
47   RegisterPaneCreator (new DFBrowserPane_AttributePaneCreator());
48 }
49
50 // =======================================================================
51 // function : CreateViewModel
52 // purpose :
53 // =======================================================================
54 void DFBrowser_Module::CreateViewModel (void* theParent)
55 {
56   myOCAFViewModel = new DFBrowser_TreeModel ((QWidget*)theParent);
57   myOCAFViewModel->InitColumns();
58   myOCAFViewModel->SetModule (this);
59 }
60
61 // =======================================================================
62 // function : SetApplication
63 // purpose :
64 // =======================================================================
65 void DFBrowser_Module::SetApplication (const Handle(TDocStd_Application)& theApplication)
66 {
67   myOCAFViewModel->Init (theApplication);
68
69   myPaneCreators.clear();
70   RegisterPaneCreator (new DFBrowserPane_AttributePaneCreator());
71   if (!theApplication.IsNull() && DFBrowserPaneXDE_Tools::IsXDEApplication (theApplication))
72     RegisterPaneCreator (new DFBrowserPaneXDE_AttributePaneCreator (myPaneCreators[0]));
73 }
74
75 // =======================================================================
76 // function : SetExternalContext
77 // purpose :
78 // =======================================================================
79 void DFBrowser_Module::SetExternalContext (const Handle(Standard_Transient)& theContext)
80 {
81   myExternalContext = Handle(AIS_InteractiveContext)::DownCast (theContext);
82 }
83
84 // =======================================================================
85 // function : GetTDocStdApplication
86 // purpose :
87 // =======================================================================
88 Handle(TDocStd_Application) DFBrowser_Module::GetTDocStdApplication() const
89 {
90   return myOCAFViewModel->GetTDocStdApplication();
91 }
92
93 // =======================================================================
94 // function : UpdateTreeModel
95 // purpose :
96 // =======================================================================
97 void DFBrowser_Module::UpdateTreeModel()
98 {
99   QAbstractItemModel* aModel = GetOCAFViewModel();
100   QItemSelectionModel* aSelectionModel = GetOCAFViewSelectionModel();
101   if (!aModel || !aSelectionModel)
102     return;
103   aSelectionModel->clearSelection();
104
105   emit beforeUpdateTreeModel();
106   myOCAFViewModel->Reset();
107   myOCAFViewModel->EmitLayoutChanged();
108
109   SetInitialTreeViewSelection();
110 }
111
112 // =======================================================================
113 // function : SetInitialTreeViewSelection
114 // purpose :
115 // =======================================================================
116 void DFBrowser_Module::SetInitialTreeViewSelection()
117 {
118   QAbstractItemModel* aModel = GetOCAFViewModel();
119   QItemSelectionModel* aSelectionModel = GetOCAFViewSelectionModel();
120   if (!aModel || !aSelectionModel)
121     return;
122
123   // select a parent(application) item
124   aSelectionModel->select (aModel->index (0, 0), QItemSelectionModel::ClearAndSelect);
125 }
126
127 // =======================================================================
128 // function : FindAttribute
129 // purpose :
130 // =======================================================================
131 Handle(TDF_Attribute) DFBrowser_Module::FindAttribute (const QModelIndex& theIndex)
132 {
133   TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (theIndex);
134   if (!anItemBase)
135     return Handle(TDF_Attribute)();
136
137   DFBrowser_ItemPtr anItem = itemDynamicCast<DFBrowser_Item> (anItemBase);
138   return (anItem && anItem->HasAttribute()) ? anItem->GetAttribute() : Handle(TDF_Attribute)();
139 }
140
141 // =======================================================================
142 // function : GetAttributePane
143 // purpose :
144 // =======================================================================
145 DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (Handle(TDF_Attribute) theAttribute)
146 {
147   DFBrowserPane_AttributePaneAPI* aPane = 0;
148   if (theAttribute.IsNull())
149     return aPane;
150   return GetAttributePane (theAttribute->DynamicType()->Name());
151 }
152
153 // =======================================================================
154 // function : GetAttributePane
155 // purpose :
156 // =======================================================================
157 DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (Standard_CString theAttributeName)
158 {
159   DFBrowserPane_AttributePaneAPI* aPane = 0;
160
161   if (!myAttributeTypes.contains (theAttributeName))
162   {
163     aPane = CreateAttributePane (theAttributeName);
164     if (aPane)
165       myAttributeTypes[theAttributeName] = aPane;
166   }
167   else
168     aPane = myAttributeTypes[theAttributeName];
169
170   return aPane;
171 }
172
173 // =======================================================================
174 // function : GetAttributeInfo
175 // purpose :
176 // =======================================================================
177 QVariant DFBrowser_Module::GetAttributeInfo (Handle(TDF_Attribute) theAttribute, DFBrowser_Module* theModule,
178                                              int theRole, int theColumnId)
179 {
180   DFBrowserPane_AttributePane* anAttributePane = 0;
181   if (!theAttribute.IsNull())
182   {
183     DFBrowserPane_AttributePaneAPI* anAPIPane = theModule->GetAttributePane (theAttribute);
184     if (anAPIPane)
185       anAttributePane = dynamic_cast<DFBrowserPane_AttributePane*> (anAPIPane);
186   }
187
188   QVariant aValue;
189   if (anAttributePane)
190     aValue = anAttributePane->GetAttributeInfo (theAttribute,
191                theRole == DFBrowser_ItemRole_AdditionalInfo ? DFBrowserPane_ItemRole_ShortInfo : theRole,
192                theColumnId);
193   else
194     aValue = DFBrowserPane_AttributePane::GetAttributeInfoByType (theAttribute->DynamicType()->Name(), theRole, theColumnId);
195   return aValue;
196 }
197
198 // =======================================================================
199 // function : GetAttributeInfo
200 // purpose :
201 // =======================================================================
202 QVariant DFBrowser_Module::GetAttributeInfo (Standard_CString theAttributeName, DFBrowser_Module* theModule,
203                                              int theRole, int theColumnId)
204 {
205   DFBrowserPane_AttributePane* anAttributePane = 0;
206   DFBrowserPane_AttributePaneAPI* anAPIPane = theModule->GetAttributePane (theAttributeName);
207   if (anAPIPane)
208     anAttributePane = dynamic_cast<DFBrowserPane_AttributePane*> (anAPIPane);
209
210   QVariant aValue;
211   if (anAttributePane)
212   {
213     Handle(TDF_Attribute) anAttribute;
214     aValue = anAttributePane->GetAttributeInfo (anAttribute,
215                theRole == DFBrowser_ItemRole_AdditionalInfo ? DFBrowserPane_ItemRole_ShortInfo : theRole, theColumnId);
216   }
217   else
218     aValue = DFBrowserPane_AttributePane::GetAttributeInfoByType (theAttributeName, theRole, theColumnId);
219   return aValue;
220
221 }
222
223 // =======================================================================
224 // function : CreateAttributePane
225 // purpose :
226 // =======================================================================
227 DFBrowserPane_AttributePaneAPI* DFBrowser_Module::CreateAttributePane (Standard_CString theAttributeName)
228 {
229   DFBrowserPane_AttributePaneAPI* aPane = 0;
230   // iteration should be performed from the tail of the list, as latest added creator has
231   // larger priority
232   for (int aPaneCreatorId = myPaneCreators.size()-1; aPaneCreatorId >= 0 && !aPane; aPaneCreatorId--)
233     aPane = myPaneCreators[aPaneCreatorId]->CreateAttributePane (theAttributeName);
234   return aPane;
235 }