0029018: Documentation - Provide user guide for Qt browser
[occt.git] / tools / DFBrowserPane / DFBrowserPane_TableView.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_TableView.hxx>
17 #include <inspector/DFBrowserPane_Tools.hxx>
18
19 #include <QAbstractTableModel>
20 #include <QHeaderView>
21 #include <QHBoxLayout>
22 #include <QScrollBar>
23 #include <QTableView>
24 #include <QWidget>
25
26 static const int DEFAULT_ROW_HEIGHT = 30;
27
28 // =======================================================================
29 // function : Constructor
30 // purpose :
31 // =======================================================================
32 DFBrowserPane_TableView::DFBrowserPane_TableView (QWidget* theParent,
33                                                   const QMap<int, int>& theDefaultColumnWidths)
34 : QWidget (theParent)
35 {
36   QHBoxLayout* aLay = new QHBoxLayout (this);
37   aLay->setContentsMargins (0, 0, 0, 0);
38
39   myTableView = new QTableView (theParent);
40   myTableView->setShowGrid (false);
41
42   QHeaderView* aVHeader = myTableView->verticalHeader();
43   aVHeader->setVisible (false);
44   aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize());
45
46   myTableView->horizontalHeader()->setStretchLastSection (true);
47   myTableView->horizontalHeader()->setVisible (false);
48   aLay->addWidget (myTableView);
49   myDefaultColumnWidths = theDefaultColumnWidths;
50 }
51
52 // =======================================================================
53 // function : SetModel
54 // purpose :
55 // =======================================================================
56 void DFBrowserPane_TableView::SetModel (QAbstractTableModel* theModel)
57 {
58   myTableView->setModel (theModel);
59
60   for (int aColumnId = 0, aCount = theModel->columnCount(); aColumnId < aCount; aColumnId++)
61     myTableView->setColumnWidth (aColumnId, myDefaultColumnWidths.contains (aColumnId) ?
62             myDefaultColumnWidths[aColumnId] : DFBrowserPane_Tools::DefaultPanelColumnWidth (aColumnId));
63 }
64
65 // =======================================================================
66 // function : SetFixedRowCount
67 // purpose :
68 // =======================================================================
69 void DFBrowserPane_TableView::SetFixedRowCount (const int theCount, QTableView* theView, const bool theScroll)
70 {
71   double aHeight = theView->verticalHeader()->defaultSectionSize()*theCount + DFBrowserPane_Tools::HeaderSectionMargin();
72   if (theScroll)
73     aHeight += theView->horizontalScrollBar()->sizeHint().height();
74
75   theView->setMaximumHeight (aHeight);
76 }
77
78 // =======================================================================
79 // function : SetVisibleHorizontalHeader
80 // purpose :
81 // =======================================================================
82 void DFBrowserPane_TableView::SetVisibleHorizontalHeader (const bool& theVisible)
83 {
84   myTableView->horizontalHeader()->setVisible (theVisible);
85 }
86
87 // =======================================================================
88 // function : GetSelectedColumnValues
89 // purpose :
90 // =======================================================================
91 QStringList DFBrowserPane_TableView::GetSelectedColumnValues (QTableView* theTableView, const int theColumnId)
92 {
93   QAbstractItemModel* aModel = theTableView->model();
94   QModelIndexList aSelectedIndices = theTableView->selectionModel()->selectedIndexes();
95
96   QStringList aSelectedEntries;
97   for (QModelIndexList::const_iterator aSelectedIt = aSelectedIndices.begin();
98        aSelectedIt != aSelectedIndices.end(); aSelectedIt++)
99   {
100     QModelIndex anIndex = *aSelectedIt;
101     if (theColumnId == anIndex.column())
102       aSelectedEntries.append (aModel->data (aModel->index (anIndex.row(), theColumnId, anIndex.parent()),
103                                Qt::DisplayRole).toString());
104   }
105   return aSelectedEntries;
106 }