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