]> sigrok.org Git - pulseview.git/blobdiff - pv/globalsettings.cpp
DecodeSignal: Re-set decoder metadata after stack termination
[pulseview.git] / pv / globalsettings.cpp
index d437c16681983711b842678b8323e49ec9a034ed..c77327c3d1b6b18bd1c1255139b0a6b19323a7d9 100644 (file)
 #include "globalsettings.hpp"
 
 #include <QApplication>
-#include <QByteArray>
+#include <QDebug>
 #include <QFontMetrics>
 #include <QString>
 
-using std::function;
 using std::map;
-using std::multimap;
+using std::vector;
 
 namespace pv {
 
 const QString GlobalSettings::Key_View_ZoomToFitDuringAcq = "View_ZoomToFitDuringAcq";
 const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq";
-const QString GlobalSettings::Key_View_ColouredBG = "View_ColouredBG";
+const QString GlobalSettings::Key_View_TriggerIsZeroTime = "View_TriggerIsZeroTime";
+const QString GlobalSettings::Key_View_ColoredBG = "View_ColoredBG";
 const QString GlobalSettings::Key_View_StickyScrolling = "View_StickyScrolling";
 const QString GlobalSettings::Key_View_ShowSamplingPoints = "View_ShowSamplingPoints";
 const QString GlobalSettings::Key_View_ShowAnalogMinorGrid = "View_ShowAnalogMinorGrid";
+const QString GlobalSettings::Key_View_ConversionThresholdDispMode = "View_ConversionThresholdDispMode";
 const QString GlobalSettings::Key_View_DefaultDivHeight = "View_DefaultDivHeight";
+const QString GlobalSettings::Key_View_DefaultLogicHeight = "View_DefaultLogicHeight";
 const QString GlobalSettings::Key_Dec_InitialStateConfigurable = "Dec_InitialStateConfigurable";
+const QString GlobalSettings::Key_Log_BufferSize = "Log_BufferSize";
+const QString GlobalSettings::Key_Log_NotifyOfStacktrace = "Log_NotifyOfStacktrace";
 
-multimap< QString, function<void(QVariant)> > GlobalSettings::callbacks_;
+vector<GlobalSettingsInterface*> GlobalSettings::callbacks_;
 bool GlobalSettings::tracking_ = false;
 map<QString, QVariant> GlobalSettings::tracked_changes_;
 
@@ -55,9 +59,9 @@ void GlobalSettings::set_defaults_where_needed()
        if (!contains(Key_View_ZoomToFitAfterAcq))
                setValue(Key_View_ZoomToFitAfterAcq, true);
 
-       // Enable coloured trace backgrounds by default
-       if (!contains(Key_View_ColouredBG))
-               setValue(Key_View_ColouredBG, true);
+       // Enable colored trace backgrounds by default
+       if (!contains(Key_View_ColoredBG))
+               setValue(Key_View_ColoredBG, true);
 
        // Enable showing sampling points by default
        if (!contains(Key_View_ShowSamplingPoints))
@@ -66,12 +70,32 @@ void GlobalSettings::set_defaults_where_needed()
        if (!contains(Key_View_DefaultDivHeight))
                setValue(Key_View_DefaultDivHeight,
                3 * QFontMetrics(QApplication::font()).height());
+
+       if (!contains(Key_View_DefaultLogicHeight))
+               setValue(Key_View_DefaultLogicHeight,
+               2 * QFontMetrics(QApplication::font()).height());
+
+       // Default to 500 lines of backlog
+       if (!contains(Key_Log_BufferSize))
+               setValue(Key_Log_BufferSize, 500);
+
+       // Notify user of existing stack trace by default
+       if (!contains(Key_Log_NotifyOfStacktrace))
+               setValue(Key_Log_NotifyOfStacktrace, true);
+}
+
+void GlobalSettings::add_change_handler(GlobalSettingsInterface *cb)
+{
+       callbacks_.push_back(cb);
 }
 
-void GlobalSettings::register_change_handler(const QString key,
-       function<void(QVariant)> cb)
+void GlobalSettings::remove_change_handler(GlobalSettingsInterface *cb)
 {
-       callbacks_.emplace(key, cb);
+       for (auto cb_it = callbacks_.begin(); cb_it != callbacks_.end(); cb_it++)
+               if (*cb_it == cb) {
+                       callbacks_.erase(cb_it);
+                       break;
+               }
 }
 
 void GlobalSettings::setValue(const QString &key, const QVariant &value)
@@ -83,11 +107,12 @@ void GlobalSettings::setValue(const QString &key, const QVariant &value)
 
        QSettings::setValue(key, value);
 
-       // Call all registered callbacks for this key
-       auto range = callbacks_.equal_range(key);
+       // TODO Emulate noquote()
+       qDebug() << "Setting" << key << "changed to" << value;
 
-       for (auto it = range.first; it != range.second; it++)
-               it->second(value);
+       // Call all registered callbacks
+       for (GlobalSettingsInterface *cb : callbacks_)
+               cb->on_setting_changed(key, value);
 }
 
 void GlobalSettings::start_tracking()