]> sigrok.org Git - pulseview.git/blobdiff - pv/prop/binding/decoderoptions.cpp
Add bindings for new device options
[pulseview.git] / pv / prop / binding / decoderoptions.cpp
index 5ad7e3562e6150e057c9299964069af1e931feba..e29436768ab499d8364790cd9605335b00f810ad 100644 (file)
 
 #include "decoderoptions.h"
 
+#include <boost/bind.hpp>
 #include <boost/foreach.hpp>
 #include <boost/none_t.hpp>
 
-#include <pv/data/decoder.h>
+#include <pv/data/decoderstack.h>
+#include <pv/data/decode/decoder.h>
 #include <pv/prop/int.h>
 #include <pv/prop/string.h>
 
-using namespace boost;
-using namespace std;
+using boost::bind;
+using boost::none;
+using boost::shared_ptr;
+using std::map;
+using std::string;
 
 namespace pv {
 namespace prop {
 namespace binding {
 
-DecoderOptions::DecoderOptions(shared_ptr<pv::data::Decoder> decoder) :
+DecoderOptions::DecoderOptions(
+       shared_ptr<pv::data::DecoderStack> decoder_stack,
+       shared_ptr<data::decode::Decoder> decoder) :
+       _decoder_stack(decoder_stack),
        _decoder(decoder)
 {
        assert(_decoder);
@@ -73,13 +81,17 @@ DecoderOptions::DecoderOptions(shared_ptr<pv::data::Decoder> decoder) :
 
 GVariant* DecoderOptions::getter(const char *id)
 {
+       GVariant *val = NULL;
+
        assert(_decoder);
 
        // Get the value from the hash table if it is already present
-       GVariant *val = (GVariant*)g_hash_table_lookup(
-               (GHashTable*)_decoder->options(), id);
+       const map<string, GVariant*>& options = _decoder->options();
+       map<string, GVariant*>::const_iterator iter = options.find(id);
 
-       if (!val)
+       if (iter != options.end())
+               val = (*iter).second;
+       else
        {
                assert(_decoder->decoder());
 
@@ -105,6 +117,9 @@ void DecoderOptions::setter(const char *id, GVariant *value)
 {
        assert(_decoder);
        _decoder->set_option(id, value);
+
+       assert(_decoder_stack);
+       _decoder_stack->begin_decode();
 }
 
 } // binding