X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fbinding%2Fdecoderoptions.cpp;fp=pv%2Fbinding%2Fdecoderoptions.cpp;h=0000000000000000000000000000000000000000;hb=3cc9ad7b867853315473df611612c562d562ed8a;hp=fd7d918c6eed442fc242943b9b6fbc6e41a3dd6e;hpb=61703a0124c7ace84caf415f7d491a3ad6f42599;p=pulseview.git diff --git a/pv/binding/decoderoptions.cpp b/pv/binding/decoderoptions.cpp deleted file mode 100644 index fd7d918..0000000 --- a/pv/binding/decoderoptions.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the PulseView project. - * - * Copyright (C) 2013 Joel Holdsworth - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#include "decoderoptions.hpp" - -#include - -#include -#include -#include -#include -#include -#include - -using boost::none; -using std::make_pair; -using std::map; -using std::pair; -using std::shared_ptr; -using std::string; -using std::vector; - -using pv::prop::Double; -using pv::prop::Enum; -using pv::prop::Int; -using pv::prop::Property; -using pv::prop::String; - -namespace pv { -namespace binding { - -DecoderOptions::DecoderOptions( - shared_ptr decoder_stack, - shared_ptr decoder) : - decoder_stack_(decoder_stack), - decoder_(decoder) -{ - assert(decoder_); - - const srd_decoder *const dec = decoder_->decoder(); - assert(dec); - - for (GSList *l = dec->options; l; l = l->next) - { - const srd_decoder_option *const opt = - (srd_decoder_option*)l->data; - - const QString name = QString::fromUtf8(opt->desc); - - const Property::Getter get = [&, opt]() { - return getter(opt->id); }; - const Property::Setter set = [&, opt](Glib::VariantBase value) { - setter(opt->id, value); }; - - shared_ptr prop; - - if (opt->values) - prop = bind_enum(name, opt, get, set); - else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("d"))) - prop = shared_ptr(new Double(name, 2, "", - none, none, get, set)); - else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("x"))) - prop = shared_ptr( - new Int(name, "", none, get, set)); - else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("s"))) - prop = shared_ptr( - new String(name, get, set)); - else - continue; - - properties_.push_back(prop); - } -} - -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) { - Glib::VariantBase var = Glib::VariantBase((GVariant*)l->data, true); - values.push_back(make_pair(var, print_gvariant(var))); - } - - return shared_ptr(new Enum(name, values, getter, setter)); -} - -Glib::VariantBase DecoderOptions::getter(const char *id) -{ - GVariant *val = NULL; - - assert(decoder_); - - // Get the value from the hash table if it is already present - const map& options = decoder_->options(); - const auto iter = options.find(id); - - if (iter != options.end()) - val = (*iter).second; - else - { - assert(decoder_->decoder()); - - // Get the default value if not - for (GSList *l = decoder_->decoder()->options; l; l = l->next) - { - const srd_decoder_option *const opt = - (srd_decoder_option*)l->data; - if (strcmp(opt->id, id) == 0) { - val = opt->def; - break; - } - } - } - - if (val) - return Glib::VariantBase(val, true); - else - return Glib::VariantBase(); -} - -void DecoderOptions::setter(const char *id, Glib::VariantBase value) -{ - assert(decoder_); - decoder_->set_option(id, value.gobj()); - - assert(decoder_stack_); - decoder_stack_->begin_decode(); -} - -} // binding -} // pv