summaryrefslogtreecommitdiffstats
path: root/src/ui/widget/spin-slider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/widget/spin-slider.cpp')
-rw-r--r--src/ui/widget/spin-slider.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp
index 3e85f845e..97ae18e20 100644
--- a/src/ui/widget/spin-slider.cpp
+++ b/src/ui/widget/spin-slider.cpp
@@ -10,6 +10,7 @@
#include <glib.h>
#include <glibmm/i18n.h>
+#include <glibmm/stringutils.h>
#include "spin-slider.h"
@@ -19,7 +20,12 @@ namespace Widget {
SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc,
double climb_rate, int digits, const SPAttributeEnum a, const char* tip_text)
- : AttrWidget(a, value), _adjustment(value, lower, upper, step_inc),
+ : AttrWidget(a, value),
+#if WITH_GTKMM_3_0
+ _adjustment(Gtk::Adjustment::create(value, lower, upper, step_inc)),
+#else
+ _adjustment(value, lower, upper, step_inc),
+#endif
_scale(_adjustment), _spin(_adjustment, climb_rate, digits)
{
signal_value_changed().connect(signal_attr_changed().make_slot());
@@ -38,7 +44,11 @@ SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc
Glib::ustring SpinSlider::get_as_attribute() const
{
+#if WITH_GTKMM_3_0
+ const double val = _adjustment->get_value();
+#else
const double val = _adjustment.get_value();
+#endif
if(_spin.get_digits() == 0)
return Glib::Ascii::dtostr((int)val);
@@ -49,32 +59,59 @@ Glib::ustring SpinSlider::get_as_attribute() const
void SpinSlider::set_from_attribute(SPObject* o)
{
const gchar* val = attribute_value(o);
+#if WITH_GTKMM_3_0
+ if(val)
+ _adjustment->set_value(Glib::Ascii::strtod(val));
+ else
+ _adjustment->set_value(get_default()->as_double());
+#else
if(val)
_adjustment.set_value(Glib::Ascii::strtod(val));
else
_adjustment.set_value(get_default()->as_double());
+#endif
}
Glib::SignalProxy0<void> SpinSlider::signal_value_changed()
{
+#if WITH_GTKMM_3_0
+ return _adjustment->signal_value_changed();
+#else
return _adjustment.signal_value_changed();
+#endif
}
double SpinSlider::get_value() const
{
+#if WITH_GTKMM_3_0
+ return _adjustment->get_value();
+#else
return _adjustment.get_value();
+#endif
}
void SpinSlider::set_value(const double val)
{
+#if WITH_GTKMM_3_0
+ _adjustment->set_value(val);
+#else
_adjustment.set_value(val);
+#endif
}
+#if WITH_GTKMM_3_0
+const Glib::RefPtr<Gtk::Adjustment> SpinSlider::get_adjustment() const
+#else
const Gtk::Adjustment& SpinSlider::get_adjustment() const
+#endif
{
return _adjustment;
}
+#if WITH_GTKMM_3_0
+Glib::RefPtr<Gtk::Adjustment> SpinSlider::get_adjustment()
+#else
Gtk::Adjustment& SpinSlider::get_adjustment()
+#endif
{
return _adjustment;
}
@@ -112,9 +149,15 @@ DualSpinSlider::DualSpinSlider(double value, double lower, double upper, double
{
signal_value_changed().connect(signal_attr_changed().make_slot());
+#if WITH_GTKMM_3_0
+ _s1.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot());
+ _s2.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot());
+ _s1.get_adjustment()->signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked));
+#else
_s1.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot());
_s2.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot());
_s1.get_adjustment().signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked));
+#endif
_link.signal_toggled().connect(sigc::mem_fun(*this, &DualSpinSlider::link_toggled));
Gtk::VBox* vb = Gtk::manage(new Gtk::VBox);
@@ -151,8 +194,13 @@ void DualSpinSlider::set_from_attribute(SPObject* o)
_link.set_active(toks[1] == 0);
+#if WITH_GTKMM_3_0
+ _s1.get_adjustment()->set_value(v1);
+ _s2.get_adjustment()->set_value(v2);
+#else
_s1.get_adjustment().set_value(v1);
_s2.get_adjustment().set_value(v2);
+#endif
g_strfreev(toks);
}