0029559: Samples - wrong copyright statement in FuncDemo
[occt.git] / tools / DFBrowser / DFBrowser_Module.cxx
CommitLineData
14bbbdcb 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
0cb512c0 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>
14bbbdcb 32
33#include <XCAFApp_Application.hxx>
34
35#include <QItemSelectionModel>
36#include <QMessageBox>
37
38// =======================================================================
39// function : Constructor
40// purpose :
41// =======================================================================
42DFBrowser_Module::DFBrowser_Module()
43: myOCAFViewModel (0)
44{
45 RegisterPaneCreator (new DFBrowserPane_AttributePaneCreator());
46}
47
48// =======================================================================
49// function : CreateViewModel
50// purpose :
51// =======================================================================
52void DFBrowser_Module::CreateViewModel (void* theParent)
53{
54 myOCAFViewModel = new DFBrowser_TreeModel ((QWidget*)theParent, this);
55}
56
57// =======================================================================
58// function : SetApplication
59// purpose :
60// =======================================================================
61void DFBrowser_Module::SetApplication (const Handle(TDocStd_Application)& theApplication)
62{
63 myOCAFViewModel->Init (theApplication);
64
65 myPaneCreators.clear();
66 RegisterPaneCreator (new DFBrowserPane_AttributePaneCreator());
67 if (!theApplication.IsNull() && DFBrowserPaneXDE_Tools::IsXDEApplication (theApplication))
68 RegisterPaneCreator (new DFBrowserPaneXDE_AttributePaneCreator (myPaneCreators[0]));
69}
70
71// =======================================================================
72// function : SetExternalContext
73// purpose :
74// =======================================================================
75void DFBrowser_Module::SetExternalContext (const Handle(Standard_Transient)& theContext)
76{
77 myExternalContext = Handle(AIS_InteractiveContext)::DownCast (theContext);
78}
79
80// =======================================================================
81// function : GetTDocStdApplication
82// purpose :
83// =======================================================================
84Handle(TDocStd_Application) DFBrowser_Module::GetTDocStdApplication() const
85{
86 return myOCAFViewModel->GetTDocStdApplication();
87}
88
89// =======================================================================
90// function : UpdateTreeModel
91// purpose :
92// =======================================================================
93void DFBrowser_Module::UpdateTreeModel()
94{
95 QAbstractItemModel* aModel = GetOCAFViewModel();
96 QItemSelectionModel* aSelectionModel = GetOCAFViewSelectionModel();
97 if (!aModel || !aSelectionModel)
98 return;
99 aSelectionModel->clearSelection();
100
101 emit beforeUpdateTreeModel();
102 myOCAFViewModel->Reset();
103 myOCAFViewModel->EmitLayoutChanged();
104
105 SetInitialTreeViewSelection();
106}
107
108// =======================================================================
109// function : SetInitialTreeViewSelection
110// purpose :
111// =======================================================================
112void DFBrowser_Module::SetInitialTreeViewSelection()
113{
114 QAbstractItemModel* aModel = GetOCAFViewModel();
115 QItemSelectionModel* aSelectionModel = GetOCAFViewSelectionModel();
116 if (!aModel || !aSelectionModel)
117 return;
118
119 // select a parent(aplication) item
120 aSelectionModel->select (aModel->index (0, 0), QItemSelectionModel::ClearAndSelect);
121}
122
123// =======================================================================
124// function : FindAttribute
125// purpose :
126// =======================================================================
127Handle(TDF_Attribute) DFBrowser_Module::FindAttribute (const QModelIndex& theIndex)
128{
129 TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (theIndex);
130 if (!anItemBase)
131 return Handle(TDF_Attribute)();
132
133 DFBrowser_ItemPtr anItem = itemDynamicCast<DFBrowser_Item> (anItemBase);
134 return (anItem && anItem->HasAttribute()) ? anItem->GetAttribute() : Handle(TDF_Attribute)();
135}
136
137// =======================================================================
138// function : GetAttributePane
139// purpose :
140// =======================================================================
141DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (Handle(TDF_Attribute) theAttribute)
142{
143 DFBrowserPane_AttributePaneAPI* aPane = 0;
144 if (theAttribute.IsNull())
145 return aPane;
146 return GetAttributePane (theAttribute->DynamicType()->Name());
147}
148
149// =======================================================================
150// function : GetAttributePane
151// purpose :
152// =======================================================================
153DFBrowserPane_AttributePaneAPI* DFBrowser_Module::GetAttributePane (const Standard_CString& theAttributeName)
154{
155 DFBrowserPane_AttributePaneAPI* aPane = 0;
156
157 if (!myAttributeTypes.contains (theAttributeName))
158 {
159 aPane = CreateAttributePane (theAttributeName);
160 if (aPane)
161 myAttributeTypes[theAttributeName] = aPane;
162 }
163 else
164 aPane = myAttributeTypes[theAttributeName];
165
166 return aPane;
167}
168
169// =======================================================================
170// function : GetAttributeInfo
171// purpose :
172// =======================================================================
173QVariant DFBrowser_Module::GetAttributeInfo (Handle(TDF_Attribute) theAttribute, DFBrowser_Module* theModule,
174 int theRole, int theColumnId)
175{
176 DFBrowserPane_AttributePane* anAttributePane = 0;
177 if (!theAttribute.IsNull())
178 {
179 DFBrowserPane_AttributePaneAPI* anAPIPane = theModule->GetAttributePane (theAttribute);
180 if (anAPIPane)
181 anAttributePane = dynamic_cast<DFBrowserPane_AttributePane*> (anAPIPane);
182 }
183
184 QVariant aValue;
185 if (anAttributePane)
186 aValue = anAttributePane->GetAttributeInfo (theAttribute,
187 theRole == DFBrowser_ItemRole_AdditionalInfo ? DFBrowserPane_ItemRole_ShortInfo : theRole,
188 theColumnId);
189 else
190 aValue = DFBrowserPane_AttributePane::GetAttributeInfoByType (theAttribute->DynamicType()->Name(), theRole, theColumnId);
191 return aValue;
192}
193
194// =======================================================================
195// function : GetAttributeInfo
196// purpose :
197// =======================================================================
198QVariant DFBrowser_Module::GetAttributeInfo (const Standard_CString& theAttributeName, DFBrowser_Module* theModule,
199 int theRole, int theColumnId)
200{
201 DFBrowserPane_AttributePane* anAttributePane = 0;
202 DFBrowserPane_AttributePaneAPI* anAPIPane = theModule->GetAttributePane (theAttributeName);
203 if (anAPIPane)
204 anAttributePane = dynamic_cast<DFBrowserPane_AttributePane*> (anAPIPane);
205
206 QVariant aValue;
207 if (anAttributePane)
208 {
209 Handle(TDF_Attribute) anAttribute;
210 aValue = anAttributePane->GetAttributeInfo (anAttribute,
211 theRole == DFBrowser_ItemRole_AdditionalInfo ? DFBrowserPane_ItemRole_ShortInfo : theRole, theColumnId);
212 }
213 else
214 aValue = DFBrowserPane_AttributePane::GetAttributeInfoByType (theAttributeName, theRole, theColumnId);
215 return aValue;
216
217}
218
219// =======================================================================
220// function : CreateAttributePane
221// purpose :
222// =======================================================================
223DFBrowserPane_AttributePaneAPI* DFBrowser_Module::CreateAttributePane (const Standard_CString& theAttributeName)
224{
225 DFBrowserPane_AttributePaneAPI* aPane = 0;
226 // iteration should be performed from the tail of the list, as latest added creator has
227 // larger priority
228 for (int aPaneCreatorId = myPaneCreators.size()-1; aPaneCreatorId >= 0 && !aPane; aPaneCreatorId--)
229 aPane = myPaneCreators[aPaneCreatorId]->CreateAttributePane (theAttributeName);
230 return aPane;
231}