X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fview%2Fdecodetrace.cpp;h=b4201dd9c022005ce50d673c9ebc6747ee6c6d0a;hp=c2369e866fbe3b7286c602adc41735ed1c6a579b;hb=04394ded8776d2163c1e815ccc8170b81d76b028;hpb=a303c2d88f424fa7d548d74b335965ce29154166 diff --git a/pv/view/decodetrace.cpp b/pv/view/decodetrace.cpp index c2369e86..b4201dd9 100644 --- a/pv/view/decodetrace.cpp +++ b/pv/view/decodetrace.cpp @@ -50,7 +50,7 @@ extern "C" { #include #include #include -#include +#include #include #include #include @@ -129,10 +129,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 +146,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 +604,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 +613,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()) @@ -849,8 +851,8 @@ QComboBox* DecodeTrace::create_channel_selector( 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) { - return strnatcasecmp(a->name().toStdString(), - b->name().toStdString()) < 0; }); + return strnatcasecmp(a->base()->name().toStdString(), + b->base()->name().toStdString()) < 0; }); assert(decoder_stack_); const auto channel_iter = dec->channels().find(pdch); @@ -864,12 +866,12 @@ QComboBox* DecodeTrace::create_channel_selector( for (const shared_ptr &s : sig_list) { assert(s); - if (dynamic_pointer_cast(s) && s->enabled()) { - selector->addItem(s->name(), - qVariantFromValue((void*)s.get())); + if (s->base()->type() == sigrok::ChannelType::LOGIC && s->enabled()) { + selector->addItem(s->base()->name(), + qVariantFromValue((void*)s->base().get())); if (channel_iter != dec->channels().end() && - (*channel_iter).second == s) + (*channel_iter).second == s->base()) selector->setCurrentIndex( selector->count() - 1); } @@ -882,7 +884,7 @@ void DecodeTrace::commit_decoder_channels(shared_ptr &dec { assert(dec); - map > channel_map; + map > channel_map; const unordered_set< shared_ptr > sigs(session_.signals()); @@ -890,14 +892,13 @@ void DecodeTrace::commit_decoder_channels(shared_ptr &dec 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) - if (sig.get() == selection) { - channel_map[s.pdch_] = - dynamic_pointer_cast(sig); + if (sig->base().get() == selection) { + channel_map[s.pdch_] = sig->base(); break; } }