X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fbinding%2Fdecoderoptions.cpp;h=d9904852ca645e21f6b4b4d447a200860e301d94;hp=8738300ee9550007486c2b81f2fee1749f0293c5;hb=182d2f5dbe8b631b24949e5b111762009d1eeefa;hpb=5b1994c45194a95069dfcadf637723f3db8249da diff --git a/pv/prop/binding/decoderoptions.cpp b/pv/prop/binding/decoderoptions.cpp index 8738300..d990485 100644 --- a/pv/prop/binding/decoderoptions.cpp +++ b/pv/prop/binding/decoderoptions.cpp @@ -28,14 +28,18 @@ #include #include +#include #include #include using boost::bind; using boost::none; using boost::shared_ptr; +using std::make_pair; using std::map; +using std::pair; using std::string; +using std::vector; namespace pv { namespace prop { @@ -66,7 +70,9 @@ DecoderOptions::DecoderOptions( shared_ptr prop; - if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("x"))) + if (opt->values) + prop = bind_enum(name, opt, getter, setter); + else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("x"))) prop = shared_ptr( new Int(name, "", none, getter, setter)); else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("s"))) @@ -79,6 +85,20 @@ DecoderOptions::DecoderOptions( } } +shared_ptr DecoderOptions::bind_enum( + const QString &name, const srd_decoder_option *option, + Property::Getter getter, Property::Setter setter) +{ + vector< pair > values; + for (GSList *l = option->values; l; l = l->next) { + GVariant *const var = (GVariant*)l->data; + assert(var); + values.push_back(make_pair(var, print_gvariant(var))); + } + + return shared_ptr(new Enum(name, values, getter, setter)); +} + GVariant* DecoderOptions::getter(const char *id) { GVariant *val = NULL;