#ifndef PULSEVIEW_PV_PROP_BINDING_DEVICEOPTIONS_H
#define PULSEVIEW_PV_PROP_BINDING_DEVICEOPTIONS_H
-#include <boost/function.hpp>
#include <boost/optional.hpp>
+#include <QObject>
#include <QString>
-#include <libsigrok/libsigrok.h>
-
#include "binding.h"
+#include <pv/prop/property.h>
+
+namespace sigrok {
+ class Configurable;
+}
+
namespace pv {
+
namespace prop {
namespace binding {
-class DeviceOptions : public Binding
+class DeviceOptions : public QObject, public Binding
{
-public:
- DeviceOptions(const sr_dev_inst *sdi,
- const sr_probe_group *group = NULL);
+ Q_OBJECT
-private:
-
- static GVariant* config_getter(
- const sr_dev_inst *sdi, const sr_probe_group *group, int key);
- static void config_setter(
- const sr_dev_inst *sdi, const sr_probe_group *group, int key,
- GVariant* value);
+public:
+ DeviceOptions(std::shared_ptr<sigrok::Configurable> configurable);
- void bind_bool(const QString &name, int key);
- void bind_enum(const QString &name, int key,
- GVariant *const gvar_list,
- boost::function<QString (GVariant*)> printer = print_gvariant);
- void bind_int(const QString &name, int key, QString suffix,
- boost::optional< std::pair<int64_t, int64_t> > range);
+Q_SIGNALS:
+ void config_changed();
- static QString print_gvariant(GVariant *const gvar);
+private:
+ void bind_bool(const QString &name,
+ Property::Getter getter, Property::Setter setter);
+ void bind_enum(const QString &name, Glib::VariantContainerBase gvar_list,
+ Property::Getter getter, Property::Setter setter,
+ std::function<QString (Glib::VariantBase)> printer = print_gvariant);
+ void bind_int(const QString &name, QString suffix,
+ boost::optional< std::pair<int64_t, int64_t> > range,
+ Property::Getter getter, Property::Setter setter);
- static QString print_timebase(GVariant *const gvar);
- static QString print_vdiv(GVariant *const gvar);
- static QString print_voltage_threshold(GVariant *const gvar);
+ static QString print_timebase(Glib::VariantBase gvar);
+ static QString print_vdiv(Glib::VariantBase gvar);
+ static QString print_voltage_threshold(Glib::VariantBase gvar);
protected:
- const sr_dev_inst *const _sdi;
- const sr_probe_group *const _group;
+ std::shared_ptr<sigrok::Configurable> _configurable;
};
} // binding