0032429: Coding - Warnings during compilation on macosx arm64 with option BUILD_Inspe...
[occt.git] / tools / DFBrowser / DFBrowser_SearchView.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/DFBrowser_SearchView.hxx>
17
18 #include <inspector/DFBrowser_HighlightDelegate.hxx>
19 #include <inspector/DFBrowser_SearchLine.hxx>
20 #include <inspector/DFBrowser_SearchLineModel.hxx>
21 #include <inspector/DFBrowser_Window.hxx>
22
23 #include <inspector/DFBrowserPane_Tools.hxx>
24
25 #include <inspector/TreeModel_ModelBase.hxx>
26 #include <inspector/TreeModel_Tools.hxx>
27
28 #include <inspector/ViewControl_Tools.hxx>
29
30 #include <Standard_WarningsDisable.hxx>
31 #include <QAbstractProxyModel>
32 #include <QGridLayout>
33 #include <QHeaderView>
34 #include <QTableView>
35 #include <QWidget>
36 #include <Standard_WarningsRestore.hxx>
37
38 static const int DEFAULT_ICON_SIZE = 40;
39
40 // =======================================================================
41 // function : Constructor
42 // purpose :
43 // =======================================================================
44 DFBrowser_SearchView::DFBrowser_SearchView (QWidget* theParent)
45 : QObject (theParent)
46 {
47   myMainWindow = new QWidget (theParent);
48   QGridLayout* aLayout = new QGridLayout (myMainWindow);
49   aLayout->setContentsMargins (0, 0, 0, 0);
50
51   myTableView = new QTableView (myMainWindow);
52   myTableView->verticalHeader()->setVisible (false);
53   myTableView->verticalHeader()->setDefaultSectionSize (DEFAULT_ICON_SIZE + TreeModel_Tools::HeaderSectionMargin());
54   myTableView->setIconSize (QSize (DEFAULT_ICON_SIZE, DEFAULT_ICON_SIZE));
55   myTableView->horizontalHeader()->setVisible (false);
56   myTableView->horizontalHeader()->setStretchLastSection (true);
57
58   myTableView->viewport()->setAttribute (Qt::WA_Hover);
59   myTableView->setItemDelegate (new DFBrowser_HighlightDelegate (myTableView));
60
61   aLayout->addWidget (myTableView);
62
63   ViewControl_Tools::SetWhiteBackground (myTableView);
64   myTableView->setGridStyle (Qt::NoPen);
65 }
66
67 // =======================================================================
68 // function : InitModels
69 // purpose :
70 // =======================================================================
71 void DFBrowser_SearchView::InitModels()
72 {
73   QAbstractItemModel* aModel = mySearchLine->GetCompletionModel();
74   myTableView->setModel (aModel);
75   myTableView->setColumnWidth (0, 0); // to hide column
76   myTableView->setColumnWidth (1, DEFAULT_ICON_SIZE + TreeModel_Tools::HeaderSectionMargin());
77
78   QItemSelectionModel* aSelectionModel = new QItemSelectionModel (aModel);
79   myTableView->setSelectionMode (QAbstractItemView::SingleSelection);
80   myTableView->setSelectionModel (aSelectionModel);
81   connect (aSelectionModel, SIGNAL (selectionChanged (const QItemSelection&, const QItemSelection&)),
82           this, SLOT (onTableSelectionChanged (const QItemSelection&, const QItemSelection&)));
83   connect (myTableView, SIGNAL (doubleClicked (const QModelIndex&)),
84           this, SLOT (onTableDoubleClicked (const QModelIndex&)));
85 }
86
87 // =======================================================================
88 // function : onTableSelectionChanged
89 // purpose :
90 // =======================================================================
91 void DFBrowser_SearchView::onTableSelectionChanged (const QItemSelection&,
92                                                    const QItemSelection&)
93 {
94   QItemSelectionModel* aSelectionModel = myTableView->selectionModel();
95   QModelIndexList aSelectedIndices = aSelectionModel->selectedIndexes();
96   QModelIndex aSelectedIndex = TreeModel_ModelBase::SingleSelected (aSelectedIndices, 2);
97   if (!aSelectedIndex.isValid())
98     return;
99   QAbstractProxyModel* aTableModel = dynamic_cast<QAbstractProxyModel*> (myTableView->model());
100   if (!aTableModel)
101     return;
102   DFBrowser_SearchLineModel* aSourceModel = dynamic_cast<DFBrowser_SearchLineModel*> (aTableModel->sourceModel());
103   if (!aSourceModel)
104     return;
105
106   QModelIndex aSourceSelectedIndex = aTableModel->mapToSource(aSelectedIndex);
107   emit pathSelected(aSourceModel->GetPath (aSourceSelectedIndex), aSourceModel->GetValue (aSourceSelectedIndex));
108 }
109
110 // =======================================================================
111 // function : onTableDoubleClicked
112 // purpose :
113 // =======================================================================
114 void DFBrowser_SearchView::onTableDoubleClicked (const QModelIndex& theIndex)
115 {
116   QAbstractProxyModel* aTableModel = dynamic_cast<QAbstractProxyModel*> (myTableView->model());
117   if (!aTableModel)
118     return;
119   DFBrowser_SearchLineModel* aSourceModel = dynamic_cast<DFBrowser_SearchLineModel*> (aTableModel->sourceModel());
120   if (!aSourceModel)
121     return;
122
123   QModelIndex aSourceSelectedIndex = aTableModel->mapToSource(theIndex);
124   emit pathDoubleClicked (aSourceModel->GetPath (aSourceSelectedIndex), aSourceModel->GetValue (aSourceSelectedIndex));
125 }