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 | // ======================================================================= |
34 | DFBrowserPane_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 | // ======================================================================= |
49 | QWidget* 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 | // ======================================================================= |
60 | QWidget* 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 | // ======================================================================= |
90 | void 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 | // ======================================================================= |
104 | QVariant 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 | // ======================================================================= |
128 | void 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 | // ======================================================================= |
141 | QVariant 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 | // ======================================================================= |
162 | DFBrowserPane_AttributePaneModel* DFBrowserPane_AttributePane::getPaneModel() const |
163 | { |
164 | return dynamic_cast<DFBrowserPane_AttributePaneModel*> (myPaneModel); |
165 | } |
166 | |
167 | // ======================================================================= |
168 | // function : getTableColumnWidths |
169 | // purpose : |
170 | // ======================================================================= |
171 | QMap<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 | } |