X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fprop%2Fdouble.cpp;h=54540bc68ded41c0575c3202726ac383665b5814;hp=c1e776e1f6c890c21d9d435cbc66316d8976e528;hb=e8d009288de28cb194bc7964f96677c2baf900c9;hpb=793f8096c486d0fba871227d9772a510f7496c08 diff --git a/pv/prop/double.cpp b/pv/prop/double.cpp index c1e776e..54540bc 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,24 +35,36 @@ 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() +{ +} + +QWidget* Double::get_widget(QWidget *parent, bool auto_commit) { if (_spin_box) return _spin_box; + if (!_getter) + return NULL; + + Glib::VariantBase variant = _getter(); + if (!variant.gobj()) + return NULL; + + double value = Glib::VariantBase::cast_dynamic>( + variant).get(); + _spin_box = new QDoubleSpinBox(parent); _spin_box->setDecimals(_decimals); _spin_box->setSuffix(_suffix); @@ -61,7 +73,11 @@ QWidget* Double::get_widget(QWidget *parent) if (_step) _spin_box->setSingleStep(*_step); - _spin_box->setValue(_getter ? _getter() : 0.0); + _spin_box->setValue(value); + + if (auto_commit) + connect(_spin_box, SIGNAL(valueChanged(double)), + this, SLOT(on_value_changed(double))); return _spin_box; } @@ -73,7 +89,12 @@ void Double::commit() if (!_spin_box) return; - _setter(_spin_box->value()); + _setter(Glib::Variant::create(_spin_box->value())); +} + +void Double::on_value_changed(double) +{ + commit(); } } // prop