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