X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fglobalsettings.cpp;h=925c48e1dff67826a0d52a038fee091a2d00479d;hp=5da89ceba030bf66df5757d4ef0a318a5dc61735;hb=489953884c0d7692fa20748314751e114ae54cf2;hpb=bf9f12687c8d43422455cbdc27ec1cc5d4305149 diff --git a/pv/globalsettings.cpp b/pv/globalsettings.cpp index 5da89ceb..925c48e1 100644 --- a/pv/globalsettings.cpp +++ b/pv/globalsettings.cpp @@ -19,12 +19,21 @@ #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_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"; -std::multimap< QString, std::function > GlobalSettings::callbacks_; +multimap< QString, function > GlobalSettings::callbacks_; +bool GlobalSettings::tracking_ = false; +map GlobalSettings::tracked_changes_; GlobalSettings::GlobalSettings() : QSettings() @@ -33,13 +42,18 @@ GlobalSettings::GlobalSettings() : } 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 +63,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