(#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
This commit is contained in:
Jacob Støren 2015-08-20 14:38:51 +02:00
parent 69a46e0b45
commit 0fda6ef6fb
3 changed files with 38 additions and 8 deletions

View File

@ -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<caf::PdmUiItem*> uiItems;
m_projectTreeView->selectedUiItems(uiItems);
caf::SelectionManager::instance()->setSelectedItems(uiItems);
caf::PdmObjectHandle* firstSelectedObject = NULL;
if (uiItems.size() == 1)

View File

@ -51,6 +51,7 @@
#include <QSortFilterProxyModel>
#include <QTreeView>
#include <QWidget>
#include <QEvent>
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<PdmUiItem*> 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<PdmUiItem*> items;
this->selectedUiItems(items);
SelectionManager::instance()->setSelectedItems(items);
}
}
} // end namespace caf

View File

@ -118,6 +118,9 @@ private:
PdmChildArrayFieldHandle* currentChildArrayFieldHandle();
void updateSelectionManager();
virtual bool eventFilter(QObject *obj, QEvent *event);
private:
QPointer<QWidget> m_mainWidget;