]> sigrok.org Git - pulseview.git/blobdiff - pv/subwindows/decoder_selector/subwindow.cpp
decoder_selector: Fix an issue with PD auto-stacking.
[pulseview.git] / pv / subwindows / decoder_selector / subwindow.cpp
index 0172a43d9a4951b97a322ca46bee7c397e3706e1..96da710fb052ca9228214eff5a36a3772efba75f 100644 (file)
@@ -102,6 +102,7 @@ SubWindow::SubWindow(Session& session, QWidget* parent) :
 
        sort_filter_model_->setSourceModel(model_);
        sort_filter_model_->setFilterCaseSensitivity(Qt::CaseInsensitive);
+       sort_filter_model_->setFilterKeyColumn(-1);
 
        tree_view_->setModel(sort_filter_model_);
        tree_view_->setRootIsDecorated(true);
@@ -132,6 +133,7 @@ SubWindow::SubWindow(Session& session, QWidget* parent) :
        info_label_body_->setWordWrap(true);
        info_label_body_->setTextInteractionFlags(flags);
        info_label_body_->setText(initial_notice);
+       info_label_body_->setAlignment(Qt::AlignTop);
        info_label_footer_->setWordWrap(true);
        info_label_footer_->setTextInteractionFlags(flags);
 
@@ -145,6 +147,9 @@ SubWindow::SubWindow(Session& session, QWidget* parent) :
 
        connect(this, SIGNAL(new_decoders_selected(vector<const srd_decoder*>)),
                &session, SLOT(on_new_decoders_selected(vector<const srd_decoder*>)));
+
+       // Place the keyboard cursor in the filter QLineEdit initially
+       filter->setFocus();
 }
 
 bool SubWindow::has_toolbar() const
@@ -188,8 +193,10 @@ vector<const srd_decoder*> SubWindow::get_decoders_providing(const char* output)
                if (!d->outputs)
                        continue;
 
+               const int maxlen = 1024;
+
                // TODO For now we ignore that d->outputs is actually a list
-               if (strncmp((char*)(d->outputs->data), output, strlen(output)) == 0)
+               if (strncmp((char*)(d->outputs->data), output, maxlen) == 0)
                        ret_val.push_back(d);
        }
 
@@ -250,13 +257,13 @@ void SubWindow::on_item_activated(const QModelIndex& index)
                return;
        }
 
-       if (strncmp(inputs.at(0), "logic", 5) == 0) {
+       if (strcmp(inputs.at(0), "logic") == 0) {
                new_decoders_selected(decoders);
                return;
        }
 
        // Check if we can automatically fulfill the stacking requirements
-       while (strncmp(inputs.at(0), "logic", 5) != 0) {
+       while (strcmp(inputs.at(0), "logic") != 0) {
                vector<const srd_decoder*> prov_decoders = get_decoders_providing(inputs.at(0));
 
                if (prov_decoders.size() == 0) {
@@ -299,6 +306,9 @@ void SubWindow::on_item_activated(const QModelIndex& index)
 void SubWindow::on_filter_changed(const QString& text)
 {
        sort_filter_model_->setFilterFixedString(text);
+
+       // Expand the "All Decoders" category/tag if the user filtered
+       tree_view_->setExpanded(tree_view_->model()->index(0, 0), !text.isEmpty());
 }
 
 } // namespace decoder_selector