0029310: Coding - multiple compiler warnings in Inspectors
[occt.git] / tools / DFBrowserPane / DFBrowserPane_AttributePane.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/DFBrowserPane_AttributePane.hxx>
17 #include <inspector/DFBrowserPane_ItemRole.hxx>
18 #include <inspector/DFBrowserPane_TableView.hxx>
19 #include <inspector/DFBrowserPane_Tools.hxx>
20 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
21
22 #include <AIS_InteractiveObject.hxx>
23
24 #include <Standard_WarningsDisable.hxx>
25 #include <QGridLayout>
26 #include <QHeaderView>
27 #include <QItemSelectionModel>
28 #include <QTableView>
29 #include <QWidget>
30 #include <Standard_WarningsRestore.hxx>
31
32 // =======================================================================
33 // function : Constructor
34 // purpose :
35 // =======================================================================
36 DFBrowserPane_AttributePane::DFBrowserPane_AttributePane()
37 : DFBrowserPane_AttributePaneAPI(), myMainWidget (0), myTableView (0)
38 {
39   myPaneModel = new DFBrowserPane_AttributePaneModel();
40
41   getPaneModel()->SetColumnCount (getColumnCount());
42   getPaneModel()->SetHeaderValues (getHeaderValues(Qt::Horizontal), Qt::Horizontal);
43
44   mySelectionModels.push_back (new QItemSelectionModel (myPaneModel));
45 }
46
47 // =======================================================================
48 // function : GetWidget
49 // purpose :
50 // =======================================================================
51 QWidget* DFBrowserPane_AttributePane::GetWidget (QWidget* theParent, const bool isToCreate)
52 {
53   if (!myMainWidget && isToCreate)
54     myMainWidget = CreateWidget (theParent);
55   return myMainWidget;
56 }
57
58 // =======================================================================
59 // function : CreateWidget
60 // purpose :
61 // =======================================================================
62 QWidget* DFBrowserPane_AttributePane::CreateWidget (QWidget* theParent)
63 {
64   QWidget* aMainWidget = new QWidget (theParent);
65   aMainWidget->setVisible (false);
66
67   myTableView = new DFBrowserPane_TableView (aMainWidget, getTableColumnWidths());
68   myTableView->SetModel (myPaneModel);
69   QTableView* aTableView = myTableView->GetTableView();
70   DFBrowserPane_AttributePaneModel* aPaneModel = dynamic_cast<DFBrowserPane_AttributePaneModel*>(myPaneModel);
71   if (aPaneModel)
72   {
73     if (aPaneModel->GetOrientation() == Qt::Vertical)
74       aTableView->horizontalHeader()->setVisible (!aPaneModel->HeaderValues (Qt::Horizontal).isEmpty());
75     else
76       aTableView->verticalHeader()->setVisible (!aPaneModel->HeaderValues (Qt::Vertical).isEmpty());
77   }
78   aTableView->setSelectionModel (mySelectionModels.front());
79   aTableView->setSelectionBehavior (QAbstractItemView::SelectRows);
80
81   QGridLayout* aLay = new QGridLayout (aMainWidget);
82   aLay->setContentsMargins (0, 0, 0, 0);
83   aLay->addWidget (myTableView);
84
85   return aMainWidget;
86 }
87
88 // =======================================================================
89 // function : Init
90 // purpose :
91 // =======================================================================
92 void DFBrowserPane_AttributePane::Init (const Handle(TDF_Attribute)& theAttribute)
93 {
94   QList<QVariant> aValues;
95   GetValues (theAttribute, aValues);
96   getPaneModel()->Init (aValues);
97
98   if (myTableView)
99     myTableView->GetTableView()->resizeColumnToContents (0);
100 }
101
102 // =======================================================================
103 // function : GetAttributeInfo
104 // purpose :
105 // =======================================================================
106 QVariant DFBrowserPane_AttributePane::GetAttributeInfo (const Handle(TDF_Attribute)& theAttribute,
107                                                         int theRole, int theColumnId)
108 {
109   switch (theRole)
110   {
111     case DFBrowserPane_ItemRole_ShortInfo:
112     {
113       QList<QVariant> aValues;
114       GetShortAttributeInfo (theAttribute, aValues);
115       QStringList anInfoList;
116       for (QList<QVariant>::const_iterator aValuesIt = aValues.begin(); aValuesIt != aValues.end(); aValuesIt++)
117         anInfoList.append (aValuesIt->toString());
118       return QVariant (anInfoList.join (", "));
119     }
120     default:
121       return DFBrowserPane_AttributePane::GetAttributeInfoByType (theAttribute.IsNull() ? ""
122                                             : theAttribute->DynamicType()->Name(), theRole, theColumnId);
123   }
124 }
125
126 // =======================================================================
127 // function : GetShortAttributeInfo
128 // purpose :
129 // =======================================================================
130 void DFBrowserPane_AttributePane::GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
131 {
132   QList<QVariant> aValues;
133   GetValues(theAttribute, aValues);
134
135   for (int aValuesEvenId  = 1; aValuesEvenId < aValues.size(); aValuesEvenId = aValuesEvenId + 2)
136     theValues.append (aValues[aValuesEvenId]);
137 }
138
139 // =======================================================================
140 // function : GetAttributeInfoByType
141 // purpose :
142 // =======================================================================
143 QVariant DFBrowserPane_AttributePane::GetAttributeInfoByType (const Standard_CString& theAttributeName,
144                                                               int theRole, int theColumnId)
145 {
146   if (theColumnId != 0)
147     return QVariant();
148
149   switch (theRole)
150   {
151     case Qt::DisplayRole:
152     case Qt::ToolTipRole:    return QVariant (theAttributeName);
153     case Qt::DecorationRole: return QIcon (":/icons/attribute.png");
154     case DFBrowserPane_ItemRole_Decoration_40x40: return QIcon (":/icons/attribute_40x40.png");
155     default: break;
156   }
157   return QVariant();
158 }
159
160 // =======================================================================
161 // function : getPaneModel
162 // purpose :
163 // =======================================================================
164 DFBrowserPane_AttributePaneModel* DFBrowserPane_AttributePane::getPaneModel() const
165 {
166   return dynamic_cast<DFBrowserPane_AttributePaneModel*> (myPaneModel);
167 }
168
169 // =======================================================================
170 // function : getTableColumnWidths
171 // purpose :
172 // =======================================================================
173 QMap<int, int> DFBrowserPane_AttributePane::getTableColumnWidths() const
174 {
175   QMap<int, int> aValues;
176   for (int aColumnId = 0, aCount = getPaneModel()->columnCount(); aColumnId < aCount; aColumnId++)
177     aValues.insert (aColumnId, DFBrowserPane_Tools::DefaultPanelColumnWidth (aColumnId));
178   return aValues;
179 }