From: Uwe Hermann Date: Sun, 30 Jun 2019 21:04:00 +0000 (+0200) Subject: decoder_selector: Apply decoder upon pressing enter. X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=66ab3d702150a3122c5ec3bfcd7f4da930732383 decoder_selector: Apply decoder upon pressing enter. If only one decoder matches the filter, apply it when the user presses enter. --- diff --git a/pv/subwindows/decoder_selector/subwindow.cpp b/pv/subwindows/decoder_selector/subwindow.cpp index 96da710f..948c5ae8 100644 --- a/pv/subwindows/decoder_selector/subwindow.cpp +++ b/pv/subwindows/decoder_selector/subwindow.cpp @@ -139,6 +139,8 @@ SubWindow::SubWindow(Session& session, QWidget* parent) : connect(filter, SIGNAL(textChanged(const QString&)), this, SLOT(on_filter_changed(const QString&))); + connect(filter, SIGNAL(returnPressed()), + this, SLOT(on_filter_return_pressed())); connect(tree_view_, SIGNAL(currentChanged(const QModelIndex&)), this, SLOT(on_item_changed(const QModelIndex&))); @@ -311,6 +313,28 @@ void SubWindow::on_filter_changed(const QString& text) tree_view_->setExpanded(tree_view_->model()->index(0, 0), !text.isEmpty()); } +void SubWindow::on_filter_return_pressed() +{ + int num_visible_decoders = 0; + QModelIndex last_valid_index; + + QModelIndex index = tree_view_->model()->index(0, 0); + + while (index.isValid()) { + QModelIndex id_index = index.model()->index(index.row(), 2, index.parent()); + QString decoder_name = index.model()->data(id_index, Qt::DisplayRole).toString(); + if (!decoder_name.isEmpty()) { + last_valid_index = index; + num_visible_decoders++; + } + index = tree_view_->indexBelow(index); + } + + // If only one decoder matches the filter, apply it when the user presses enter + if (num_visible_decoders == 1) + tree_view_->activated(last_valid_index); +} + } // namespace decoder_selector } // namespace subwindows } // namespace pv diff --git a/pv/subwindows/decoder_selector/subwindow.hpp b/pv/subwindows/decoder_selector/subwindow.hpp index a1ace196..6b671cf5 100644 --- a/pv/subwindows/decoder_selector/subwindow.hpp +++ b/pv/subwindows/decoder_selector/subwindow.hpp @@ -134,6 +134,7 @@ public Q_SLOTS: void on_item_activated(const QModelIndex& index); void on_filter_changed(const QString& text); + void on_filter_return_pressed(); private: QSplitter* splitter_;