diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-10-13 18:53:28 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-10-13 18:53:28 +0200 |
commit | 9da6dff1800d6b6598e6ad04465ee8b9cabb4167 (patch) | |
tree | 2f1692597748ce37d2ce147e8ed9f0c7d71d00e9 /options | |
parent | 535e81402a65fa410e98899cd1780784d2f9815a (diff) |
tracker/pt, options: fix threshold slider
It's only the tie_setting(slider_value, QSlider) that
has race-free slider updates. Needed to update the
threshold slider representation.
Remove the tie_setting(int, QSlider) overload since it
doesn't have the logic.
Add a migration.
Add base_value::notify() for use-cases like the
checkbox updating the label.
Diffstat (limited to 'options')
-rw-r--r-- | options/base-value.cpp | 5 | ||||
-rw-r--r-- | options/base-value.hpp | 2 | ||||
-rw-r--r-- | options/slider.hpp | 4 | ||||
-rw-r--r-- | options/tie.cpp | 8 | ||||
-rw-r--r-- | options/tie.hpp | 14 |
5 files changed, 24 insertions, 9 deletions
diff --git a/options/base-value.cpp b/options/base-value.cpp index 29f4b496..a07886bb 100644 --- a/options/base-value.cpp +++ b/options/base-value.cpp @@ -16,6 +16,11 @@ base_value::~base_value() b->on_value_destructed(self_name, this); } +void base_value::notify() const +{ + bundle_value_changed(); +} + void base_value::store(const QVariant& datum) { b->store_kv(self_name, datum); diff --git a/options/base-value.hpp b/options/base-value.hpp index 5106908d..dfb22670 100644 --- a/options/base-value.hpp +++ b/options/base-value.hpp @@ -41,6 +41,8 @@ public: return static_cast<signal_sig<t>>(&base_value::valueChanged); } + void notify() const; + signals: OPENTRACK_DEFINE_SIGNAL(double); OPENTRACK_DEFINE_SIGNAL(float); diff --git a/options/slider.hpp b/options/slider.hpp index bda1d398..da6bf214 100644 --- a/options/slider.hpp +++ b/options/slider.hpp @@ -8,6 +8,9 @@ #pragma once #include "export.hpp" + +#include "compat/util.hpp" + #include <QMetaType> #include <QDataStream> #include <QDebug> @@ -31,6 +34,7 @@ namespace options slider_value& operator=(const slider_value& v); bool operator==(const slider_value& v) const; operator double() const { return cur_; } + explicit operator int() const { return iround(cur_); } double cur() const { return cur_; } double min() const { return min_; } double max() const { return max_; } diff --git a/options/tie.cpp b/options/tie.cpp index 162a0f56..c0552d71 100644 --- a/options/tie.cpp +++ b/options/tie.cpp @@ -87,14 +87,6 @@ OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QSpinBox* sb) base_value::connect(&v, SIGNAL(valueChanged(int)), sb, SLOT(setValue(int)), v.SAFE_CONNTYPE); } -OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QSlider* sl) -{ - sl->setValue(v); - v = sl->value(); - base_value::connect(sl, &QSlider::valueChanged, &v, base_value::signal_fun<int>(), v.DIRECT_CONNTYPE); - base_value::connect(&v, base_value::signal_fun<int>(), sl, &QSlider::setValue, v.SAFE_CONNTYPE); -} - OTR_OPTIONS_EXPORT void tie_setting(value<QString>& v, QLineEdit* le) { le->setText(v); diff --git a/options/tie.hpp b/options/tie.hpp index 0a4ace74..b6bf32e9 100644 --- a/options/tie.hpp +++ b/options/tie.hpp @@ -63,13 +63,25 @@ void tie_setting(value<t>& v, QLabel* lb, F&& fun) v.SAFE_CONNTYPE); } +template<typename t, typename F> +void tie_setting(value<t>& v, QObject* obj, F&& fun) +{ + if (obj == nullptr) + abort(); + + fun(v()); + + base_value::connect(&v, base_value::signal_fun<t>(), + obj, fun, + v.DIRECT_CONNTYPE); +} + OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QComboBox* cb); OTR_OPTIONS_EXPORT void tie_setting(value<QString>& v, QComboBox* cb); OTR_OPTIONS_EXPORT void tie_setting(value<QVariant>& v, QComboBox* cb); OTR_OPTIONS_EXPORT void tie_setting(value<bool>& v, QCheckBox* cb); OTR_OPTIONS_EXPORT void tie_setting(value<double>& v, QDoubleSpinBox* dsb); OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QSpinBox* sb); -OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QSlider* sl); OTR_OPTIONS_EXPORT void tie_setting(value<QString>& v, QLineEdit* le); OTR_OPTIONS_EXPORT void tie_setting(value<QString>& v, QLabel* lb); OTR_OPTIONS_EXPORT void tie_setting(value<int>& v, QTabWidget* t); |