]> sigrok.org Git - pulseview.git/blobdiff - pv/data/decodesignal.cpp
Fix typo
[pulseview.git] / pv / data / decodesignal.cpp
index 68b17a65d076668b182172bee71f5a30605cb232..4a7d6ed8c60a7593773d50bf17026176f018678b 100644 (file)
@@ -78,14 +78,19 @@ const vector< shared_ptr<Decoder> >& DecodeSignal::decoder_stack() const
 void DecodeSignal::stack_decoder(const srd_decoder *decoder)
 {
        assert(decoder);
-       const shared_ptr<Decoder> dec = make_shared<decode::Decoder>(decoder);
 
-       stack_.push_back(dec);
+       // Set name if this decoder is the first in the list or the name is unchanged
+       const srd_decoder* prev_dec =
+               stack_.empty() ? nullptr : stack_.back()->decoder();
+       const QString prev_dec_name =
+               prev_dec ? QString::fromUtf8(prev_dec->name) : QString();
 
-       // Set name if this decoder is the first in the list
-       if (stack_.size() == 1)
+       if ((stack_.empty()) || ((stack_.size() > 0) && (name() == prev_dec_name)))
                set_name(QString::fromUtf8(decoder->name));
 
+       const shared_ptr<Decoder> dec = make_shared<decode::Decoder>(decoder);
+       stack_.push_back(dec);
+
        // Include the newly created decode channels in the channel lists
        update_channel_list();
 
@@ -444,7 +449,7 @@ int64_t DecodeSignal::get_decoded_sample_count(uint32_t segment_id,
        return result;
 }
 
-vector<Row> DecodeSignal::visible_rows() const
+vector<Row> DecodeSignal::get_rows(bool visible_only) const
 {
        lock_guard<mutex> lock(output_mutex_);
 
@@ -452,7 +457,7 @@ vector<Row> DecodeSignal::visible_rows() const
 
        for (const shared_ptr<decode::Decoder>& dec : stack_) {
                assert(dec);
-               if (!dec->shown())
+               if (visible_only && !dec->shown())
                        continue;
 
                const srd_decoder *const decc = dec->decoder();
@@ -502,7 +507,7 @@ void DecodeSignal::get_annotation_subset(
 {
        // Note: We put all vectors and lists on the heap, not the stack
 
-       const vector<Row> rows = visible_rows();
+       const vector<Row> rows = get_rows(true);
 
        // Use forward_lists for faster merging
        forward_list<Annotation> *all_ann_list = new forward_list<Annotation>();
@@ -535,6 +540,7 @@ void DecodeSignal::save_settings(QSettings &settings) const
                settings.beginGroup("decoder" + QString::number(decoder_idx++));
 
                settings.setValue("id", decoder->decoder()->id);
+               settings.setValue("shown", decoder->shown());
 
                // Save decoder options
                const map<string, GVariant*>& options = decoder->options();
@@ -603,6 +609,7 @@ void DecodeSignal::restore_settings(QSettings &settings)
                                        make_shared<decode::Decoder>(dec);
 
                                stack_.push_back(decoder);
+                               decoder->show(settings.value("shown", true).toBool());
 
                                // Restore decoder options that differ from their default
                                int options = settings.value("options").toInt();