0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowserPaneXDE / DFBrowserPaneXDE_XCAFDocShapeMapTool.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/DFBrowserPaneXDE_XCAFDocShapeMapTool.hxx>
17
18 #include <inspector/DFBrowserPane_AttributePaneModel.hxx>
19 #include <inspector/DFBrowserPane_HelperExport.hxx>
20 #include <inspector/DFBrowserPane_ItemDelegateButton.hxx>
21 #include <inspector/DFBrowserPane_TableView.hxx>
22 #include <inspector/DFBrowserPane_Tools.hxx>
23
24 #include <AIS_Shape.hxx>
25 #include <BRepTools.hxx>
26 #include <BRep_Builder.hxx>
27 #include <TopoDS_Shape.hxx>
28 #include <TopoDS_Compound.hxx>
29 #include <XCAFDoc_ShapeMapTool.hxx>
30
31 #include <QEvent>
32 #include <QFileDialog>
33 #include <QGridLayout>
34 #include <QHeaderView>
35 #include <QIcon>
36 #include <QMap>
37 #include <QPainter>
38 #include <QStyledItemDelegate>
39 #include <QTableView>
40 #include <QVariant>
41 #include <QWidget>
42
43 const int COLUMN_EXPORT_WIDTH = 20;
44 const int COLUMN_TYPE_WIDTH = 70;
45 const int COLUMN_POINTER_WIDTH = 110;
46
47 // =======================================================================
48 // function : Constructor
49 // purpose :
50 // =======================================================================
51 DFBrowserPaneXDE_XCAFDocShapeMapTool::DFBrowserPaneXDE_XCAFDocShapeMapTool()
52 : DFBrowserPane_AttributePane(), myHelperExport (0)
53 {
54   QList<QVariant> aHeaderValues;
55   aHeaderValues << "TShape"<< "Type" << "";
56
57   getPaneModel()->SetHeaderValues (aHeaderValues, Qt::Horizontal);
58   getPaneModel()->SetColumnCount (aHeaderValues.count());
59   getPaneModel()->SetItalicColumns (QList<int>());
60 }
61
62 // =======================================================================
63 // function : CreateWidget
64 // purpose :
65 // =======================================================================
66 QWidget* DFBrowserPaneXDE_XCAFDocShapeMapTool::CreateWidget (QWidget* theParent)
67 {
68   QWidget* aMainWidget = new QWidget (theParent);
69   aMainWidget->setVisible (false);
70
71   myTableView = new DFBrowserPane_TableView (aMainWidget);
72   myTableView->SetModel (myPaneModel);
73   QTableView* aTableView = myTableView->GetTableView();
74   aTableView->setSelectionModel (mySelectionModels.front());
75   aTableView->horizontalHeader()->setStretchLastSection (false);
76
77   aTableView->setColumnWidth (0, COLUMN_POINTER_WIDTH);
78   aTableView->setColumnWidth (1, COLUMN_TYPE_WIDTH);
79   aTableView->setColumnWidth (2, COLUMN_EXPORT_WIDTH);
80   aTableView->verticalHeader()->setVisible (true);
81   DFBrowserPane_ItemDelegateButton* anItemDelegate = new DFBrowserPane_ItemDelegateButton (aTableView,
82                                                                                            ":/icons/export_shape.png");
83   QObject::connect (anItemDelegate, SIGNAL (buttonPressed (const QModelIndex&)),
84                     &myHelperExport, SLOT (OnButtonPressed (const QModelIndex&)));
85   aTableView->setItemDelegateForColumn (2, anItemDelegate);
86
87   QGridLayout* aLay = new QGridLayout (aMainWidget);
88   aLay->setContentsMargins (0, 0, 0, 0);
89   aLay->addWidget (myTableView, 0, 0);
90
91   return aMainWidget;
92 }
93
94 // =======================================================================
95 // function : Init
96 // purpose :
97 // =======================================================================
98 void DFBrowserPaneXDE_XCAFDocShapeMapTool::Init (const Handle(TDF_Attribute)& theAttribute)
99 {
100   DFBrowserPane_AttributePaneAPI::Init (theAttribute);
101 }
102
103 // =======================================================================
104 // function : GetValues
105 // purpose :
106 // =======================================================================
107 void DFBrowserPaneXDE_XCAFDocShapeMapTool::GetValues (const Handle(TDF_Attribute)& theAttribute, QList<QVariant>& theValues)
108 {
109   Handle(XCAFDoc_ShapeMapTool) anAttr = Handle(XCAFDoc_ShapeMapTool)::DownCast (theAttribute);
110
111   const TopTools_IndexedMapOfShape& aShapeMap = anAttr->GetMap();
112   for (int aShapeValueId = 1, aNbShapes = aShapeMap.Extent(); aShapeValueId <= aNbShapes; aShapeValueId++)
113   {
114     const TopoDS_Shape& aShape = aShapeMap(aShapeValueId);
115
116     if (!aShape.IsNull())
117       theValues << DFBrowserPane_Tools::GetPointerInfo (aShape.TShape()->This()).ToCString()
118                 << DFBrowserPane_Tools::ShapeTypeInfo (aShape)
119                 << "";
120     else
121       theValues << "" << "" << "";
122   }
123 }
124
125 // =======================================================================
126 // function : GetShortAttributeInfo
127 // purpose :
128 // =======================================================================
129 void DFBrowserPaneXDE_XCAFDocShapeMapTool::GetShortAttributeInfo (const Handle(TDF_Attribute)& theAttribute,
130                                                                   QList<QVariant>& theValues)
131 {
132   Handle(XCAFDoc_ShapeMapTool) anAttr = Handle(XCAFDoc_ShapeMapTool)::DownCast (theAttribute);
133   theValues.append (QString ("[%1]").arg (anAttr->GetMap().Extent()));
134 }
135
136 // =======================================================================
137 // function : GetPresentation
138 // purpose :
139 // =======================================================================
140 Handle(Standard_Transient) DFBrowserPaneXDE_XCAFDocShapeMapTool::GetPresentation (const Handle(TDF_Attribute)& theAttribute)
141 {
142   Handle(AIS_InteractiveObject) aPresentation;
143
144   Handle(XCAFDoc_ShapeMapTool) anAttr = Handle(XCAFDoc_ShapeMapTool)::DownCast (theAttribute);
145   if (anAttr.IsNull())
146     return aPresentation;
147
148   BRep_Builder aBuilder;
149   TopoDS_Compound aComp;
150   aBuilder.MakeCompound (aComp);
151
152   const TopTools_IndexedMapOfShape& aShapeMap = anAttr->GetMap();
153   for (int aShapeValueId = 1, aNbShapes = aShapeMap.Extent(); aShapeValueId <= aNbShapes; aShapeValueId++)
154   {
155     const TopoDS_Shape& aShape = aShapeMap(aShapeValueId);
156     if (!aShape.IsNull())
157       aBuilder.Add (aComp, aShape);
158   }
159   aPresentation = new AIS_Shape (aComp);
160   return aPresentation;
161 }