From 0fda6ef6fbab4f46d692ad135f9459772b49fcc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 20 Aug 2015 14:38:51 +0200 Subject: [PATCH] (#370) Bugfixes regarding using several project trees SelectionManager is now updated whenever focus enters the treeview. The main project tree now has turned on SelectionManager updates --- .../UserInterface/RiuMainWindow.cpp | 3 +- .../cafPdmUiTreeViewEditor.cpp | 40 +++++++++++++++---- .../cafUserInterface/cafPdmUiTreeViewEditor.h | 3 ++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index b44790c6f6..686daa3250 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -566,6 +566,8 @@ void RiuMainWindow::createDockPanels() dockWidget->setAllowedAreas(Qt::AllDockWidgetAreas); m_projectTreeView = new caf::PdmUiTreeView(this); + m_projectTreeView->enableSelectionManagerUpdating(true); + dockWidget->setWidget(m_projectTreeView); m_projectTreeView->treeView()->setHeaderHidden(true); @@ -1602,7 +1604,6 @@ void RiuMainWindow::selectedObjectsChanged() std::vector uiItems; m_projectTreeView->selectedUiItems(uiItems); - caf::SelectionManager::instance()->setSelectedItems(uiItems); caf::PdmObjectHandle* firstSelectedObject = NULL; if (uiItems.size() == 1) diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp index 4d4f964d5c..d6b3373347 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.cpp @@ -51,6 +51,7 @@ #include #include #include +#include namespace caf { @@ -62,6 +63,7 @@ PdmUiTreeViewEditor::PdmUiTreeViewEditor() { m_useDefaultContextMenu = false; m_updateSelectionManager = false; + } //-------------------------------------------------------------------------------------------------- @@ -85,6 +87,7 @@ QWidget* PdmUiTreeViewEditor::createWidget(QWidget* parent) m_treeViewModel = new caf::PdmUiTreeViewModel(this); m_treeView = new QTreeView(m_mainWidget); m_treeView->setModel(m_treeViewModel); + m_treeView->installEventFilter(this); connect(treeView()->selectionModel(), SIGNAL(selectionChanged( const QItemSelection & , const QItemSelection & )), SLOT(slotOnSelectionChanged( const QItemSelection & , const QItemSelection & ))); @@ -254,13 +257,7 @@ void PdmUiTreeViewEditor::selectAsCurrentItem(PdmUiItem* uiItem) //-------------------------------------------------------------------------------------------------- void PdmUiTreeViewEditor::slotOnSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected) { - if (m_updateSelectionManager) - { - std::vector items; - this->selectedUiItems(items); - - SelectionManager::instance()->setSelectedItems(items); - } + this->updateSelectionManager(); emit selectionChanged(); } @@ -298,5 +295,34 @@ void PdmUiTreeViewEditor::setDragDropHandle(PdmUiDragDropHandle* dragDropHandle) m_treeViewModel->setDragDropHandle(dragDropHandle); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool PdmUiTreeViewEditor::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::FocusIn) + { + this->updateSelectionManager(); + } + + // standard event processing + return QObject::eventFilter(obj, event); +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void PdmUiTreeViewEditor::updateSelectionManager() +{ + if (m_updateSelectionManager) + { + std::vector items; + this->selectedUiItems(items); + + SelectionManager::instance()->setSelectedItems(items); + } +} + } // end namespace caf diff --git a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h index 54aff79b76..b556e344a2 100644 --- a/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h +++ b/Fwk/AppFwk/cafUserInterface/cafPdmUiTreeViewEditor.h @@ -118,6 +118,9 @@ private: PdmChildArrayFieldHandle* currentChildArrayFieldHandle(); + void updateSelectionManager(); + + virtual bool eventFilter(QObject *obj, QEvent *event); private: QPointer m_mainWidget;