X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fglobalsettings.cpp;h=7fd1249cfd5d4fd525251ea03dca6b58186f76ff;hb=28ceff251c776bcf99eafae691e70a521af15957;hp=5da89ceba030bf66df5757d4ef0a318a5dc61735;hpb=bf9f12687c8d43422455cbdc27ec1cc5d4305149;p=pulseview.git diff --git a/pv/globalsettings.cpp b/pv/globalsettings.cpp index 5da89ceb..7fd1249c 100644 --- a/pv/globalsettings.cpp +++ b/pv/globalsettings.cpp @@ -19,12 +19,23 @@ #include "globalsettings.hpp" +using std::function; +using std::map; +using std::multimap; + namespace pv { const QString GlobalSettings::Key_View_AlwaysZoomToFit = "View_AlwaysZoomToFit"; +const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq"; 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_Dec_InitialStateConfigurable = "Dec_InitialStateConfigurable"; -std::multimap< QString, std::function > GlobalSettings::callbacks_; +multimap< QString, function > GlobalSettings::callbacks_; +bool GlobalSettings::tracking_ = false; +map GlobalSettings::tracked_changes_; GlobalSettings::GlobalSettings() : QSettings() @@ -32,14 +43,34 @@ 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); +} + void GlobalSettings::register_change_handler(const QString key, - std::function cb) + function cb) { callbacks_.emplace(key, cb); } void GlobalSettings::setValue(const QString &key, const QVariant &value) { + // Save previous value if we're tracking changes, + // not altering an already-existing saved setting + if (tracking_) + tracked_changes_.emplace(key, QSettings::value(key)); + QSettings::setValue(key, value); // Call all registered callbacks for this key @@ -49,5 +80,26 @@ void GlobalSettings::setValue(const QString &key, const QVariant &value) it->second(value); } +void GlobalSettings::start_tracking() +{ + tracking_ = true; + tracked_changes_.clear(); +} + +void GlobalSettings::stop_tracking() +{ + tracking_ = false; + tracked_changes_.clear(); +} + +void GlobalSettings::undo_tracked_changes() +{ + tracking_ = false; + + for (auto entry : tracked_changes_) + setValue(entry.first, entry.second); + + tracked_changes_.clear(); +} } // namespace pv