diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 065c8d5b..929fa9d7 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -198,6 +198,8 @@ AdvSceneSwitcher.macroTab.highlightTrueConditions="Highlight conditions of curre AdvSceneSwitcher.macroTab.highlightPerformedActions="Highlight recently performed actions of currently selected macro" AdvSceneSwitcher.macroTab.newMacroRegisterHotkey="Register hotkeys to control the pause state of new macros" AdvSceneSwitcher.macroTab.newMacroUseShortCircuitEvaluation="Enable short circuit evaluation of macro conditions for new macros" +AdvSceneSwitcher.macroTab.saveSettingsOnMacroChange="Save settings when selecting a new macro" +AdvSceneSwitcher.macroTab.saveSettingsOnMacroChange.tooltip="Saving the settings can be an expensive operation if you are working with a very large scene collection.\nIn this case, it might make sense to disable this option." AdvSceneSwitcher.macroTab.currentRegisterHotkeys="Register hotkeys to control the pause state of selected macro" AdvSceneSwitcher.macroTab.currentUseShortCircuitEvaluation="Enable short circuit evaluation of macro conditions for currently selected macro" AdvSceneSwitcher.macroTab.shortCircuit.tooltip="Enabling short circuit evaluation might improve the performance, as some condition checks are skipped, if the overall macro cannot be evaluated to \"true\" anymore.\nHowever, please note that condition checks, which are skipped over, will also not update their duration modifier checks." diff --git a/lib/macro/macro-settings.cpp b/lib/macro/macro-settings.cpp index 05899766..6663013d 100644 --- a/lib/macro/macro-settings.cpp +++ b/lib/macro/macro-settings.cpp @@ -23,6 +23,8 @@ void GlobalMacroSettings::Save(obs_data_t *obj) const _newMacroRegisterHotkeys); obs_data_set_bool(data, "newMacroUseShortCircuitEvaluation", _newMacroUseShortCircuitEvaluation); + obs_data_set_bool(data, "saveSettingsOnMacroChange", + _saveSettingsOnMacroChange); obs_data_set_obj(obj, "macroSettings", data); obs_data_release(data); } @@ -43,6 +45,10 @@ void GlobalMacroSettings::Load(obs_data_t *obj) obs_data_get_bool(data, "newMacroRegisterHotkey"); _newMacroUseShortCircuitEvaluation = obs_data_get_bool(data, "newMacroUseShortCircuitEvaluation"); + _saveSettingsOnMacroChange = + obs_data_has_user_value(data, "saveSettingsOnMacroChange") + ? obs_data_get_bool(data, "saveSettingsOnMacroChange") + : true; obs_data_release(data); } @@ -60,6 +66,8 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, "AdvSceneSwitcher.macroTab.newMacroRegisterHotkey"))), _newMacroUseShortCircuitEvaluation(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.newMacroUseShortCircuitEvaluation"))), + _saveSettingsOnMacroChange(new QCheckBox(obs_module_text( + "AdvSceneSwitcher.macroTab.saveSettingsOnMacroChange"))), _currentMacroRegisterHotkeys(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.currentRegisterHotkeys"))), _currentUseShortCircuitEvaluation(new QCheckBox(obs_module_text( @@ -100,6 +108,8 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, _newMacroUseShortCircuitEvaluation->setToolTip(obs_module_text( "AdvSceneSwitcher.macroTab.shortCircuit.tooltip")); + _saveSettingsOnMacroChange->setToolTip(obs_module_text( + "AdvSceneSwitcher.macroTab.saveSettingsOnMacroChange.tooltip")); _currentUseShortCircuitEvaluation->setToolTip(obs_module_text( "AdvSceneSwitcher.macroTab.shortCircuit.tooltip")); @@ -121,6 +131,7 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, auto generalOptions = new QGroupBox( obs_module_text("AdvSceneSwitcher.macroTab.generalSettings")); auto generalLayout = new QVBoxLayout; + generalLayout->addWidget(_saveSettingsOnMacroChange); generalLayout->addWidget(_currentSkipOnStartup); generalLayout->addWidget(_currentStopActionsIfNotDone); generalLayout->addWidget(_currentUseShortCircuitEvaluation); @@ -244,10 +255,18 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, _newMacroRegisterHotkeys->setChecked(settings._newMacroRegisterHotkeys); _newMacroUseShortCircuitEvaluation->setChecked( settings._newMacroUseShortCircuitEvaluation); + _saveSettingsOnMacroChange->setChecked( + settings._saveSettingsOnMacroChange); if (!macro || macro->IsGroup()) { hotkeyOptions->hide(); - generalOptions->hide(); + + // General group + _currentSkipOnStartup->hide(); + _currentStopActionsIfNotDone->hide(); + _currentUseShortCircuitEvaluation->hide(); + SetLayoutVisible(customConditionIntervalLayout, false); + inputOptions->hide(); _dockOptions->hide(); return; @@ -391,6 +410,8 @@ bool MacroSettingsDialog::AskForSettings(QWidget *parent, dialog._newMacroRegisterHotkeys->isChecked(); userInput._newMacroUseShortCircuitEvaluation = dialog._newMacroUseShortCircuitEvaluation->isChecked(); + userInput._saveSettingsOnMacroChange = + dialog._saveSettingsOnMacroChange->isChecked(); if (!macro) { return true; } diff --git a/lib/macro/macro-settings.hpp b/lib/macro/macro-settings.hpp index c944d2ce..dd51a7ee 100644 --- a/lib/macro/macro-settings.hpp +++ b/lib/macro/macro-settings.hpp @@ -25,6 +25,7 @@ public: bool _highlightActions = false; bool _newMacroRegisterHotkeys = true; bool _newMacroUseShortCircuitEvaluation = false; + bool _saveSettingsOnMacroChange = true; }; // Dialog for configuring global and individual macro specific settings @@ -53,6 +54,7 @@ private: QCheckBox *_highlightActions; QCheckBox *_newMacroRegisterHotkeys; QCheckBox *_newMacroUseShortCircuitEvaluation; + QCheckBox *_saveSettingsOnMacroChange; // Current macro specific settings QCheckBox *_currentMacroRegisterHotkeys; QCheckBox *_currentUseShortCircuitEvaluation; diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 73fc501e..a32a77ae 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -742,7 +742,10 @@ void AdvSceneSwitcher::MacroSelectionChanged() return; } SetEditMacro(*macro); - obs_frontend_save(); + + if (GetGlobalMacroSettings()._saveSettingsOnMacroChange) { + obs_frontend_save(); + } } void AdvSceneSwitcher::HighlightOnChange()