X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdata%2Fdecodesignal.cpp;h=b1f3cea75a9d8d40a629df8d2f67ddb824cf2c0d;hp=49b76f2aa9cedd87533031cadd512d50e1589ab2;hb=d3feec232211b3acec6a323ca3b8008ed8b2faa0;hpb=88870fffb650365d2ece97e41981ad78fec06600 diff --git a/pv/data/decodesignal.cpp b/pv/data/decodesignal.cpp index 49b76f2..b1f3cea 100644 --- a/pv/data/decodesignal.cpp +++ b/pv/data/decodesignal.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include using std::lock_guard; @@ -422,6 +423,22 @@ void DecodeSignal::save_settings(QSettings &settings) const settings.setValue("id", decoder->decoder()->id); + // Save decoder options + const map& options = decoder->options(); + + settings.setValue("options", (int)options.size()); + + // Note: decode::Decoder::options() returns only the options + // that differ from the default. See binding::Decoder::getter() + int i = 0; + for (auto option : options) { + settings.beginGroup("option" + QString::number(i)); + settings.setValue("name", QString::fromStdString(option.first)); + GlobalSettings::store_gvariant(settings, option.second); + settings.endGroup(); + i++; + } + settings.endGroup(); } @@ -447,8 +464,6 @@ void DecodeSignal::save_settings(QSettings &settings) const settings.endGroup(); } - - // TODO Save decoder options } void DecodeSignal::restore_settings(QSettings &settings) @@ -471,7 +486,21 @@ void DecodeSignal::restore_settings(QSettings &settings) continue; if (QString::fromUtf8(dec->id) == id) { - stack_.push_back(make_shared(dec)); + shared_ptr decoder = + make_shared(dec); + + stack_.push_back(decoder); + + // Restore decoder options that differ from their default + int options = settings.value("options").toInt(); + + for (int i = 0; i < options; i++) { + settings.beginGroup("option" + QString::number(i)); + QString name = settings.value("name").toString(); + GVariant *value = GlobalSettings::restore_gvariant(settings); + decoder->set_option(name.toUtf8(), value); + settings.endGroup(); + } // Include the newly created decode channels in the channel lists update_channel_list(); @@ -511,8 +540,6 @@ void DecodeSignal::restore_settings(QSettings &settings) } begin_decode(); - - // TODO Restore decoder options } void DecodeSignal::update_channel_list()