int decode_signals = settings.value("decode_signals").toInt();
for (int i = 0; i < decode_signals; i++) {
- settings.beginGroup("decode_signal" + QString::number(i++));
- // TODO Split up add_decoder() into add_decode_signal() and add_decoder(),
- // then call add_decode_signal() and signal->restore_settings() here
+ settings.beginGroup("decode_signal" + QString::number(i));
+ shared_ptr<data::DecodeSignal> signal = add_decode_signal();
+ signal->restore_settings(settings);
settings.endGroup();
}
#endif
views_.push_back(view);
+ // Add all device signals
update_signals();
+
+ // Add all other signals
+ unordered_set< shared_ptr<data::SignalBase> > view_signalbases =
+ view->signalbases();
+
+ views::trace::View *trace_view =
+ qobject_cast<views::trace::View*>(view.get());
+
+ if (trace_view) {
+ for (shared_ptr<data::SignalBase> signalbase : signalbases_) {
+ const int sb_exists = count_if(
+ view_signalbases.cbegin(), view_signalbases.cend(),
+ [&](const shared_ptr<data::SignalBase> &sb) {
+ return sb == signalbase;
+ });
+ // Add the signal to the view as it doesn't have it yet
+ if (!sb_exists)
+ switch (signalbase->type()) {
+ case data::SignalBase::AnalogChannel:
+ case data::SignalBase::LogicChannel:
+ case data::SignalBase::A2LChannel:
+ break;
+ case data::SignalBase::DecodeChannel:
+#ifdef ENABLE_DECODE
+ trace_view->add_decode_signal(
+ dynamic_pointer_cast<data::DecodeSignal>(signalbase));
+#endif
+ break;
+ case data::SignalBase::MathChannel:
+ // TBD
+ break;
+ }
+ }
+ }
+
+ signals_changed();
}
void Session::deregister_view(shared_ptr<views::ViewBase> view)
}
#ifdef ENABLE_DECODE
-bool Session::add_decoder(srd_decoder *const dec)
+shared_ptr<data::DecodeSignal> Session::add_decode_signal()
{
- if (!dec)
- return false;
+ shared_ptr<data::DecodeSignal> signal;
try {
// Create the decode signal
- shared_ptr<data::DecodeSignal> signal =
- make_shared<data::DecodeSignal>(*this);
+ signal = make_shared<data::DecodeSignal>(*this);
signalbases_.insert(signal);
// Add the decode signal to all views
for (shared_ptr<views::ViewBase> view : views_)
view->add_decode_signal(signal);
-
- // Add decoder
- signal->stack_decoder(dec);
} catch (runtime_error e) {
- return false;
+ remove_decode_signal(signal);
+ return nullptr;
}
signals_changed();
- return true;
+ return signal;
}
void Session::remove_decode_signal(shared_ptr<data::DecodeSignal> signal)