X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fglobalsettings.cpp;h=d24822413038c5a63be439c1d1038b53fd49d1e4;hp=5da89ceba030bf66df5757d4ef0a318a5dc61735;hb=b14db788ee3483eed195c1e73a1ab85ea8c41e47;hpb=bf9f12687c8d43422455cbdc27ec1cc5d4305149 diff --git a/pv/globalsettings.cpp b/pv/globalsettings.cpp index 5da89ceb..d2482241 100644 --- a/pv/globalsettings.cpp +++ b/pv/globalsettings.cpp @@ -25,6 +25,8 @@ const QString GlobalSettings::Key_View_AlwaysZoomToFit = "View_AlwaysZoomToFit"; const QString GlobalSettings::Key_View_ColouredBG = "View_ColouredBG"; std::multimap< QString, std::function > GlobalSettings::callbacks_; +bool GlobalSettings::tracking_ = false; +std::map GlobalSettings::tracked_changes_; GlobalSettings::GlobalSettings() : QSettings() @@ -40,6 +42,11 @@ void GlobalSettings::register_change_handler(const QString key, 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 +56,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