diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index c9c09185..8f3a7cd0 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -925,6 +925,7 @@ AdvSceneSwitcher.action.media.seek.percentage.label="Percentage of total duratio AdvSceneSwitcher.action.macro="Macro" AdvSceneSwitcher.action.macro.type.pause="Pause" AdvSceneSwitcher.action.macro.type.unpause="Unpause" +AdvSceneSwitcher.action.macro.type.togglePause="Toggle pause" AdvSceneSwitcher.action.macro.type.resetCounter="Reset counter" AdvSceneSwitcher.action.macro.type.run="Run macro" AdvSceneSwitcher.action.macro.type.run.conditions.ignore="Do not consider condition state" diff --git a/lib/macro/macro-action-macro.cpp b/lib/macro/macro-action-macro.cpp index 21d8c717..6ba52584 100644 --- a/lib/macro/macro-action-macro.cpp +++ b/lib/macro/macro-action-macro.cpp @@ -12,25 +12,6 @@ bool MacroActionMacro::_registered = MacroActionFactory::Register( {MacroActionMacro::Create, MacroActionMacroEdit::Create, "AdvSceneSwitcher.action.macro"}); -const static std::map actionTypes = { - {MacroActionMacro::Action::PAUSE, - "AdvSceneSwitcher.action.macro.type.pause"}, - {MacroActionMacro::Action::UNPAUSE, - "AdvSceneSwitcher.action.macro.type.unpause"}, - {MacroActionMacro::Action::RESET_COUNTER, - "AdvSceneSwitcher.action.macro.type.resetCounter"}, - {MacroActionMacro::Action::RUN, - "AdvSceneSwitcher.action.macro.type.run"}, - {MacroActionMacro::Action::STOP, - "AdvSceneSwitcher.action.macro.type.stop"}, - {MacroActionMacro::Action::DISABLE_ACTION, - "AdvSceneSwitcher.action.macro.type.disableAction"}, - {MacroActionMacro::Action::ENABLE_ACTION, - "AdvSceneSwitcher.action.macro.type.enableAction"}, - {MacroActionMacro::Action::TOGGLE_ACTION, - "AdvSceneSwitcher.action.macro.type.toggleAction"}, -}; - bool MacroActionMacro::PerformAction() { auto macro = _macro.GetMacro(); @@ -45,6 +26,9 @@ bool MacroActionMacro::PerformAction() case Action::UNPAUSE: macro->SetPaused(false); break; + case Action::TOGGLE_PAUSE: + macro->SetPaused(!macro->Paused()); + break; case Action::RESET_COUNTER: macro->ResetRunCount(); break; @@ -210,8 +194,31 @@ void MacroActionMacro::RunActions(Macro *actionMacro) const static void populateActionSelection(QComboBox *list) { - for (const auto &[_, name] : actionTypes) { - list->addItem(obs_module_text(name.c_str())); + static const std::vector> + actions = { + {MacroActionMacro::Action::PAUSE, + "AdvSceneSwitcher.action.macro.type.pause"}, + {MacroActionMacro::Action::UNPAUSE, + "AdvSceneSwitcher.action.macro.type.unpause"}, + {MacroActionMacro::Action::TOGGLE_PAUSE, + "AdvSceneSwitcher.action.macro.type.togglePause"}, + {MacroActionMacro::Action::RESET_COUNTER, + "AdvSceneSwitcher.action.macro.type.resetCounter"}, + {MacroActionMacro::Action::RUN, + "AdvSceneSwitcher.action.macro.type.run"}, + {MacroActionMacro::Action::STOP, + "AdvSceneSwitcher.action.macro.type.stop"}, + {MacroActionMacro::Action::DISABLE_ACTION, + "AdvSceneSwitcher.action.macro.type.disableAction"}, + {MacroActionMacro::Action::ENABLE_ACTION, + "AdvSceneSwitcher.action.macro.type.enableAction"}, + {MacroActionMacro::Action::TOGGLE_ACTION, + "AdvSceneSwitcher.action.macro.type.toggleAction"}, + }; + + for (const auto &[value, name] : actions) { + list->addItem(obs_module_text(name.c_str()), + static_cast(value)); } } @@ -321,7 +328,8 @@ void MacroActionMacroEdit::UpdateEntryData() if (!_entryData) { return; } - _actions->setCurrentIndex(static_cast(_entryData->_action)); + _actions->setCurrentIndex( + _actions->findData(static_cast(_entryData->_action))); _actionIndex->SetValue(_entryData->_actionIndex); _actionIndex->SetMacro(_entryData->_macro.GetMacro()); _macros->SetCurrentMacro(_entryData->_macro); @@ -350,10 +358,11 @@ void MacroActionMacroEdit::MacroChanged(const QString &text) SetWidgetVisibility(); } -void MacroActionMacroEdit::ActionChanged(int value) +void MacroActionMacroEdit::ActionChanged(int idx) { GUARD_LOADING_AND_LOCK(); - _entryData->_action = static_cast(value); + _entryData->_action = static_cast( + _actions->itemData(idx).toInt()); SetWidgetVisibility(); } diff --git a/lib/macro/macro-action-macro.hpp b/lib/macro/macro-action-macro.hpp index ce62bef4..2c7a6127 100644 --- a/lib/macro/macro-action-macro.hpp +++ b/lib/macro/macro-action-macro.hpp @@ -49,6 +49,7 @@ public: DISABLE_ACTION, ENABLE_ACTION, TOGGLE_ACTION, + TOGGLE_PAUSE, }; Action _action = Action::RUN; IntVariable _actionIndex = 1;