0029310: Coding - multiple compiler warnings in Inspectors
[occt.git] / tools / VInspector / VInspector_ViewModel.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/VInspector_ViewModel.hxx>
14bbbdcb 17
0cb512c0 18#include <inspector/VInspector_ItemContext.hxx>
19#include <inspector/VInspector_ItemEntityOwner.hxx>
20#include <inspector/VInspector_ItemPresentableObject.hxx>
21#include <inspector/VInspector_ItemSensitiveEntity.hxx>
14bbbdcb 22#include <SelectBasics_EntityOwner.hxx>
23
130eb114 24#include <Standard_WarningsDisable.hxx>
14bbbdcb 25#include <QItemSelectionModel>
26#include <QStringList>
130eb114 27#include <Standard_WarningsRestore.hxx>
14bbbdcb 28
29// =======================================================================
30// function : Constructor
31// purpose :
32// =======================================================================
33VInspector_ViewModel::VInspector_ViewModel (QObject* theParent)
34 : TreeModel_ModelBase (theParent)
35{
36 for (int aColumnId = 0, aNbColumns = columnCount(); aColumnId < aNbColumns; aColumnId++)
37 myRootItems.insert (aColumnId, VInspector_ItemContext::CreateItem (TreeModel_ItemBasePtr(), 0, aColumnId));
38
39 m_pRootItem = myRootItems[0];
40}
41
42// =======================================================================
43// function : GetContext
44// purpose :
45// =======================================================================
46const Handle(AIS_InteractiveContext)& VInspector_ViewModel::GetContext() const
47{
48 return itemDynamicCast<VInspector_ItemContext>(RootItem (0))->GetContext();
49}
50
51// =======================================================================
52// function : SetContext
53// purpose :
54// =======================================================================
55void VInspector_ViewModel::SetContext (const Handle(AIS_InteractiveContext)& theContext)
56{
57 // fill root item by the application
58 for (int aColId = 0, aNbColumns = columnCount(); aColId < aNbColumns; aColId++)
59 itemDynamicCast<VInspector_ItemContext>(myRootItems[aColId])->SetContext (theContext);
60 EmitLayoutChanged();
61}
62
63// =======================================================================
64// function : FindPointers
65// purpose :
66// =======================================================================
67QModelIndexList VInspector_ViewModel::FindPointers (const QStringList& thePointers)
68{
69 QModelIndexList anIndices;
70 QModelIndex aParentIndex = index (0, 0);
71 TreeModel_ItemBasePtr aParentItem = TreeModel_ModelBase::GetItemByIndex (aParentIndex); // context item
72 for (int aRowId = 0, aCount = aParentItem->rowCount(); aRowId < aCount; aRowId++)
73 {
74 QModelIndex anIndex = index (aRowId, 0, aParentIndex);
75 TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (anIndex);
76 VInspector_ItemPresentableObjectPtr anItemPrs = itemDynamicCast<VInspector_ItemPresentableObject>(anItemBase);
77 if (!anItemPrs)
78 continue;
79 if (thePointers.contains (anItemPrs->PointerInfo()))
80 anIndices.append (anIndex);
81 }
82 return anIndices;
83}
84
0cb512c0 85// =======================================================================
86// function : FindIndex
87// purpose :
88// =======================================================================
89QModelIndex VInspector_ViewModel::FindIndex (const Handle(AIS_InteractiveObject)& thePresentation) const
90{
91 QModelIndex aParentIndex = index (0, 0);
92 TreeModel_ItemBasePtr aParentItem = TreeModel_ModelBase::GetItemByIndex (aParentIndex); // context item
93 for (int aRowId = 0, aCount = aParentItem->rowCount(); aRowId < aCount; aRowId++)
94 {
95 QModelIndex anIndex = index (aRowId, 0, aParentIndex);
96 TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (anIndex);
97 VInspector_ItemPresentableObjectPtr anItemPrs = itemDynamicCast<VInspector_ItemPresentableObject>(anItemBase);
98 if (!anItemPrs)
99 continue;
100 if (anItemPrs->GetInteractiveObject() == thePresentation)
101 return anIndex;
102 }
103 return QModelIndex();
104}
105
14bbbdcb 106// =======================================================================
107// function : headerData
108// purpose :
109// =======================================================================
110QVariant VInspector_ViewModel::headerData (int theSection, Qt::Orientation theOrientation, int theRole) const
111{
112 if (theOrientation != Qt::Horizontal || theRole != Qt::DisplayRole)
113 return QVariant();
114
115 switch (theSection)
116 {
117 case 0: return "Name";
118 case 1: return "Size";
119 case 2: return "Pointer";
120 case 3: return "Shape type";
121 case 4: return "Selection";
122 case 5: return "Base Sensitive";
123 case 6: return "Sensitivity";
124 case 7: return "SubElements";
125 case 8: return "Deviation/Deflectiton/Update/Priority";
126 //Auto Triangulation
127 default: break;
128 }
129 return QVariant();
130}
131
132// =======================================================================
133// function : GetSelectedOwners
134// purpose :
135// =======================================================================
136void VInspector_ViewModel::GetSelectedOwners (QItemSelectionModel* theSelectionModel,
137 NCollection_List<Handle(SelectBasics_EntityOwner)>& theOwners)
138{
139 if (!theSelectionModel)
140 return;
141 QList<TreeModel_ItemBasePtr> anItems;
142
143 QModelIndexList anIndices = theSelectionModel->selectedIndexes();
144 for (QModelIndexList::const_iterator anIndicesIt = anIndices.begin(); anIndicesIt != anIndices.end(); anIndicesIt++)
145 {
146 TreeModel_ItemBasePtr anItem = TreeModel_ModelBase::GetItemByIndex (*anIndicesIt);
147 if (!anItem || anItems.contains (anItem))
148 continue;
149 anItems.append (anItem);
150 }
151
152 QList<size_t> aSelectedIds; // Remember of selected address in order to avoid duplicates
153 for (QList<TreeModel_ItemBasePtr>::const_iterator anItemIt = anItems.begin(); anItemIt != anItems.end(); anItemIt++)
154 {
155 TreeModel_ItemBasePtr anItem = *anItemIt;
156 Handle(SelectBasics_EntityOwner) anEntityOwner;
157 if (VInspector_ItemEntityOwnerPtr anOwnerItem = itemDynamicCast<VInspector_ItemEntityOwner>(anItem))
158 {
159 anEntityOwner = anOwnerItem->EntityOwner();
160 }
161 else if (VInspector_ItemSensitiveEntityPtr aSensItem = itemDynamicCast<VInspector_ItemSensitiveEntity>(anItem))
162 {
163 anEntityOwner = aSensItem->GetSensitiveEntity()->BaseSensitive()->OwnerId();
164 }
165 if (anEntityOwner.IsNull())
166 continue;
167 if (aSelectedIds.contains ((size_t)anEntityOwner.operator->()))
168 continue;
169 aSelectedIds.append ((size_t)anEntityOwner.operator->());
170 if (!anEntityOwner.IsNull())
171 theOwners.Append (anEntityOwner);
172 }
173}