1 // Created on: 2017-06-16
2 // Created by: Natalia ERMOLAEVA
3 // Copyright (c) 2017 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
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.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #include <inspector/DFBrowser_TreeLevelView.hxx>
18 #include <inspector/DFBrowser_Item.hxx>
19 #include <inspector/DFBrowser_TreeLevelViewModel.hxx>
20 #include <inspector/DFBrowser_Window.hxx>
21 #include <inspector/DFBrowserPane_Tools.hxx>
22 #include <inspector/TreeModel_ModelBase.hxx>
24 #include <QItemSelectionModel>
26 #include <QGridLayout>
27 #include <QHeaderView>
31 const int DEFAULT_COLUMN_WIDTH = 300;
33 // =======================================================================
34 // function : Constructor
36 // =======================================================================
37 DFBrowser_TreeLevelView::DFBrowser_TreeLevelView (QWidget* theParent)
40 myMainWindow = new QWidget (theParent);
41 QGridLayout* aLayout = new QGridLayout (myMainWindow);
42 aLayout->setContentsMargins (0, 0, 0, 0);
44 myTableView = new QTableView (myMainWindow);
45 myTableView->setModel (new DFBrowser_TreeLevelViewModel (myTableView));
46 myTableView->setColumnWidth (0, DEFAULT_COLUMN_WIDTH);
47 myTableView->setEditTriggers (QAbstractItemView::DoubleClicked);
48 QHeaderView* aVHeader = myTableView->verticalHeader();
49 aVHeader->setVisible (false);
50 aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize() + DFBrowserPane_Tools::HeaderSectionMargin());
51 myTableView->horizontalHeader()->setStretchLastSection (true);
52 aLayout->addWidget (myTableView);
54 QItemSelectionModel* aSelectionModel = new QItemSelectionModel (myTableView->model());
55 myTableView->setSelectionMode (QAbstractItemView::SingleSelection);
56 myTableView->setSelectionModel (aSelectionModel);
57 myTableView->setSelectionBehavior (QAbstractItemView::SelectRows);
58 connect (aSelectionModel, SIGNAL (selectionChanged (const QItemSelection&, const QItemSelection&)),
59 this, SLOT (onTableSelectionChanged (const QItemSelection&, const QItemSelection&)));
60 connect (myTableView, SIGNAL (doubleClicked (const QModelIndex&)),
61 this, SLOT (onTableDoubleClicked (const QModelIndex&)));
63 DFBrowser_Window::SetWhiteBackground (myTableView);
64 myTableView->setGridStyle (Qt::NoPen);
67 // =======================================================================
68 // function : clearSelection
70 // =======================================================================
71 void DFBrowser_TreeLevelView::ClearSelection()
73 myTableView->selectionModel()->clearSelection();
76 // =======================================================================
77 // function : ProcessItem
79 // =======================================================================
80 bool DFBrowser_TreeLevelView::ProcessItem (const QModelIndex& theIndex)
83 TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (theIndex);
85 // use this view for attribute/document/label items
86 DFBrowser_ItemPtr anItem = itemDynamicCast<DFBrowser_Item> (anItemBase);
88 aResult = anItem && !anItem->HasAttribute();
90 aResult = true; // attribute or document item
95 // =======================================================================
96 // function : UpdateByTreeSelectionChanged
98 // =======================================================================
99 void DFBrowser_TreeLevelView::UpdateByTreeSelectionChanged (const QItemSelection& theSelected,
100 const QItemSelection&)
102 QModelIndexList aSelectedIndices = theSelected.indexes();
103 QModelIndexList aFirstColumnSelectedIndices;
104 for (QModelIndexList::const_iterator aSelIt = aSelectedIndices.begin(); aSelIt != aSelectedIndices.end(); aSelIt++)
106 QModelIndex anIndex = *aSelIt;
107 if (anIndex.column() == 0)
108 aFirstColumnSelectedIndices.append (anIndex);
111 if (aFirstColumnSelectedIndices.size() != 1)
114 DFBrowser_TreeLevelViewModel* aModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
115 const QModelIndex& anIndex = aFirstColumnSelectedIndices.first();
116 if (DFBrowser_TreeLevelView::ProcessItem(anIndex)) // to Init
117 aModel->Init (anIndex);
122 // =======================================================================
123 // function : onTableSelectionChanged
125 // =======================================================================
126 void DFBrowser_TreeLevelView::onTableSelectionChanged (const QItemSelection& theSelected,
127 const QItemSelection&)
129 QModelIndexList aSelectedIndices = theSelected.indexes();
130 QModelIndex aSelectedIndex = DFBrowser_Window::SingleSelected (aSelectedIndices, 0);
132 DFBrowser_TreeLevelViewModel* aTableModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
133 if (aTableModel && aTableModel->IsInitialized())
135 const QModelIndex& aTreeViewIndex = aTableModel->GetTreeViewIndex (aSelectedIndex);
136 if (aTreeViewIndex.isValid())
137 emit indexSelected (aTreeViewIndex);
141 // =======================================================================
142 // function : onTableDoubleClicked
144 // =======================================================================
145 void DFBrowser_TreeLevelView::onTableDoubleClicked (const QModelIndex& theIndex)
147 DFBrowser_TreeLevelViewModel* aTableModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
151 const QModelIndex& aTreeViewIndex = aTableModel->GetTreeViewIndex (theIndex);
152 if (aTreeViewIndex.isValid())
153 emit indexDoubleClicked (aTreeViewIndex);