]> sigrok.org Git - pulseview.git/blobdiff - pv/prop/binding/decoderoptions.cpp
StoreSession: Support output formats other than srzip
[pulseview.git] / pv / prop / binding / decoderoptions.cpp
index c5278c75fbb82583ba7082e4d4dc04ef4bf502f6..d9b4b88d540ebb285b1ea28e352e21003f978705 100644 (file)
 
 #include <libsigrokdecode/libsigrokdecode.h>
 
-#include "decoderoptions.h"
+#include "decoderoptions.hpp"
 
 #include <boost/none_t.hpp>
 
-#include <pv/data/decoderstack.h>
-#include <pv/data/decode/decoder.h>
-#include <pv/prop/double.h>
-#include <pv/prop/enum.h>
-#include <pv/prop/int.h>
-#include <pv/prop/string.h>
+#include <pv/data/decoderstack.hpp>
+#include <pv/data/decode/decoder.hpp>
+#include <pv/prop/double.hpp>
+#include <pv/prop/enum.hpp>
+#include <pv/prop/int.hpp>
+#include <pv/prop/string.hpp>
 
 using boost::none;
 using std::make_pair;
@@ -46,12 +46,12 @@ namespace binding {
 DecoderOptions::DecoderOptions(
        shared_ptr<pv::data::DecoderStack> decoder_stack,
        shared_ptr<data::decode::Decoder> decoder) :
-       _decoder_stack(decoder_stack),
-       _decoder(decoder)
+       decoder_stack_(decoder_stack),
+       decoder_(decoder)
 {
-       assert(_decoder);
+       assert(decoder_);
 
-       const srd_decoder *const dec = _decoder->decoder();
+       const srd_decoder *const dec = decoder_->decoder();
        assert(dec);
 
        for (GSList *l = dec->options; l; l = l->next)
@@ -63,7 +63,7 @@ DecoderOptions::DecoderOptions(
 
                const Property::Getter get = [&, opt]() {
                        return getter(opt->id); };
-               const Property::Setter set = [&, opt](GVariant *value) {
+               const Property::Setter set = [&, opt](Glib::VariantBase value) {
                        setter(opt->id, value); };
 
                shared_ptr<Property> prop;
@@ -82,7 +82,7 @@ DecoderOptions::DecoderOptions(
                else
                        continue;
 
-               _properties.push_back(prop);
+               properties_.push_back(prop);
        }
 }
 
@@ -90,34 +90,33 @@ shared_ptr<Property> DecoderOptions::bind_enum(
        const QString &name, const srd_decoder_option *option,
        Property::Getter getter, Property::Setter setter)
 {
-       vector< pair<GVariant*, QString> > values;
+       vector< pair<Glib::VariantBase, QString> > values;
        for (GSList *l = option->values; l; l = l->next) {
-               GVariant *const var = (GVariant*)l->data;
-               assert(var);
+               Glib::VariantBase var = Glib::VariantBase((GVariant*)l->data, true);
                values.push_back(make_pair(var, print_gvariant(var)));
        }
 
        return shared_ptr<Property>(new Enum(name, values, getter, setter));
 }
 
-GVariant* DecoderOptions::getter(const char *id)
+Glib::VariantBase DecoderOptions::getter(const char *id)
 {
        GVariant *val = NULL;
 
-       assert(_decoder);
+       assert(decoder_);
 
        // Get the value from the hash table if it is already present
-       const map<string, GVariant*>& options = _decoder->options();
+       const map<string, GVariant*>& options = decoder_->options();
        const auto iter = options.find(id);
 
        if (iter != options.end())
                val = (*iter).second;
        else
        {
-               assert(_decoder->decoder());
+               assert(decoder_->decoder());
 
                // Get the default value if not
-               for (GSList *l = _decoder->decoder()->options; l; l = l->next)
+               for (GSList *l = decoder_->decoder()->options; l; l = l->next)
                {
                        const srd_decoder_option *const opt =
                                (srd_decoder_option*)l->data;
@@ -129,18 +128,18 @@ GVariant* DecoderOptions::getter(const char *id)
        }
 
        if (val)
-               g_variant_ref(val);
-
-       return val;
+               return Glib::VariantBase(val, true);
+       else
+               return Glib::VariantBase();
 }
 
-void DecoderOptions::setter(const char *id, GVariant *value)
+void DecoderOptions::setter(const char *id, Glib::VariantBase value)
 {
-       assert(_decoder);
-       _decoder->set_option(id, value);
+       assert(decoder_);
+       decoder_->set_option(id, value.gobj());
 
-       assert(_decoder_stack);
-       _decoder_stack->begin_decode();
+       assert(decoder_stack_);
+       decoder_stack_->begin_decode();
 }
 
 } // binding