diff --git a/DSView/pv/data/decoderstack.cpp b/DSView/pv/data/decoderstack.cpp index 3c0f0035..a1c9f43d 100644 --- a/DSView/pv/data/decoderstack.cpp +++ b/DSView/pv/data/decoderstack.cpp @@ -150,9 +150,8 @@ void DecoderStack::build_row() _rows.clear(); // Add classes - for (auto &dec : _stack) - { - assert(dec); + for (auto dec : _stack) + { const srd_decoder *const decc = dec->decoder(); assert(dec->decoder()); @@ -411,7 +410,6 @@ void DecoderStack::do_decode_work() _stask_stauts->_decoder = this; _decoder_status->clear(); //clear old items - pv::view::LogicSignal *logic_signal = NULL; pv::data::Logic *data = NULL; if (!_options_changed) @@ -437,17 +435,20 @@ void DecoderStack::do_decode_work() for (auto dec : _stack) { if (!dec->channels().empty()) { for(auto s : _session->get_signals()) { - if((s->get_index() == (*dec->channels().begin()).second) && - (logic_signal = dynamic_cast(s)) && - (data = logic_signal->logic_data())) - break; + if(s->get_index() == (*dec->channels().begin()).second && s->signal_type() == LOGIC_SIGNAL) + { + pv::view::LogicSignal *logicSig = (pv::view::LogicSignal*)s; + data = logicSig->logic_data(); + if (data != NULL) + break; + } } - if (data) + if (data != NULL) break; } } - if (!data) + if (!data == NULL) return; // Check we have a snapshot of data diff --git a/DSView/pv/data/spectrumstack.cpp b/DSView/pv/data/spectrumstack.cpp index fbde62aa..e2a41b88 100644 --- a/DSView/pv/data/spectrumstack.cpp +++ b/DSView/pv/data/spectrumstack.cpp @@ -174,7 +174,8 @@ void SpectrumStack::calc_fft() pv::view::DsoSignal *dsoSig = NULL; for(auto s : _session->get_signals()) { - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_index() == _index && dsoSig->enabled()) { data = dsoSig->dso_data(); break; diff --git a/DSView/pv/dialogs/decoderoptionsdlg.cpp b/DSView/pv/dialogs/decoderoptionsdlg.cpp index 1ed4ab89..8c8993e3 100644 --- a/DSView/pv/dialogs/decoderoptionsdlg.cpp +++ b/DSView/pv/dialogs/decoderoptionsdlg.cpp @@ -262,9 +262,9 @@ DsComboBox* DecoderOptionsDlg::create_probe_selector( int dex = 0; - for(auto s : sigs) { - if (dynamic_cast(s) && s->enabled()) - { + for(auto s : sigs) + { + if (s->signal_type() == LOGIC_SIGNAL && s->enabled()){ selector->addItem(s->get_name(),QVariant::fromValue(s->get_index())); if (probe_iter != _dec->channels().end()) { diff --git a/DSView/pv/dialogs/dsomeasure.cpp b/DSView/pv/dialogs/dsomeasure.cpp index e4832981..35db8516 100644 --- a/DSView/pv/dialogs/dsomeasure.cpp +++ b/DSView/pv/dialogs/dsomeasure.cpp @@ -57,8 +57,8 @@ DsoMeasure::DsoMeasure(SigSession *session, View &parent, _measure_tab->setUsesScrollButtons(false); for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig; - if ((dsoSig = dynamic_cast(s)) && dsoSig->enabled()) { + if (s->signal_type() == DSO_SIGNAL && s->enabled()) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; QWidget *measure_widget = new QWidget(this); this->add_measure(measure_widget, dsoSig); _measure_tab->addTab(measure_widget, QString::number(dsoSig->get_index())); @@ -160,9 +160,9 @@ void DsoMeasure::accept() QVariant id = sc->property("id"); enum DSO_MEASURE_TYPE ms_type = DSO_MEASURE_TYPE(id.toInt()); - for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + for(auto s : _session->get_signals()) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (_measure_tab->currentWidget()->property("index").toInt() == dsoSig->get_index()) { _view.get_viewstatus()->set_measure(_position, false, dsoSig->get_index(), ms_type); break; diff --git a/DSView/pv/dialogs/fftoptions.cpp b/DSView/pv/dialogs/fftoptions.cpp index 6d16a7d8..4684c04b 100644 --- a/DSView/pv/dialogs/fftoptions.cpp +++ b/DSView/pv/dialogs/fftoptions.cpp @@ -69,8 +69,8 @@ FftOptions::FftOptions(QWidget *parent, SigSession *session) : // setup _ch_combobox for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; _ch_combobox->addItem(dsoSig->get_name(), QVariant::fromValue(dsoSig->get_index())); } } diff --git a/DSView/pv/dialogs/lissajousoptions.cpp b/DSView/pv/dialogs/lissajousoptions.cpp index 566d13a7..42ab9f3d 100644 --- a/DSView/pv/dialogs/lissajousoptions.cpp +++ b/DSView/pv/dialogs/lissajousoptions.cpp @@ -76,8 +76,8 @@ LissajousOptions::LissajousOptions(SigSession *session, QWidget *parent) : QHBoxLayout *ylayout = new QHBoxLayout(); for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; QString index_str = QString::number(dsoSig->get_index()); QRadioButton *xradio = new QRadioButton(index_str, _x_group); xradio->setProperty("index", dsoSig->get_index()); @@ -183,8 +183,8 @@ void LissajousOptions::accept() _session->lissajous_rebuild(enable, xindex, yindex, _percent->value()); for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_show(!enable); } } diff --git a/DSView/pv/dialogs/mathoptions.cpp b/DSView/pv/dialogs/mathoptions.cpp index 2de15612..5fd96bb8 100644 --- a/DSView/pv/dialogs/mathoptions.cpp +++ b/DSView/pv/dialogs/mathoptions.cpp @@ -80,8 +80,8 @@ MathOptions::MathOptions(SigSession *session, QWidget *parent) : QHBoxLayout *src2_layout = new QHBoxLayout(); for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL;; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; QString index_str = QString::number(dsoSig->get_index()); QRadioButton *xradio = new QRadioButton(index_str, _src1_group); xradio->setProperty("index", dsoSig->get_index()); @@ -208,8 +208,8 @@ void MathOptions::accept() view::DsoSignal *dsoSig2 = NULL; for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL;; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_index() == src1) dsoSig1 = dsoSig; if (dsoSig->get_index() == src2) diff --git a/DSView/pv/dialogs/search.cpp b/DSView/pv/dialogs/search.cpp index b684610f..d3a5df8f 100644 --- a/DSView/pv/dialogs/search.cpp +++ b/DSView/pv/dialogs/search.cpp @@ -53,11 +53,11 @@ Search::Search(QWidget *parent, SigSession *session, std::map int index = 0; for(auto s : _session->get_signals()) { - view::LogicSignal *logic_sig = NULL; - if ((logic_sig = dynamic_cast(s))) { + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; QLineEdit *search_lineEdit = new QLineEdit(this); - if (pattern.find(logic_sig->get_index()) != pattern.end()) - search_lineEdit->setText(pattern[logic_sig->get_index()]); + if (pattern.find(logicSig->get_index()) != pattern.end()) + search_lineEdit->setText(pattern[logicSig->get_index()]); else search_lineEdit->setText("X"); search_lineEdit->setValidator(value_validator); @@ -66,8 +66,8 @@ Search::Search(QWidget *parent, SigSession *session, std::map search_lineEdit->setFont(font); _search_lineEdit_vec.push_back(search_lineEdit); - search_layout->addWidget(new QLabel(logic_sig->get_name()+":"), index, 0, Qt::AlignRight); - search_layout->addWidget(new QLabel(QString::number(logic_sig->get_index())), index, 1, Qt::AlignRight); + search_layout->addWidget(new QLabel(logicSig->get_name()+":"), index, 0, Qt::AlignRight); + search_layout->addWidget(new QLabel(QString::number(logicSig->get_index())), index, 1, Qt::AlignRight); search_layout->addWidget(search_lineEdit, index, 2); connect(search_lineEdit, SIGNAL(editingFinished()), this, SLOT(format())); @@ -113,9 +113,9 @@ std::map Search::get_pattern() int index = 0; for(auto s :_session->get_signals()) { - view::LogicSignal *logic_sig = NULL; - if ((logic_sig = dynamic_cast(s))) { - pattern[logic_sig->get_index()] = _search_lineEdit_vec[index]->text(); + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; + pattern[logicSig->get_index()] = _search_lineEdit_vec[index]->text(); index++; } } diff --git a/DSView/pv/dialogs/waitingdialog.cpp b/DSView/pv/dialogs/waitingdialog.cpp index 8a6e01b5..f81aa411 100644 --- a/DSView/pv/dialogs/waitingdialog.cpp +++ b/DSView/pv/dialogs/waitingdialog.cpp @@ -185,12 +185,13 @@ void WaitingDialog::changeText() if (gvar != NULL) { zero_fgain = g_variant_get_boolean(gvar); g_variant_unref(gvar); - if (zero_fgain) { - view::DsoSignal *dsoSig = NULL; - + + if (zero_fgain) { for(auto s : _session->get_signals()){ - if ((dsoSig = dynamic_cast(s))) + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_enable(dsoSig->get_index() == 0); + } } std::this_thread::sleep_for(std::chrono::milliseconds(100)); _device_agent->set_config(NULL, NULL, SR_CONF_ZERO_COMB, g_variant_new_boolean(true)); diff --git a/DSView/pv/dock/dsotriggerdock.cpp b/DSView/pv/dock/dsotriggerdock.cpp index 5e716bd2..fb582bcf 100644 --- a/DSView/pv/dock/dsotriggerdock.cpp +++ b/DSView/pv/dock/dsotriggerdock.cpp @@ -401,8 +401,8 @@ void DsoTriggerDock::init() _channel_comboBox->clear(); for(auto s : _session->get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; _channel_comboBox->addItem(dsoSig->get_name(), QVariant::fromValue(dsoSig->get_index())); } } diff --git a/DSView/pv/dock/measuredock.cpp b/DSView/pv/dock/measuredock.cpp index 0c22cb08..46f508ec 100644 --- a/DSView/pv/dock/measuredock.cpp +++ b/DSView/pv/dock/measuredock.cpp @@ -607,11 +607,11 @@ void MeasureDock::update_edge() const auto &sigs = _session->get_signals(); for(auto s : _session->get_signals()) { - view::LogicSignal *logicSig = NULL; - - if ((logicSig = dynamic_cast(s)) && - (logicSig->enabled()) && - (logicSig->get_index() == _edge_ch_cmb_vec[edge_index]->currentText().toInt())){ + if (s->signal_type() == LOGIC_SIGNAL + && s->enabled() + && s->get_index() == _edge_ch_cmb_vec[edge_index]->currentText().toInt()) + { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (logicSig->edges(_view.get_cursor_samples(end), _view.get_cursor_samples(start), rising_edges, falling_edges)) { QString delta_text = QString::number(rising_edges) + "/" + QString::number(falling_edges) + "/" + @@ -658,7 +658,7 @@ void MeasureDock::update_probe_selector(DsComboBox *selector) selector->clear(); for(auto s : _session->get_signals()) { - if (dynamic_cast(s) && s->enabled()){ + if (s->signal_type() == LOGIC_SIGNAL && s->enabled()){ selector->addItem(QString::number(s->get_index())); } } diff --git a/DSView/pv/dock/triggerdock.cpp b/DSView/pv/dock/triggerdock.cpp index c995a23c..687f0ea6 100644 --- a/DSView/pv/dock/triggerdock.cpp +++ b/DSView/pv/dock/triggerdock.cpp @@ -914,10 +914,9 @@ void TriggerDock::try_commit_trigger() if (commit_trigger() == false) { /* simple trigger check trigger_enable */ - for(auto s : _session->get_signals()) - { - view::LogicSignal *logicSig = NULL; - if ((logicSig = dynamic_cast(s))) { + for(auto s : _session->get_signals()){ + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (logicSig->commit_trig()) num++; } @@ -938,8 +937,8 @@ void TriggerDock::try_commit_trigger() if (msg.mBox()->clickedButton() == cancelButton) { for(auto s : _session->get_signals()){ - view::LogicSignal *logicSig = NULL; - if ((logicSig = dynamic_cast(s))) { + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; logicSig->set_trig(view::LogicSignal::NONTRIG); logicSig->commit_trig(); } diff --git a/DSView/pv/mainwindow.cpp b/DSView/pv/mainwindow.cpp index 11933c01..c4db6b5b 100644 --- a/DSView/pv/mainwindow.cpp +++ b/DSView/pv/mainwindow.cpp @@ -665,7 +665,7 @@ namespace pv } } - for (auto &s : _session->get_signals()) + for (auto s : _session->get_signals()) { QJsonObject s_obj; s_obj["index"] = s->get_index(); @@ -683,19 +683,20 @@ namespace pv s_obj["strigger"] = logicSig->get_trig(); } - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; s_obj["vdiv"] = QJsonValue::fromVariant(static_cast(dsoSig->get_vDialValue())); s_obj["vfactor"] = QJsonValue::fromVariant(static_cast(dsoSig->get_factor())); s_obj["coupling"] = dsoSig->get_acCoupling(); s_obj["trigValue"] = dsoSig->get_trig_vrate(); s_obj["zeroPos"] = dsoSig->get_zero_ratio(); } - - view::AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(s))) + + if (s->signal_type() == ANALOG_SIGNAL) { + view::AnalogSignal *analogSig = (view::AnalogSignal*)s; s_obj["vdiv"] = QJsonValue::fromVariant(static_cast(analogSig->get_vdiv())); s_obj["vfactor"] = QJsonValue::fromVariant(static_cast(analogSig->get_factor())); s_obj["coupling"] = analogSig->get_acCoupling(); @@ -910,7 +911,7 @@ namespace pv if (mode == DSO) { - for (auto &s : _session->get_signals()) + for (auto s : _session->get_signals()) { for (const QJsonValue &value : sessionObj["channel"].toArray()) { @@ -919,10 +920,10 @@ namespace pv (s->get_type() == obj["type"].toDouble())) { s->set_colour(QColor(obj["colour"].toString())); - - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + + if (s->signal_type() == DSO_SIGNAL) + { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->load_settings(); dsoSig->set_zero_ratio(obj["zeroPos"].toDouble()); dsoSig->set_trig_ratio(obj["trigValue"].toDouble()); @@ -935,7 +936,7 @@ namespace pv } else { - for (auto &s : _session->get_signals()) + for (auto s : _session->get_signals()) { for (const QJsonValue &value : sessionObj["channel"].toArray()) { @@ -951,19 +952,19 @@ namespace pv { logicSig->set_trig(obj["strigger"].toDouble()); } - - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->load_settings(); dsoSig->set_zero_ratio(obj["zeroPos"].toDouble()); dsoSig->set_trig_ratio(obj["trigValue"].toDouble()); dsoSig->commit_settings(); } - - view::AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(s))) - { + + if (s->signal_type() == ANALOG_SIGNAL) + { + view::AnalogSignal *analogSig = (view::AnalogSignal*)s; analogSig->set_zero_ratio(obj["zeroPos"].toDouble()); analogSig->commit_settings(); } @@ -1149,11 +1150,11 @@ namespace pv _view->zoom(-1); break; case Qt::Key_0: - for (auto &s : sigs) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : sigs) + { + if (s->signal_type() == DSO_SIGNAL) + { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_index() == 0) dsoSig->set_vDialActive(!dsoSig->get_vDialActive()); else @@ -1164,11 +1165,11 @@ namespace pv update(); break; case Qt::Key_1: - for (auto &s : sigs) + for (auto s : sigs) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_index() == 1) dsoSig->set_vDialActive(!dsoSig->get_vDialActive()); else @@ -1179,11 +1180,10 @@ namespace pv update(); break; case Qt::Key_Up: - for (auto &s : sigs) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : sigs) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_vDialActive()) { dsoSig->go_vDialNext(true); @@ -1194,11 +1194,10 @@ namespace pv } break; case Qt::Key_Down: - for (auto &s : sigs) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : sigs) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_vDialActive()) { dsoSig->go_vDialPre(true); diff --git a/DSView/pv/sigsession.cpp b/DSView/pv/sigsession.cpp index aeda4d5b..3b1f55f4 100644 --- a/DSView/pv/sigsession.cpp +++ b/DSView/pv/sigsession.cpp @@ -340,7 +340,7 @@ namespace pv _group_data->set_samplerate(_cur_snap_samplerate); // DecoderStack - for (auto &d : _decode_traces) + for (auto d : _decode_traces) { d->decoder()->set_samplerate(_cur_snap_samplerate); } @@ -349,7 +349,7 @@ namespace pv if (_math_trace && _math_trace->enabled()) _math_trace->get_math_stack()->set_samplerate(_device_agent.get_sample_rate()); // SpectrumStack - for (auto &m : _spectrum_traces) + for (auto m : _spectrum_traces) m->get_spectrum_stack()->set_samplerate(_cur_snap_samplerate); _callback->cur_snap_samplerate_changed(); @@ -388,16 +388,14 @@ namespace pv container_init(); // update current hw offset - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_zero_ratio(dsoSig->get_zero_ratio()); - } - view::AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(s))) - { + } + else if (s->signal_type() == ANALOG_SIGNAL){ + view::AnalogSignal *analogSig = (view::AnalogSignal*)s; analogSig->set_zero_ratio(analogSig->get_zero_ratio()); } } @@ -422,7 +420,7 @@ namespace pv _dso_data->init(); // SpectrumStack - for (auto &m : _spectrum_traces) + for (auto m : _spectrum_traces) { m->get_spectrum_stack()->init(); } @@ -431,7 +429,7 @@ namespace pv _math_trace->get_math_stack()->init(); // DecoderStack - for (auto &d : _decode_traces) + for (auto d : _decode_traces) { d->decoder()->init(); } @@ -493,11 +491,12 @@ namespace pv clear_all_decode_task(run_dex); // reset measure of dso signal - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_mValid(false); + } } if (_device_agent.have_enabled_channel() == false) @@ -619,7 +618,7 @@ namespace pv { std::set data; - for (auto &s : _signals) + for (auto s : _signals) { data.insert(s->data()); } @@ -842,10 +841,12 @@ namespace pv while (i != _signals.end()) { if ((*i)->get_index() == probe->index) - { - view::LogicSignal *logicSig = NULL; - if ((logicSig = dynamic_cast(*i))) + { + if ((*i)->signal_type() == LOGIC_SIGNAL){ + view::LogicSignal *logicSig = (view::LogicSignal*)(*i); signal = new view::LogicSignal(logicSig, _logic_data, probe); + } + break; } i++; @@ -865,9 +866,10 @@ namespace pv { if ((*i)->get_index() == probe->index) { - view::AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(*i))) + if ((*i)->signal_type() == ANALOG_SIGNAL){ + view::AnalogSignal *analogSig = (view::AnalogSignal*)(*i); signal = new view::AnalogSignal(analogSig, _analog_data, probe); + } break; } i++; @@ -903,7 +905,7 @@ namespace pv { _logic_data->init(); - for (auto &d : _decode_traces) + for (auto d : _decode_traces) { d->decoder()->init(); } @@ -913,7 +915,7 @@ namespace pv { _dso_data->init(); // SpectrumStack - for (auto &m : _spectrum_traces) + for (auto m : _spectrum_traces) { m->get_spectrum_stack()->init(); } @@ -1061,11 +1063,10 @@ namespace pv { std::map sig_enable; // reset scale of dso signal - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_scale(dsoSig->get_view_rect().height()); sig_enable[dsoSig->get_index()] = dsoSig->enabled(); } @@ -1080,11 +1081,12 @@ namespace pv _dso_data->snapshot()->append_payload(dso); } - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s)) && (dsoSig->enabled())) + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL && (s->enabled())){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->paint_prepare(); + } } if (dso.num_samples != 0) @@ -1101,7 +1103,7 @@ namespace pv } // calculate related spectrum results - for (auto &m : _spectrum_traces) + for (auto m : _spectrum_traces) { if (m->enabled()) m->get_spectrum_stack()->calc_fft(); @@ -1139,11 +1141,10 @@ namespace pv if (_analog_data->snapshot()->last_ended()) { // reset scale of analog signal - for (auto &s : _signals) - { - view::AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(s))) - { + for (auto s : _signals) + { + if (s->signal_type() == ANALOG_SIGNAL){ + view::AnalogSignal *analogSig = (view::AnalogSignal*)s; analogSig->set_scale(analogSig->get_totalHeight()); } } @@ -1232,7 +1233,7 @@ namespace pv { if (!_logic_data->snapshot()->empty()) { - for (auto &g : _group_traces) + for (auto g : _group_traces) { auto p = new data::GroupSnapshot(_logic_data->get_snapshots().front(), g->get_index_list()); _group_data->push_snapshot(p); @@ -1283,20 +1284,17 @@ namespace pv if (_device_agent.have_instance()) { - for (auto &s : _signals) + for (auto s : _signals) { - if (dynamic_cast(s) && s->enabled()) - { + if (!s->enabled()) + continue; + + if (s->signal_type() == LOGIC_SIGNAL) logic_ch_num++; - } - if (dynamic_cast(s) && s->enabled()) - { + else if (s->signal_type() == DSO_SIGNAL) dso_ch_num++; - } - if (dynamic_cast(s) && s->enabled()) - { + else if (s->signal_type() == ANALOG_SIGNAL) analog_ch_num++; - } } } @@ -1362,7 +1360,7 @@ namespace pv sub_decoders.clear(); // set view early for decode start/end region setting - for (auto &s : _signals) + for (auto s : _signals) { if (s->get_view()) { @@ -1478,25 +1476,23 @@ namespace pv { bool has_dso_signal = false; - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL){ has_dso_signal = true; // check already have auto iter = _spectrum_traces.begin(); for (unsigned int i = 0; i < _spectrum_traces.size(); i++, iter++){ - if ((*iter)->get_index() == dsoSig->get_index()) + if ((*iter)->get_index() == s->get_index()) break; } // if not, rebuild if (iter == _spectrum_traces.end()) { - auto spectrum_stack = new data::SpectrumStack(this, dsoSig->get_index()); - auto spectrum_trace = new view::SpectrumTrace(this, spectrum_stack, dsoSig->get_index()); + auto spectrum_stack = new data::SpectrumStack(this, s->get_index()); + auto spectrum_trace = new view::SpectrumTrace(this, spectrum_stack, s->get_index()); _spectrum_traces.push_back(spectrum_trace); } } @@ -1598,11 +1594,11 @@ namespace pv void SigSession::auto_end() { - for (auto &s : _signals) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + for (auto s : _signals) + { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->auto_end(); } } diff --git a/DSView/pv/toolbars/samplingbar.cpp b/DSView/pv/toolbars/samplingbar.cpp index f1d75c7e..50323550 100644 --- a/DSView/pv/toolbars/samplingbar.cpp +++ b/DSView/pv/toolbars/samplingbar.cpp @@ -313,13 +313,13 @@ namespace pv } void SamplingBar::zero_adj() - { - view::DsoSignal *dsoSig = NULL; - - for (auto &s : _session->get_signals()) + { + for (auto s : _session->get_signals()) { - if ((dsoSig = dynamic_cast(s))) + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->set_enable(true); + } } const int index_back = _sample_count.currentIndex(); @@ -338,10 +338,12 @@ namespace pv pv::dialogs::WaitingDialog wait(this, _session, SR_CONF_ZERO); if (wait.start() == QDialog::Rejected) { - for (auto &s : _session->get_signals()) + for (auto s : _session->get_signals()) { - if ((dsoSig = dynamic_cast(s))) + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->commit_settings(); + } } } diff --git a/DSView/pv/view/analogsignal.cpp b/DSView/pv/view/analogsignal.cpp index 8e07a600..bcb84301 100644 --- a/DSView/pv/view/analogsignal.cpp +++ b/DSView/pv/view/analogsignal.cpp @@ -56,6 +56,8 @@ AnalogSignal::AnalogSignal(data::Analog *data, sr_channel *probe) : _typeWidth = 5; _colour = SignalColours[probe->index % countof(SignalColours)]; + _signal_type = ANALOG_SIGNAL; + GVariant *gvar; // channel bits gvar = session->get_device()->get_config(NULL, NULL, SR_CONF_UNIT_BITS); diff --git a/DSView/pv/view/decodetrace.cpp b/DSView/pv/view/decodetrace.cpp index c14e279a..0e22122a 100644 --- a/DSView/pv/view/decodetrace.cpp +++ b/DSView/pv/view/decodetrace.cpp @@ -383,14 +383,12 @@ void DecodeTrace::draw_annotation(const pv::data::decode::Annotation &a, int type = dec->get_channel_type(iter.first); if ((type == SRD_CHANNEL_COMMON) || ((type%100 != a.type()%100) && (type%100 != 0))) - continue; - - LogicSignal *logic_sig = NULL; + continue; for(auto s : _session->get_signals()) { - if((s->get_index() == iter.second) && - (logic_sig = dynamic_cast(s))) { - logic_sig->paint_mark(p, start, end, type/100); + if((s->get_index() == iter.second) && s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; + logicSig->paint_mark(p, start, end, type/100); break; } } diff --git a/DSView/pv/view/dsosignal.cpp b/DSView/pv/view/dsosignal.cpp index 2bf314a5..f7144432 100644 --- a/DSView/pv/view/dsosignal.cpp +++ b/DSView/pv/view/dsosignal.cpp @@ -79,6 +79,8 @@ DsoSignal::DsoSignal(data::Dso *data, vUnit.append(vDialUnit[i]); } + _signal_type = DSO_SIGNAL; + GVariant *gvar_list, *gvar_list_vdivs; gvar_list = session->get_device()->get_config_list(NULL, SR_CONF_PROBE_VDIV); diff --git a/DSView/pv/view/header.cpp b/DSView/pv/view/header.cpp index 8dd66312..0bd4ab2e 100644 --- a/DSView/pv/view/header.cpp +++ b/DSView/pv/view/header.cpp @@ -325,7 +325,7 @@ void Header::wheelEvent(QWheelEvent *event) shift = delta / 80.0; #endif - for (auto &t : traces) + for (auto t : traces) { if (t->mouse_wheel(width(), pos, shift)) break; @@ -367,26 +367,26 @@ void Header::mouseMoveEvent(QMouseEvent *event) const int delta = event->pos().y() - _mouse_down_point.y(); for (auto i = _drag_traces.begin(); i != _drag_traces.end(); i++) { - const auto sig = (*i).first; - if (sig) { + const auto t = (*i).first; + if (t) { int y = (*i).second + delta; - if (sig->get_type() == SR_CHANNEL_DSO) { + if (t->get_type() == SR_CHANNEL_DSO) { DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(sig))) { + if ((dsoSig = dynamic_cast(t))) { dsoSig->set_zero_vpos(y); _moveFlag = true; traces_moved(); } - } else if (sig->get_type() == SR_CHANNEL_MATH) { + } else if (t->get_type() == SR_CHANNEL_MATH) { MathTrace *mathTrace = NULL; - if ((mathTrace = dynamic_cast(sig))) { + if ((mathTrace = dynamic_cast(t))) { mathTrace->set_zero_vpos(y); _moveFlag = true; traces_moved(); } - } else if (sig->get_type() == SR_CHANNEL_ANALOG) { + } else if (t->get_type() == SR_CHANNEL_ANALOG) { AnalogSignal *analogSig = NULL; - if ((analogSig = dynamic_cast(sig))) { + if ((analogSig = dynamic_cast(t))) { analogSig->set_zero_vpos(y); _moveFlag = true; traces_moved(); @@ -397,9 +397,9 @@ void Header::mouseMoveEvent(QMouseEvent *event) ((y + View::SignalSnapGridSize / 2) / View::SignalSnapGridSize) * View::SignalSnapGridSize; - if (y_snap != sig->get_v_offset()) { + if (y_snap != t->get_v_offset()) { _moveFlag = true; - sig->set_v_offset(y_snap); + t->set_v_offset(y_snap); } } } diff --git a/DSView/pv/view/logicsignal.cpp b/DSView/pv/view/logicsignal.cpp index 0a6581cc..352ae2be 100644 --- a/DSView/pv/view/logicsignal.cpp +++ b/DSView/pv/view/logicsignal.cpp @@ -46,6 +46,7 @@ LogicSignal::LogicSignal(data::Logic *data, _data(data) { _trig = NONTRIG; + _signal_type = LOGIC_SIGNAL; } LogicSignal::LogicSignal(view::LogicSignal *s, diff --git a/DSView/pv/view/signal.cpp b/DSView/pv/view/signal.cpp index b7b92a2f..0443f86e 100644 --- a/DSView/pv/view/signal.cpp +++ b/DSView/pv/view/signal.cpp @@ -33,7 +33,8 @@ namespace view { Signal::Signal(sr_channel *probe) : Trace(probe->name, probe->index, probe->type), - _probe(probe) + _probe(probe), + _signal_type(UNKNOWN_SIGNAL) { session = AppControl::Instance()->GetSession(); } diff --git a/DSView/pv/view/signal.h b/DSView/pv/view/signal.h index e6363f5b..3d071feb 100644 --- a/DSView/pv/view/signal.h +++ b/DSView/pv/view/signal.h @@ -37,6 +37,14 @@ #include #include "trace.h" +enum SIGNAL_TYPE +{ + UNKNOWN_SIGNAL = 0, + LOGIC_SIGNAL = 1, + DSO_SIGNAL = 2, + ANALOG_SIGNAL = 3, +}; + namespace pv { namespace data { @@ -76,11 +84,14 @@ public: */ void set_name(QString name); - + inline SIGNAL_TYPE signal_type(){ + return _signal_type; + } protected: sr_channel *const _probe; - SigSession *session; + SigSession *session; + SIGNAL_TYPE _signal_type; }; } // namespace view diff --git a/DSView/pv/view/spectrumtrace.cpp b/DSView/pv/view/spectrumtrace.cpp index d26a518e..91a26376 100644 --- a/DSView/pv/view/spectrumtrace.cpp +++ b/DSView/pv/view/spectrumtrace.cpp @@ -82,8 +82,9 @@ SpectrumTrace::SpectrumTrace(pv::SigSession *session, _typeWidth = 0; for(auto s : _session->get_signals()) { - if (dynamic_cast(s) && index == s->get_index()) + if (s->signal_type() == DSO_SIGNAL && index == s->get_index()){ _colour = s->get_colour(); + } } } @@ -304,8 +305,8 @@ void SpectrumTrace::paint_mid(QPainter &p, int left, int right, QColor fore, QCo double vfactor = 0; for(auto s : _session->get_signals()) { - DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if(dsoSig->get_index() == _spectrum_stack->get_index()) { vdiv = dsoSig->get_vDialValue(); vfactor = dsoSig->get_factor(); diff --git a/DSView/pv/view/view.cpp b/DSView/pv/view/view.cpp index c5a28862..975a6ee7 100644 --- a/DSView/pv/view/view.cpp +++ b/DSView/pv/view/view.cpp @@ -722,8 +722,7 @@ void View::signals_changed() if (!time_traces.empty() && _time_viewport) { for(auto t : time_traces) { - if (dynamic_cast(t) || - t->enabled()) + if (dynamic_cast(t) || t->enabled()) total_rows += t->rows_size(); if (t->rows_size() != 0) label_size++; diff --git a/DSView/pv/view/viewport.cpp b/DSView/pv/view/viewport.cpp index 90562710..953894a8 100644 --- a/DSView/pv/view/viewport.cpp +++ b/DSView/pv/view/viewport.cpp @@ -513,11 +513,9 @@ void Viewport::mousePressEvent(QMouseEvent *event) _view.session().get_device()->get_work_mode() == DSO) { for(auto s : _view.session().get_signals()) - { - if (!s->enabled()) - continue; - DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + { + if (s->signal_type() == DSO_SIGNAL && s->enabled()) { + DsoSignal *dsoSig = (DsoSignal*)s; if (dsoSig->get_trig_rect(0, _view.get_view_width()).contains(_mouse_point)) { _drag_sig = s; _action_type = DSO_TRIG_MOVE; @@ -565,15 +563,16 @@ void Viewport::mousePressEvent(QMouseEvent *event) if (_view.get_xcursorList().empty()) _view.show_xcursors(false); break; - } else if ((*i)->get_map_rect(xrect).contains(_view.hover_point())) { + } + else if ((*i)->get_map_rect(xrect).contains(_view.hover_point())) { auto &sigs = _view.session().get_signals(); auto s = sigs.begin(); bool sig_looped = ((*i)->channel() == NULL); bool no_dsoSig = true; - while (1) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(*s)) && - dsoSig->enabled()) { + + while (true) { + if ((*s)->signal_type() == DSO_SIGNAL && (*s)->enabled()) { + view::DsoSignal *dsoSig = (view::DsoSignal*)(*s); no_dsoSig = false; if (sig_looped) { (*i)->set_channel(dsoSig); @@ -620,6 +619,7 @@ void Viewport::mouseMoveEvent(QMouseEvent *event) { assert(event); _hover_hit = false; + int mode = _view.session().get_device()->get_work_mode(); if (event->buttons() & Qt::LeftButton) { if (_type == TIME_VIEW) { @@ -644,12 +644,10 @@ void Viewport::mouseMoveEvent(QMouseEvent *event) if ((event->buttons() & Qt::LeftButton) || !(event->buttons() | Qt::NoButton)) { if (_action_type == DSO_TRIG_MOVE) { - if (_drag_sig) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(_drag_sig))) { - dsoSig->set_trig_vpos(event->pos().y()); - _dso_trig_moved = true; - } + if (_drag_sig && _drag_sig->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)_drag_sig; + dsoSig->set_trig_vpos(event->pos().y()); + _dso_trig_moved = true; } } @@ -660,18 +658,16 @@ void Viewport::mouseMoveEvent(QMouseEvent *event) uint64_t index0 = 0, index1 = 0, index2 = 0; bool logic = false; - for(auto s : _view.session().get_signals()) { - view::LogicSignal *logicSig = NULL; - view::DsoSignal *dsoSig = NULL; - if ((_view.session().get_device()->get_work_mode() == LOGIC) && - (logicSig = dynamic_cast(s))) { + for(auto s : _view.session().get_signals()) { + if (mode == LOGIC && s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (logicSig->measure(event->pos(), index0, index1, index2)) { logic = true; break; } } - if ((_view.session().get_device()->get_work_mode() == DSO) && - (dsoSig = dynamic_cast(s))) { + if (mode == DSO && s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; curX = min(dsoSig->get_view_rect().right(), curX); break; } @@ -794,9 +790,9 @@ void Viewport::mouseReleaseEvent(QMouseEvent *event) if (_mouse_down_point.x() == event->pos().x()) { const auto &sigs = _view.session().get_signals(); - for(auto s : sigs) { - view::LogicSignal *logicSig = NULL; - if ((logicSig = dynamic_cast(s))) { + for(auto s : sigs) { + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (logicSig->edge(event->pos(), _edge_start, 10)) { _action_type = LOGIC_JUMP; _cur_preX = _view.index2pixel(_edge_start); @@ -960,8 +956,9 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event) if (!_view.get_view_rect().contains(event->pos())) return; - if (_view.session().get_device()->get_work_mode() == LOGIC - && _view.session().is_stopped_status()) + int mode = _view.session().get_device()->get_work_mode(); + + if (mode == LOGIC && _view.session().is_stopped_status()) { if (event->button() == Qt::RightButton) { if (_view.scale() == _view.get_maxscale()) @@ -973,10 +970,11 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event) bool logic = false; uint64_t index; uint64_t index0 = 0, index1 = 0, index2 = 0; - if (_view.session().get_device()->get_work_mode() == LOGIC) { + + if (mode == LOGIC) { for(auto s : _view.session().get_signals()) { - view::LogicSignal *logicSig = NULL; - if ((logicSig = dynamic_cast(s))) { + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (logicSig->measure(event->pos(), index0, index1, index2)) { logic = true; break; @@ -987,14 +985,17 @@ void Viewport::mouseDoubleClickEvent(QMouseEvent *event) const double curX = event->pos().x(); const double curP = _view.index2pixel(index0); const double curN = _view.index2pixel(index1); + if (logic && (curX - curP < SnapMinSpace || curN - curX < SnapMinSpace)) { if (curX - curP < curN - curX) index = index0; else index = index1; - } else { + } + else { index = _view.pixel2index(curX); } + _view.add_cursor(view::Ruler::CursorColor[_view.get_cursorList().size() % 8], index); _view.show_cursors(true); } @@ -1057,7 +1058,7 @@ void Viewport::wheelEvent(QWheelEvent *event) if (_type == FFT_VIEW) { - for (auto &t : _view.session().get_spectrum_traces()) + for (auto t : _view.session().get_spectrum_traces()) { if (t->enabled()) { @@ -1105,11 +1106,10 @@ void Viewport::wheelEvent(QWheelEvent *event) } const auto &sigs = _view.session().get_signals(); - for (auto &s : sigs) - { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) - { + for (auto s : sigs) + { + if (s->signal_type() == DSO_SIGNAL){ + view::DsoSignal *dsoSig = (view::DsoSignal*)s; dsoSig->auto_end(); } } @@ -1217,11 +1217,8 @@ void Viewport::measure() const uint64_t sample_rate = _view.session().cur_snap_samplerate(); for(auto s : _view.session().get_signals()) { - view::LogicSignal *logicSig = NULL; - view::DsoSignal *dsoSig = NULL; - view::AnalogSignal *analogSig = NULL; - - if ((logicSig = dynamic_cast(s))) { + if (s->signal_type() == LOGIC_SIGNAL) { + view::LogicSignal *logicSig = (view::LogicSignal*)s; if (_action_type == NO_ACTION) { if (logicSig->measure(_mouse_point, _cur_sample, _nxt_sample, _thd_sample)) { _measure_type = LOGIC_FREQ; @@ -1271,16 +1268,21 @@ void Viewport::measure() _edge_hit = false; } } - } else if ((dsoSig = dynamic_cast(s))) { - if (dsoSig->enabled()) { + } + else if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = ( view::DsoSignal*)s; + if (s->enabled()) { if (_measure_en && dsoSig->measure(_view.hover_point())) { _measure_type = DSO_VALUE; - } else { + } + else { _measure_type = NO_MEASURE; } } - } else if ((analogSig = dynamic_cast(s))) { - if (analogSig->enabled()) { + } + else if (s->signal_type() == ANALOG_SIGNAL) { + view::AnalogSignal *analogSig = (view::AnalogSignal*)s; + if (s->enabled()) { if (_measure_en && analogSig->measure(_view.hover_point())) { _measure_type = DSO_VALUE; } else { @@ -1373,12 +1375,10 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back) _measure_type == DSO_VALUE) { for(auto s : _view.session().get_signals()) { - view::DsoSignal *dsoSig = NULL; - view::AnalogSignal* analogSig = NULL; - - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL) { uint64_t index; double value; + view::DsoSignal *dsoSig = (view::DsoSignal*)s; QPointF hpoint; if (dsoSig->get_hover(index, hpoint, value)) { p.setPen(QPen(fore, 1, Qt::DashLine)); @@ -1386,10 +1386,12 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back) p.drawLine(hpoint.x(), dsoSig->get_view_rect().top(), hpoint.x(), dsoSig->get_view_rect().bottom()); } - } else if ((analogSig = dynamic_cast(s))) { + } + else if (s->signal_type() == ANALOG_SIGNAL) { uint64_t index; double value; QPointF hpoint; + view::AnalogSignal* analogSig = (view::AnalogSignal*)s; if (analogSig->get_hover(index, hpoint, value)) { p.setPen(QPen(fore, 1, Qt::DashLine)); p.setBrush(Qt::NoBrush); @@ -1401,9 +1403,9 @@ void Viewport::paintMeasure(QPainter &p, QColor fore, QColor back) } if (_dso_ym_valid) { - for(auto s : _view.session().get_signals()) { - view::DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) { + for(auto s : _view.session().get_signals()) { + if (s->signal_type() == DSO_SIGNAL) { + view::DsoSignal *dsoSig = (view::DsoSignal*)s; if (dsoSig->get_index() == _dso_ym_sig_index) { p.setPen(QPen(dsoSig->get_colour(), 1, Qt::DotLine)); const int text_height = p.boundingRect(0, 0, INT_MAX, INT_MAX, diff --git a/DSView/pv/view/viewstatus.cpp b/DSView/pv/view/viewstatus.cpp index 552687bb..c986e7c4 100644 --- a/DSView/pv/view/viewstatus.cpp +++ b/DSView/pv/view/viewstatus.cpp @@ -86,9 +86,8 @@ void ViewStatus::paintEvent(QPaintEvent *) view::DsoSignal *dsoSig = NULL; for(auto s : _session->get_signals()) { - if (!s->enabled()) - continue; - if ((dsoSig = dynamic_cast(s))) { + if (s->signal_type() == DSO_SIGNAL && s->enabled()) { + dsoSig = (view::DsoSignal*)s; if (sig_index == dsoSig->get_index()) break; else diff --git a/DSView/pv/view/xcursor.cpp b/DSView/pv/view/xcursor.cpp index 6af75c98..016bdccb 100644 --- a/DSView/pv/view/xcursor.cpp +++ b/DSView/pv/view/xcursor.cpp @@ -44,13 +44,14 @@ XCursor::XCursor(View &view, QColor &colour, { _dsoSig = NULL; - for(auto s : _view.session().get_signals()) { - DsoSignal *dsoSig = NULL; - if ((dsoSig = dynamic_cast(s))) + for(auto s : _view.session().get_signals()) { + if (s->signal_type() == DSO_SIGNAL){ + DsoSignal *dsoSig = (DsoSignal*)s; if (dsoSig->enabled()) { _dsoSig = dsoSig; break; } + } } }