X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=pv%2Fdata%2Fdecodesignal.cpp;h=4a7d6ed8c60a7593773d50bf17026176f018678b;hb=0822e33a2eb713815ae2cd5d6fcca0865643bb00;hp=68b17a65d076668b182172bee71f5a30605cb232;hpb=f4ab4b5c657e5613caba82feaa81a8a400e4f331;p=pulseview.git diff --git a/pv/data/decodesignal.cpp b/pv/data/decodesignal.cpp index 68b17a65..4a7d6ed8 100644 --- a/pv/data/decodesignal.cpp +++ b/pv/data/decodesignal.cpp @@ -78,14 +78,19 @@ const vector< shared_ptr >& DecodeSignal::decoder_stack() const void DecodeSignal::stack_decoder(const srd_decoder *decoder) { assert(decoder); - const shared_ptr dec = make_shared(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 dec = make_shared(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 DecodeSignal::visible_rows() const +vector DecodeSignal::get_rows(bool visible_only) const { lock_guard lock(output_mutex_); @@ -452,7 +457,7 @@ vector DecodeSignal::visible_rows() const for (const shared_ptr& 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 rows = visible_rows(); + const vector rows = get_rows(true); // Use forward_lists for faster merging forward_list *all_ann_list = new forward_list(); @@ -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& options = decoder->options(); @@ -603,6 +609,7 @@ void DecodeSignal::restore_settings(QSettings &settings) make_shared(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();