X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=1f21b024fb4f79000d2bee510833a17950a54dcf;hp=c2369e866fbe3b7286c602adc41735ed1c6a579b;hb=47e9e7bbc3a4e91a960f4cbb1db48c5aff6dcace;hpb=a303c2d88f424fa7d548d74b335965ce29154166 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index c2369e86..1f21b024 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -50,7 +50,6 @@ extern "C" { #include #include #include -#include #include #include #include @@ -129,10 +128,11 @@ const QColor DecodeTrace::OutlineColours[16] = { }; DecodeTrace::DecodeTrace(pv::Session &session, + shared_ptr signalbase, std::shared_ptr decoder_stack, int index) : - Trace(QString::fromUtf8( - decoder_stack->stack().front()->decoder()->name)), + Trace(signalbase), session_(session), + signalbase_(signalbase), decoder_stack_(decoder_stack), row_height_(0), max_visible_rows_(0), @@ -145,7 +145,8 @@ DecodeTrace::DecodeTrace(pv::Session &session, QFontMetrics m(QApplication::font()); min_useful_label_width_ = m.width("XX"); // e.g. two hex characters - set_colour(DecodeColours[index % countof(DecodeColours)]); + signalbase_->set_name(QString::fromUtf8(decoder_stack->stack().front()->decoder()->name)); + signalbase_->set_colour(DecodeColours[index % countof(DecodeColours)]); connect(decoder_stack_.get(), SIGNAL(new_decode_data()), this, SLOT(on_new_decode_data())); @@ -602,7 +603,7 @@ void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left, assert(decoder_stack_); shared_ptr data; - shared_ptr logic_signal; + shared_ptr signalbase; const list< shared_ptr > &stack = decoder_stack_->stack(); @@ -611,8 +612,8 @@ void DecodeTrace::draw_unresolved_period(QPainter &p, int h, int left, // LogicSignals have the same data/segment for (const shared_ptr &dec : stack) if (dec && !dec->channels().empty() && - ((logic_signal = (*dec->channels().begin()).second)) && - ((data = logic_signal->logic_data()))) + ((signalbase = (*dec->channels().begin()).second)) && + ((data = signalbase->logic_data()))) break; if (!data || data->logic_segments().empty()) @@ -844,15 +845,15 @@ QComboBox* DecodeTrace::create_channel_selector( { assert(dec); - const auto sigs(session_.signals()); + const auto sigs(session_.signalbases()); - vector< shared_ptr > sig_list(sigs.begin(), sigs.end()); + vector< shared_ptr > sig_list(sigs.begin(), sigs.end()); std::sort(sig_list.begin(), sig_list.end(), - [](const shared_ptr &a, const shared_ptr b) { + [](const shared_ptr &a, + const shared_ptr &b) { return strnatcasecmp(a->name().toStdString(), b->name().toStdString()) < 0; }); - assert(decoder_stack_); const auto channel_iter = dec->channels().find(pdch); QComboBox *selector = new QComboBox(parent); @@ -862,14 +863,14 @@ QComboBox* DecodeTrace::create_channel_selector( if (channel_iter == dec->channels().end()) selector->setCurrentIndex(0); - for (const shared_ptr &s : sig_list) { - assert(s); - if (dynamic_pointer_cast(s) && s->enabled()) { - selector->addItem(s->name(), - qVariantFromValue((void*)s.get())); + for (const shared_ptr &b : sig_list) { + assert(b); + if (b->type() == sigrok::ChannelType::LOGIC && b->enabled()) { + selector->addItem(b->name(), + qVariantFromValue((void*)b.get())); if (channel_iter != dec->channels().end() && - (*channel_iter).second == s) + (*channel_iter).second == b) selector->setCurrentIndex( selector->count() - 1); } @@ -882,22 +883,22 @@ void DecodeTrace::commit_decoder_channels(shared_ptr &dec { assert(dec); - map > channel_map; + map > channel_map; - const unordered_set< shared_ptr > sigs(session_.signals()); + const unordered_set< shared_ptr > + sigs(session_.signalbases()); for (const ChannelSelector &s : channel_selectors_) { if (s.decoder_ != dec) break; - const LogicSignal *const selection = - (LogicSignal*)s.combo_->itemData( + const data::SignalBase *const selection = + (data::SignalBase*)s.combo_->itemData( s.combo_->currentIndex()).value(); - for (shared_ptr sig : sigs) + for (shared_ptr sig : sigs) if (sig.get() == selection) { - channel_map[s.pdch_] = - dynamic_pointer_cast(sig); + channel_map[s.pdch_] = sig; break; } }