0029807: [Regression to 7.0.0] Impossible to cut cone from prism
[occt.git] / tools / VInspector / VInspector_ItemSelectMgrFilter.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/VInspector_ItemSelectMgrFilter.hxx>
17 #include <inspector/VInspector_ItemFolderObject.hxx>
18 #include <inspector/VInspector_Tools.hxx>
19
20 #include <SelectMgr_AndFilter.hxx>
21 #include <SelectMgr_OrFilter.hxx>
22
23 #include <Standard_WarningsDisable.hxx>
24 #include <QIcon>
25 #include <Standard_WarningsRestore.hxx>
26
27 // =======================================================================
28 // function : initValue
29 // purpose :
30 // =======================================================================
31 QVariant VInspector_ItemSelectMgrFilter::initValue (int theItemRole) const
32 {
33   if (theItemRole == Qt::DisplayRole || theItemRole == Qt::ToolTipRole)
34   {
35     Handle(SelectMgr_Filter) aFilter = GetFilter();
36     switch (Column())
37     {
38       case 0: return theItemRole == Qt::ToolTipRole ? QVariant ("")
39                                                     : QVariant (aFilter->DynamicType()->Name());
40       case 1: return rowCount() > 0 ? QVariant (rowCount()) : QVariant();
41       case 2: return VInspector_Tools::GetPointerInfo (aFilter, true).ToCString();
42       default: break;
43     }
44   }
45   if (Column() == 0 && theItemRole == Qt::DecorationRole)
46   {
47     Handle(SelectMgr_Filter) aFilter = GetFilter();
48     if (aFilter->IsKind (STANDARD_TYPE (SelectMgr_AndFilter))) return QIcon (":/icons/treeview_and.png");
49     if (aFilter->IsKind (STANDARD_TYPE (SelectMgr_OrFilter))) return QIcon (":/icons/treeview_or.png");
50   }
51   return QVariant();
52 }
53
54 // =======================================================================
55 // function : initRowCount
56 // purpose :
57 // =======================================================================
58 int VInspector_ItemSelectMgrFilter::initRowCount() const
59 {
60   Handle(SelectMgr_Filter) aFilter = GetFilter();
61   if (aFilter->IsKind (STANDARD_TYPE (SelectMgr_CompositionFilter)))
62   {
63     Handle(SelectMgr_CompositionFilter) aCompositionFilter = Handle(SelectMgr_CompositionFilter)::DownCast (aFilter);
64     return aCompositionFilter->StoredFilters().Size();
65   }
66   return 0;
67 }
68
69 // =======================================================================
70 // function : createChild
71 // purpose :
72 // =======================================================================
73 TreeModel_ItemBasePtr VInspector_ItemSelectMgrFilter::createChild (int theRow, int theColumn)
74 {
75   return VInspector_ItemSelectMgrFilter::CreateItem(currentItem(), theRow, theColumn);
76 }
77
78 // =======================================================================
79 // function : Init
80 // purpose :
81 // =======================================================================
82 void VInspector_ItemSelectMgrFilter::Init()
83 {
84   Handle(AIS_InteractiveContext) aContext = GetContext();
85
86   Handle(SelectMgr_Filter) aFilter;
87
88   Handle(SelectMgr_CompositionFilter) aParentCompositeFilter;
89   VInspector_ItemSelectMgrFilterPtr aParentSelectMgrItem = itemDynamicCast<VInspector_ItemSelectMgrFilter> (Parent());
90   if (aParentSelectMgrItem)
91     aParentCompositeFilter = Handle(SelectMgr_CompositionFilter)::DownCast (aParentSelectMgrItem->GetFilter());
92
93   int aRowId = Row();
94   const SelectMgr_ListOfFilter& aFilters = !aParentCompositeFilter.IsNull() ? aParentCompositeFilter->StoredFilters()
95     : aContext->Filters();
96   int aCurrentIndex = 0;
97   for (SelectMgr_ListOfFilter::Iterator aFiltersIt (aFilters); aFiltersIt.More(); aFiltersIt.Next(), aCurrentIndex++)
98   {
99     if (aCurrentIndex != aRowId)
100       continue;
101     aFilter = aFiltersIt.Value();
102     break;
103   }
104   setFilter (aFilter);
105   TreeModel_ItemBase::Init(); // to use getFilter() without circling initialization
106 }
107
108 // =======================================================================
109 // function : Reset
110 // purpose :
111 // =======================================================================
112 void VInspector_ItemSelectMgrFilter::Reset()
113 {
114   VInspector_ItemBase::Reset();
115
116   setFilter (NULL);
117 }
118
119 // =======================================================================
120 // function : initItem
121 // purpose :
122 // =======================================================================
123 void VInspector_ItemSelectMgrFilter::initItem() const
124 {
125   if (IsInitialized())
126     return;
127   const_cast<VInspector_ItemSelectMgrFilter*>(this)->Init();
128 }
129
130 // =======================================================================
131 // function : GetInteractiveObject
132 // purpose :
133 // =======================================================================
134 Handle(SelectMgr_Filter) VInspector_ItemSelectMgrFilter::GetFilter() const
135 {
136   initItem();
137   return myFilter;
138 }