X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fglobalsettings.cpp;h=c9a757c9ebb238b3b8a7d1ff4cc4d6487fb56fa6;hp=e0b7197b966c4c1f1f1841c0651f4d85823e9cd7;hb=ffc00fdd5946593ad2a587078fd4ee9ba0a507ec;hpb=051ba3b399abbd83fea8b7ef6f8876884ac0786c diff --git a/pv/globalsettings.cpp b/pv/globalsettings.cpp index e0b7197b..c9a757c9 100644 --- a/pv/globalsettings.cpp +++ b/pv/globalsettings.cpp @@ -19,16 +19,32 @@ #include "globalsettings.hpp" +#include +#include +#include +#include + +using std::function; +using std::map; +using std::multimap; + namespace pv { -const QString GlobalSettings::Key_View_AlwaysZoomToFit = "View_AlwaysZoomToFit"; +const QString GlobalSettings::Key_View_ZoomToFitDuringAcq = "View_ZoomToFitDuringAcq"; +const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq"; +const QString GlobalSettings::Key_View_TriggerIsZeroTime = "View_TriggerIsZeroTime"; const QString GlobalSettings::Key_View_ColouredBG = "View_ColouredBG"; 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"; -std::multimap< QString, std::function > GlobalSettings::callbacks_; +multimap< QString, function > GlobalSettings::callbacks_; bool GlobalSettings::tracking_ = false; -std::map GlobalSettings::tracked_changes_; +map GlobalSettings::tracked_changes_; GlobalSettings::GlobalSettings() : QSettings() @@ -36,8 +52,31 @@ GlobalSettings::GlobalSettings() : beginGroup("Settings"); } +void GlobalSettings::set_defaults_where_needed() +{ + // Enable zoom-to-fit after acquisition by default + 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 showing sampling points by default + if (!contains(Key_View_ShowSamplingPoints)) + setValue(Key_View_ShowSamplingPoints, true); + + 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()); +} + void GlobalSettings::register_change_handler(const QString key, - std::function cb) + function cb) { callbacks_.emplace(key, cb); } @@ -80,4 +119,37 @@ void GlobalSettings::undo_tracked_changes() tracked_changes_.clear(); } +void GlobalSettings::store_gvariant(QSettings &settings, GVariant *v) +{ + const GVariantType *var_type = g_variant_get_type(v); + char *var_type_str = g_variant_type_dup_string(var_type); + + QByteArray var_data = QByteArray((const char*)g_variant_get_data(v), + g_variant_get_size(v)); + + settings.setValue("value", var_data); + settings.setValue("type", var_type_str); + + g_free(var_type_str); +} + +GVariant* GlobalSettings::restore_gvariant(QSettings &settings) +{ + QString raw_type = settings.value("type").toString(); + GVariantType *var_type = g_variant_type_new(raw_type.toUtf8()); + + QByteArray data = settings.value("value").toByteArray(); + + gpointer var_data = g_memdup((gconstpointer)data.constData(), + (guint)data.size()); + + GVariant *value = g_variant_new_from_data(var_type, var_data, + data.size(), false, g_free, var_data); + + g_variant_type_free(var_type); + + return value; +} + + } // namespace pv