diff options
-rw-r--r-- | options/base-value.cpp | 20 | ||||
-rw-r--r-- | options/base-value.hpp | 4 | ||||
-rw-r--r-- | options/value.hpp | 5 |
3 files changed, 29 insertions, 0 deletions
diff --git a/options/base-value.cpp b/options/base-value.cpp index d4ec4b6c..c7691a8f 100644 --- a/options/base-value.cpp +++ b/options/base-value.cpp @@ -1,7 +1,20 @@ #include "base-value.hpp" +#include <QThread> using namespace options; +//#define OTR_TRACE_NOTIFY + +const bool value_::TRACE_NOTIFY = +#ifdef OTR_TRACE_NOTIFY + true; +#else + [] { + auto b = qgetenv("OTR_TRACE_NOTIFY"); + return !b.isEmpty() && b != "0"; + }(); +#endif + value_::value_(bundle const& b, const QString& name) noexcept : b(b), self_name(name) { @@ -12,3 +25,10 @@ value_::~value_() { b->on_value_destructed(this); } + +void value_::maybe_trace(bool x) const +{ + if (TRACE_NOTIFY) + qDebug().noquote() << "notify" << (x ? '+' : '-') + << QThread::currentThreadId() << b->name() << self_name; +} diff --git a/options/base-value.hpp b/options/base-value.hpp index 722107a4..9b2ebe53 100644 --- a/options/base-value.hpp +++ b/options/base-value.hpp @@ -40,6 +40,8 @@ public: return static_cast<signal_sig<t>>(&value_::valueChanged); } + static const bool TRACE_NOTIFY; + signals: OTR_OPTIONS_SIGNAL(double); OTR_OPTIONS_SIGNAL(float); @@ -65,6 +67,8 @@ protected: virtual void store_variant(QVariant&&) noexcept = 0; virtual void store_variant(const QVariant&) noexcept = 0; + void maybe_trace(bool x) const; + template<typename t> void store_(const t& datum) { diff --git a/options/value.hpp b/options/value.hpp index 92e2878f..10903b19 100644 --- a/options/value.hpp +++ b/options/value.hpp @@ -92,10 +92,15 @@ public: return traits::qvariant_from_value(def); } + never_inline void notify() const override { if (!is_null()) + { + maybe_trace(true); emit valueChanged(traits::storage_from_value(get())); + maybe_trace(false); + } } auto& operator=(t&& datum) noexcept |