--- /dev/null
+// Created on: 2017-06-16
+// Created by: Natalia ERMOLAEVA
+// Copyright (c) 2017 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <DFBrowser_TreeLevelView.hxx>
+
+#include <DFBrowser_Item.hxx>
+#include <DFBrowser_TreeLevelViewModel.hxx>
+#include <DFBrowser_Window.hxx>
+#include <DFBrowserPane_Tools.hxx>
+#include <TreeModel_ModelBase.hxx>
+
+#include <QItemSelectionModel>
+
+#include <QGridLayout>
+#include <QHeaderView>
+#include <QTableView>
+#include <QWidget>
+
+const int DEFAULT_COLUMN_WIDTH = 300;
+
+// =======================================================================
+// function : Constructor
+// purpose :
+// =======================================================================
+DFBrowser_TreeLevelView::DFBrowser_TreeLevelView (QWidget* theParent)
+: QObject (theParent)
+{
+ myMainWindow = new QWidget (theParent);
+ QGridLayout* aLayout = new QGridLayout (myMainWindow);
+ aLayout->setContentsMargins (0, 0, 0, 0);
+
+ myTableView = new QTableView (myMainWindow);
+ myTableView->setModel (new DFBrowser_TreeLevelViewModel (myTableView));
+ myTableView->setColumnWidth (0, DEFAULT_COLUMN_WIDTH);
+ myTableView->setEditTriggers (QAbstractItemView::DoubleClicked);
+ QHeaderView* aVHeader = myTableView->verticalHeader();
+ aVHeader->setVisible (false);
+ aVHeader->setDefaultSectionSize (aVHeader->minimumSectionSize() + DFBrowserPane_Tools::HeaderSectionMargin());
+ myTableView->horizontalHeader()->setStretchLastSection (true);
+ aLayout->addWidget (myTableView);
+
+ QItemSelectionModel* aSelectionModel = new QItemSelectionModel (myTableView->model());
+ myTableView->setSelectionMode (QAbstractItemView::SingleSelection);
+ myTableView->setSelectionModel (aSelectionModel);
+ myTableView->setSelectionBehavior (QAbstractItemView::SelectRows);
+ connect (aSelectionModel, SIGNAL (selectionChanged (const QItemSelection&, const QItemSelection&)),
+ this, SLOT (onTableSelectionChanged (const QItemSelection&, const QItemSelection&)));
+ connect (myTableView, SIGNAL (doubleClicked (const QModelIndex&)),
+ this, SLOT (onTableDoubleClicked (const QModelIndex&)));
+
+ DFBrowser_Window::SetWhiteBackground (myTableView);
+ myTableView->setGridStyle (Qt::NoPen);
+}
+
+// =======================================================================
+// function : clearSelection
+// purpose :
+// =======================================================================
+void DFBrowser_TreeLevelView::ClearSelection()
+{
+ myTableView->selectionModel()->clearSelection();
+}
+
+// =======================================================================
+// function : ProcessItem
+// purpose :
+// =======================================================================
+bool DFBrowser_TreeLevelView::ProcessItem (const QModelIndex& theIndex)
+{
+ bool aResult = false;
+ TreeModel_ItemBasePtr anItemBase = TreeModel_ModelBase::GetItemByIndex (theIndex);
+ if (anItemBase) {
+ // use this view for attribute/document/label items
+ DFBrowser_ItemPtr anItem = itemDynamicCast<DFBrowser_Item> (anItemBase);
+ if (anItem)
+ aResult = anItem && !anItem->HasAttribute();
+ else
+ aResult = true; // attribute or document item
+ }
+ return aResult;
+}
+
+// =======================================================================
+// function : UpdateByTreeSelectionChanged
+// purpose :
+// =======================================================================
+void DFBrowser_TreeLevelView::UpdateByTreeSelectionChanged (const QItemSelection& theSelected,
+ const QItemSelection&)
+{
+ QModelIndexList aSelectedIndices = theSelected.indexes();
+ QModelIndexList aFirstColumnSelectedIndices;
+ for (QModelIndexList::const_iterator aSelIt = aSelectedIndices.begin(); aSelIt != aSelectedIndices.end(); aSelIt++)
+ {
+ QModelIndex anIndex = *aSelIt;
+ if (anIndex.column() == 0)
+ aFirstColumnSelectedIndices.append (anIndex);
+ }
+
+ if (aFirstColumnSelectedIndices.size() != 1)
+ return;
+
+ DFBrowser_TreeLevelViewModel* aModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
+ const QModelIndex& anIndex = aFirstColumnSelectedIndices.first();
+ if (DFBrowser_TreeLevelView::ProcessItem(anIndex)) // to Init
+ aModel->Init (anIndex);
+ else
+ aModel->Reset();
+}
+
+// =======================================================================
+// function : onTableSelectionChanged
+// purpose :
+// =======================================================================
+void DFBrowser_TreeLevelView::onTableSelectionChanged (const QItemSelection& theSelected,
+ const QItemSelection&)
+{
+ QModelIndexList aSelectedIndices = theSelected.indexes();
+ QModelIndex aSelectedIndex = DFBrowser_Window::SingleSelected (aSelectedIndices, 0);
+
+ DFBrowser_TreeLevelViewModel* aTableModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
+ if (aTableModel && aTableModel->IsInitialized())
+ {
+ const QModelIndex& aTreeViewIndex = aTableModel->GetTreeViewIndex (aSelectedIndex);
+ if (aTreeViewIndex.isValid())
+ emit indexSelected (aTreeViewIndex);
+ }
+}
+
+// =======================================================================
+// function : onTableDoubleClicked
+// purpose :
+// =======================================================================
+void DFBrowser_TreeLevelView::onTableDoubleClicked (const QModelIndex& theIndex)
+{
+ DFBrowser_TreeLevelViewModel* aTableModel = dynamic_cast<DFBrowser_TreeLevelViewModel*> (myTableView->model());
+ if (!aTableModel)
+ return;
+
+ const QModelIndex& aTreeViewIndex = aTableModel->GetTreeViewIndex (theIndex);
+ if (aTreeViewIndex.isValid())
+ emit indexDoubleClicked (aTreeViewIndex);
+}