From e10848e81f97360359ff80951fd01dc91a9a3847 Mon Sep 17 00:00:00 2001 From: Soeren Apel Date: Sun, 10 Mar 2019 11:23:04 +0100 Subject: [PATCH] DecodeSelector: Use custom treeview to hook into selection changes --- pv/subwindows/decoder_selector/subwindow.cpp | 22 +++++++++++++------- pv/subwindows/decoder_selector/subwindow.hpp | 17 ++++++++++++--- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/pv/subwindows/decoder_selector/subwindow.cpp b/pv/subwindows/decoder_selector/subwindow.cpp index 781e494f..f669146d 100644 --- a/pv/subwindows/decoder_selector/subwindow.cpp +++ b/pv/subwindows/decoder_selector/subwindow.cpp @@ -36,10 +36,18 @@ namespace subwindows { namespace decoder_selector { +void QCustomTreeView::currentChanged(const QModelIndex& current, + const QModelIndex& previous) +{ + QTreeView::currentChanged(current, previous); + currentChanged(current); +} + + SubWindow::SubWindow(Session& session, QWidget* parent) : SubWindowBase(session, parent), splitter_(new QSplitter()), - tree_view_(new QTreeView()), + tree_view_(new QCustomTreeView()), info_box_(new QWidget()), info_label_header_(new QLabel()), info_label_body_(new QLabel()), @@ -68,10 +76,10 @@ SubWindow::SubWindow(Session& session, QWidget* parent) : info_label_body_->setWordWrap(true); info_label_body_->setText(tr("Select a decoder to see its description here.")); - connect(tree_view_, SIGNAL(clicked(const QModelIndex&)), - this, SLOT(on_item_clicked(const QModelIndex&))); - connect(tree_view_, SIGNAL(doubleClicked(const QModelIndex&)), - this, SLOT(on_item_double_clicked(const QModelIndex&))); + connect(tree_view_, SIGNAL(currentChanged(const QModelIndex&)), + this, SLOT(on_item_changed(const QModelIndex&))); + connect(tree_view_, SIGNAL(activated(const QModelIndex&)), + this, SLOT(on_item_activated(const QModelIndex&))); connect(this, SIGNAL(new_decoders_selected(vector)), &session, SLOT(on_new_decoders_selected(vector))); @@ -141,7 +149,7 @@ vector SubWindow::decoders_providing(const char* output) con return ret_val; } -void SubWindow::on_item_clicked(const QModelIndex& index) +void SubWindow::on_item_changed(const QModelIndex& index) { if (!index.isValid()) return; @@ -175,7 +183,7 @@ void SubWindow::on_item_clicked(const QModelIndex& index) info_label_footer_->setText(tr("

Tags: %1

").arg(tags)); } -void SubWindow::on_item_double_clicked(const QModelIndex& index) +void SubWindow::on_item_activated(const QModelIndex& index) { if (!index.isValid()) return; diff --git a/pv/subwindows/decoder_selector/subwindow.hpp b/pv/subwindows/decoder_selector/subwindow.hpp index baeedd36..4434f0a6 100644 --- a/pv/subwindows/decoder_selector/subwindow.hpp +++ b/pv/subwindows/decoder_selector/subwindow.hpp @@ -84,6 +84,17 @@ private: }; +class QCustomTreeView : public QTreeView +{ + Q_OBJECT + +public: + void currentChanged(const QModelIndex& current, const QModelIndex& previous); + +Q_SIGNALS: + void currentChanged(const QModelIndex& current); +}; + class SubWindow : public SubWindowBase { Q_OBJECT @@ -112,12 +123,12 @@ Q_SIGNALS: void new_decoders_selected(vector decoders); public Q_SLOTS: - void on_item_clicked(const QModelIndex& index); - void on_item_double_clicked(const QModelIndex& index); + void on_item_changed(const QModelIndex& index); + void on_item_activated(const QModelIndex& index); private: QSplitter* splitter_; - QTreeView* tree_view_; + QCustomTreeView* tree_view_; QWidget* info_box_; QLabel* info_label_header_; QLabel* info_label_body_; -- 2.30.2