X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fsession.cpp;h=8bb1cb0d5741161217ea8608607efe3eb589f955;hb=6de38b17e7a9182b6557104dd3a902bb7784db95;hp=99de77495307386a01be90099c6a6a28402871f5;hpb=101e7a9b40cc97fcd94aca7a1bed086b1f56f269;p=pulseview.git diff --git a/pv/session.cpp b/pv/session.cpp index 99de774..8bb1cb0 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -26,12 +26,13 @@ #include #include -#ifdef ENABLE_DECODE -#include -#endif +#include +#include +#include -#include "session.hpp" +#include +#include "session.hpp" #include "devicemanager.hpp" #include "data/analog.hpp" @@ -53,16 +54,12 @@ #include "view/signal.hpp" #include "view/view.hpp" -#include -#include -#include - -#include - -#include - #include +#ifdef ENABLE_DECODE +#include +#endif + using boost::shared_lock; using boost::shared_mutex; using boost::unique_lock; @@ -168,6 +165,7 @@ void Session::save_settings(QSettings &settings) const { map dev_info; list key_list; + int stacks = 0; if (device_) { settings.beginGroup("Device"); @@ -187,8 +185,29 @@ void Session::save_settings(QSettings &settings) const settings.remove(QString::fromUtf8(key.c_str())); } - // TODO Save channel settings and decoders + // Save channels and decoders + for (shared_ptr base : signalbases_) { +#ifdef ENABLE_DECODE + if (base->is_decode_signal()) { + shared_ptr decoder_stack = + base->decoder_stack(); + std::shared_ptr top_decoder = + decoder_stack->stack().front(); + + settings.beginGroup("decoder_stack" + QString::number(stacks++)); + settings.setValue("id", top_decoder->decoder()->id); + settings.setValue("name", top_decoder->decoder()->name); + settings.endGroup(); + } else +#endif + { + settings.beginGroup(base->internal_name()); + base->save_settings(settings); + settings.endGroup(); + } + } + settings.setValue("decoder_stacks", stacks); settings.endGroup(); } } @@ -223,7 +242,26 @@ void Session::restore_settings(QSettings &settings) if (device) { set_device(device); - // TODO Restore channel settings and decoders + // Restore channels + for (shared_ptr base : signalbases_) { + settings.beginGroup(base->internal_name()); + base->restore_settings(settings); + settings.endGroup(); + } + + // Restore decoders +#ifdef ENABLE_DECODE + int stacks = settings.value("decoder_stacks").toInt(); + + for (int i = 0; i < stacks; i++) { + settings.beginGroup("decoder_stack" + QString::number(i++)); + + QString id = settings.value("id").toString(); + add_decoder(srd_decoder_get_by_id(id.toStdString().c_str())); + + settings.endGroup(); + } +#endif } settings.endGroup(); @@ -273,7 +311,7 @@ void Session::set_device(shared_ptr device) device_->open(); } catch (const QString &e) { device_.reset(); - device_selected(); + device_changed(); throw; } @@ -283,7 +321,7 @@ void Session::set_device(shared_ptr device) }); update_signals(); - device_selected(); + device_changed(); } void Session::set_default_device() @@ -440,6 +478,7 @@ bool Session::add_decoder(srd_decoder *const dec) shared_ptr(new data::SignalBase(nullptr)); signalbase->set_decoder_stack(decoder_stack); + signalbases_.insert(signalbase); for (std::shared_ptr view : views_) view->add_decode_trace(signalbase);