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();
return result;
}
-vector<Row> DecodeSignal::visible_rows() const
+vector<Row> DecodeSignal::get_rows(bool visible_only) const
{
lock_guard<mutex> lock(output_mutex_);
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();
{
// 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>();
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();
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();