X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsubwindows%2Fdecoder_selector%2Fsubwindow.cpp;h=0b49c34aa190af74235473839dec121ce2392651;hp=96da710fb052ca9228214eff5a36a3772efba75f;hb=1fd847fedce2d8b93080ee7cd4d8c86aa916f6d2;hpb=0e2ba0cc745e763279510d943593abce52a36040 diff --git a/pv/subwindows/decoder_selector/subwindow.cpp b/pv/subwindows/decoder_selector/subwindow.cpp index 96da710f..0b49c34a 100644 --- a/pv/subwindows/decoder_selector/subwindow.cpp +++ b/pv/subwindows/decoder_selector/subwindow.cpp @@ -33,13 +33,15 @@ #include "pv/subwindows/decoder_selector/subwindow.hpp" using std::reverse; -using std::shared_ptr; namespace pv { namespace subwindows { namespace decoder_selector { -const QString initial_notice = QApplication::tr("Select a decoder to see its description here."); +const char *initial_notice = + QT_TRANSLATE_NOOP("pv::subwindows::decoder_selector::SubWindow", + "Select a decoder to see its description here."); // clazy:exclude=non-pod-global-static + const int min_width_margin = 75; @@ -132,13 +134,15 @@ SubWindow::SubWindow(Session& session, QWidget* parent) : info_label_header_->setTextInteractionFlags(flags); info_label_body_->setWordWrap(true); info_label_body_->setTextInteractionFlags(flags); - info_label_body_->setText(initial_notice); + info_label_body_->setText(QString(tr(initial_notice))); info_label_body_->setAlignment(Qt::AlignTop); info_label_footer_->setWordWrap(true); info_label_footer_->setTextInteractionFlags(flags); 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&))); @@ -167,7 +171,7 @@ QToolBar* SubWindow::create_toolbar(QWidget *parent) const int SubWindow::minimum_width() const { QFontMetrics m(info_label_body_->font()); - const int label_width = m.width(initial_notice); + const int label_width = m.width(QString(tr(initial_notice))); return label_width + min_width_margin; } @@ -311,6 +315,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