X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fdouble.cpp;h=93b45d327362f93b12595a4249e154bcdac0bb14;hp=fdd9a44c06828ff64cf44d67a1b29e4b18268b99;hb=a28c30252fd32d3185c62062dfad74ae659ae383;hpb=b912c99cb1802b93baec288d4f44819437ee08fa diff --git a/pv/prop/double.cpp b/pv/prop/double.cpp index fdd9a44c..93b45d32 100644 --- a/pv/prop/double.cpp +++ b/pv/prop/double.cpp @@ -24,8 +24,8 @@ #include "double.h" -using namespace std; -using namespace boost; +using boost::optional; +using std::pair; namespace pv { namespace prop { @@ -35,32 +35,45 @@ Double::Double(QString name, QString suffix, optional< pair > range, optional step, - function getter, - function setter) : - Property(name), + Getter getter, + Setter setter) : + Property(name, getter, setter), _decimals(decimals), _suffix(suffix), _range(range), _step(step), - _getter(getter), - _setter(setter), _spin_box(NULL) { } -QWidget* Double::get_widget(QWidget *parent) +Double::~Double() { - if(_spin_box) +} + +QWidget* Double::get_widget(QWidget *parent, bool auto_commit) +{ + if (_spin_box) return _spin_box; + GVariant *const value = _getter ? _getter() : NULL; + if (!value) + return NULL; + _spin_box = new QDoubleSpinBox(parent); _spin_box->setDecimals(_decimals); _spin_box->setSuffix(_suffix); - if(_range) + if (_range) _spin_box->setRange(_range->first, _range->second); - if(_step) + if (_step) _spin_box->setSingleStep(*_step); + _spin_box->setValue(g_variant_get_double(value)); + g_variant_unref(value); + + if (auto_commit) + connect(_spin_box, SIGNAL(valueChanged(double)), + this, SLOT(on_value_changed(double))); + return _spin_box; } @@ -68,10 +81,15 @@ void Double::commit() { assert(_setter); - if(!_spin_box) + if (!_spin_box) return; - _setter(_spin_box->value()); + _setter(g_variant_new_double(_spin_box->value())); +} + +void Double::on_value_changed(double) +{ + commit(); } } // prop