From 01b92db77efca95175cbad09496c88a1944dfc9d Mon Sep 17 00:00:00 2001 From: Matthew Nicholson Date: Wed, 24 Jan 2018 09:20:50 -0500 Subject: [PATCH] focus library on [Library] ChooseItem from sidebar When the browse knob is mapped to [Library] ChooseItem this will cause the library to be focused when a leaf node in the sideview is chosen. Focus only changes when a leaf node is selected, otherwise the given tree node is expanded or collapsed. --- src/library/librarycontrol.cpp | 8 ++++++++ src/widget/wlibrarysidebar.cpp | 9 +++++++++ src/widget/wlibrarysidebar.h | 1 + 3 files changed, 18 insertions(+) diff --git a/src/library/librarycontrol.cpp b/src/library/librarycontrol.cpp index df11082eedce..7b55f839fd53 100644 --- a/src/library/librarycontrol.cpp +++ b/src/library/librarycontrol.cpp @@ -465,6 +465,14 @@ void LibraryControl::slotChooseItem(double v) { } // Otherwise toggle the sidebar item expanded state (like a double-click) slotToggleSelectedSidebarItem(v); + + // Focus the library if this is a leaf node in the tree + if (m_pSidebarWidget && v > 0 + && m_pSidebarWidget->hasFocus() + && m_pSidebarWidget->isLeafNodeSelected()) + { + setLibraryFocus(); + } } void LibraryControl::slotFontSize(double v) { diff --git a/src/widget/wlibrarysidebar.cpp b/src/widget/wlibrarysidebar.cpp index 5a3c6b16c4f1..70898e92dd5b 100644 --- a/src/widget/wlibrarysidebar.cpp +++ b/src/widget/wlibrarysidebar.cpp @@ -166,6 +166,15 @@ void WLibrarySidebar::toggleSelectedItem() { } } +bool WLibrarySidebar::isLeafNodeSelected() { + QModelIndexList selectedIndices = this->selectionModel()->selectedRows(); + if (selectedIndices.size() > 0) { + QModelIndex index = selectedIndices.at(0); + return !index.model()->hasChildren(index); + } + return false; +} + void WLibrarySidebar::keyPressEvent(QKeyEvent* event) { if (event->key() == Qt::Key_Return) { toggleSelectedItem(); diff --git a/src/widget/wlibrarysidebar.h b/src/widget/wlibrarysidebar.h index 68490afa3d81..8539e8a541e3 100644 --- a/src/widget/wlibrarysidebar.h +++ b/src/widget/wlibrarysidebar.h @@ -26,6 +26,7 @@ class WLibrarySidebar : public QTreeView, public WBaseWidget { void keyPressEvent(QKeyEvent* event) override; void timerEvent(QTimerEvent* event) override; void toggleSelectedItem(); + bool isLeafNodeSelected(); public slots: void selectIndex(const QModelIndex&);