]> sigrok.org Git - pulseview.git/blobdiff - pv/session.cpp
Fix #1446 by starting the decode only for the last PD in the stack
[pulseview.git] / pv / session.cpp
index c2fd21498b248f36086580466ccf2356bd64bc87..0e071fbcdd9882d96ac7c4714ed3e969cf6e24b6 100644 (file)
@@ -218,6 +218,7 @@ void Session::save_setup(QSettings &settings) const
        for (const shared_ptr<views::ViewBase>& view : views_) {
                if (view != main_view_) {
                        settings.beginGroup("view" + QString::number(views++));
+                       settings.setValue("type", view->get_type());
                        view->save_settings(settings);
                        settings.endGroup();
                }
@@ -312,7 +313,7 @@ void Session::restore_setup(QSettings &settings)
 
                if (i > 0) {
                        views::ViewType type = (views::ViewType)settings.value("type").toInt();
-                       add_view(name_, type, this);
+                       add_view(type, this);
                        views_.back()->restore_settings(settings);
                } else
                        main_view_->restore_settings(settings);
@@ -663,9 +664,8 @@ void Session::stop_capture()
 
 void Session::register_view(shared_ptr<views::ViewBase> view)
 {
-       if (views_.empty()) {
+       if (views_.empty())
                main_view_ = view;
-       }
 
        views_.push_back(view);
 
@@ -673,35 +673,29 @@ void Session::register_view(shared_ptr<views::ViewBase> view)
        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 (const 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::DecodeChannel:
+       unordered_set< shared_ptr<data::SignalBase> > view_signalbases = view->signalbases();
+
+       for (const 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 if it doesn't have it yet
+               if (!sb_exists)
+                       switch (signalbase->type()) {
+                       case data::SignalBase::AnalogChannel:
+                       case data::SignalBase::LogicChannel:
+                       case data::SignalBase::MathChannel:
+                               view->add_signalbase(signalbase);
+                               break;
+                       case data::SignalBase::DecodeChannel:
 #ifdef ENABLE_DECODE
-                                       trace_view->add_decode_signal(
-                                               dynamic_pointer_cast<data::DecodeSignal>(signalbase));
+                               view->add_decode_signal(dynamic_pointer_cast<data::DecodeSignal>(signalbase));
 #endif
-                                       break;
-                               case data::SignalBase::MathChannel:
-                                       // TBD
-                                       break;
-                               }
-               }
+                               break;
+                       }
        }
 
        signals_changed();
@@ -825,7 +819,7 @@ void Session::set_capture_state(capture_state state)
        bool changed;
 
        if (state == Running)
-               acq_time_.start();
+               acq_time_.restart();
        if (state == Stopped)
                qDebug("Acquisition took %.2f s", acq_time_.elapsed() / 1000.);
 
@@ -1478,8 +1472,10 @@ void Session::on_new_decoders_selected(vector<const srd_decoder*> decoders)
        shared_ptr<data::DecodeSignal> signal = add_decode_signal();
 
        if (signal)
-               for (const srd_decoder* d : decoders)
-                       signal->stack_decoder(d);
+               for (unsigned int i = 0; i < decoders.size(); i++) {
+                       const srd_decoder* d = decoders[i];
+                       signal->stack_decoder(d, !(i < decoders.size() - 1));
+               }
 }
 #endif