diff --git a/src/macro-core/macro-action-studio-mode.cpp b/src/macro-core/macro-action-studio-mode.cpp index d2c7c6c0..9c384171 100644 --- a/src/macro-core/macro-action-studio-mode.cpp +++ b/src/macro-core/macro-action-studio-mode.cpp @@ -10,14 +10,14 @@ bool MacroActionSudioMode::_registered = MacroActionFactory::Register( {MacroActionSudioMode::Create, MacroActionSudioModeEdit::Create, "AdvSceneSwitcher.action.studioMode"}); -const static std::map actionTypes = { - {StudioModeAction::SWAP_SCENE, +const static std::map actionTypes = { + {MacroActionSudioMode::Action::SWAP_SCENE, "AdvSceneSwitcher.action.studioMode.type.swap"}, - {StudioModeAction::SET_SCENE, + {MacroActionSudioMode::Action::SET_SCENE, "AdvSceneSwitcher.action.studioMode.type.setScene"}, - {StudioModeAction::ENABLE_STUDIO_MODE, + {MacroActionSudioMode::Action::ENABLE_STUDIO_MODE, "AdvSceneSwitcher.action.studioMode.type.enable"}, - {StudioModeAction::DISABLE_STUDIO_MODE, + {MacroActionSudioMode::Action::DISABLE_STUDIO_MODE, "AdvSceneSwitcher.action.studioMode.type.disable"}, }; @@ -41,19 +41,19 @@ static void enableStudioMode(bool enable) bool MacroActionSudioMode::PerformAction() { switch (_action) { - case StudioModeAction::SWAP_SCENE: + case Action::SWAP_SCENE: obs_frontend_preview_program_trigger_transition(); break; - case StudioModeAction::SET_SCENE: { + case Action::SET_SCENE: { auto s = obs_weak_source_get_source(_scene.GetScene()); obs_frontend_set_current_preview_scene(s); obs_source_release(s); break; } - case StudioModeAction::ENABLE_STUDIO_MODE: + case Action::ENABLE_STUDIO_MODE: enableStudioMode(true); break; - case StudioModeAction::DISABLE_STUDIO_MODE: + case Action::DISABLE_STUDIO_MODE: enableStudioMode(false); break; default: @@ -86,15 +86,14 @@ bool MacroActionSudioMode::Save(obs_data_t *obj) const bool MacroActionSudioMode::Load(obs_data_t *obj) { MacroAction::Load(obj); - _action = - static_cast(obs_data_get_int(obj, "action")); + _action = static_cast(obs_data_get_int(obj, "action")); _scene.Load(obj); return true; } std::string MacroActionSudioMode::GetShortDesc() const { - if (_action == StudioModeAction::SET_SCENE) { + if (_action == Action::SET_SCENE) { return _scene.ToString(); } return ""; @@ -102,8 +101,9 @@ std::string MacroActionSudioMode::GetShortDesc() const static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); + for (const auto &[id, name] : actionTypes) { + list->addItem(obs_module_text(name.c_str()), + static_cast(id)); } } @@ -139,9 +139,10 @@ void MacroActionSudioModeEdit::UpdateEntryData() if (!_entryData) { return; } - _actions->setCurrentIndex(static_cast(_entryData->_action)); + _actions->setCurrentIndex( + _actions->findData(static_cast(_entryData->_action))); _scenes->SetScene(_entryData->_scene); - _scenes->setVisible(_entryData->_action == StudioModeAction::SET_SCENE); + SetWidgetVisibility(); } void MacroActionSudioModeEdit::SceneChanged(const SceneSelection &s) @@ -156,15 +157,27 @@ void MacroActionSudioModeEdit::SceneChanged(const SceneSelection &s) QString::fromStdString(_entryData->GetShortDesc())); } -void MacroActionSudioModeEdit::ActionChanged(int value) +void MacroActionSudioModeEdit::SetWidgetVisibility() +{ + _scenes->setVisible(_entryData->_action == + MacroActionSudioMode::Action::SET_SCENE); + + if (_entryData->_action != MacroActionSudioMode::Action::SET_SCENE) { + _actions->removeItem(_actions->findData(static_cast( + MacroActionSudioMode::Action::SET_SCENE))); + } +} + +void MacroActionSudioModeEdit::ActionChanged(int index) { if (_loading || !_entryData) { return; } auto lock = LockContext(); - _entryData->_action = static_cast(value); - _scenes->setVisible(_entryData->_action == StudioModeAction::SET_SCENE); + _entryData->_action = static_cast( + _actions->itemData(index).toInt()); + SetWidgetVisibility(); emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); } diff --git a/src/macro-core/macro-action-studio-mode.hpp b/src/macro-core/macro-action-studio-mode.hpp index 13f7c215..a43489c1 100644 --- a/src/macro-core/macro-action-studio-mode.hpp +++ b/src/macro-core/macro-action-studio-mode.hpp @@ -4,13 +4,6 @@ namespace advss { -enum class StudioModeAction { - SWAP_SCENE, - SET_SCENE, - ENABLE_STUDIO_MODE, - DISABLE_STUDIO_MODE, -}; - class MacroActionSudioMode : public MacroAction { public: MacroActionSudioMode(Macro *m) : MacroAction(m) {} @@ -25,7 +18,14 @@ public: return std::make_shared(m); } - StudioModeAction _action = StudioModeAction::SWAP_SCENE; + enum class Action { + SWAP_SCENE, + SET_SCENE, // TODO: Remove in future version as the + // functionality moved to the scene switch action + ENABLE_STUDIO_MODE, + DISABLE_STUDIO_MODE, + }; + Action _action = Action::SWAP_SCENE; SceneSelection _scene; private: @@ -55,12 +55,13 @@ private slots: signals: void HeaderInfoChanged(const QString &); -protected: +private: + void SetWidgetVisibility(); + QComboBox *_actions; SceneSelectionWidget *_scenes; std::shared_ptr _entryData; -private: bool _loading = true; }; diff --git a/src/macro-core/macro-condition-studio-mode.cpp b/src/macro-core/macro-condition-studio-mode.cpp index 051c34e4..a7a450a8 100644 --- a/src/macro-core/macro-condition-studio-mode.cpp +++ b/src/macro-core/macro-condition-studio-mode.cpp @@ -155,6 +155,13 @@ void MacroConditionStudioModeEdit::SetWidgetVisibility() _scenes->setVisible(_entryData->_condition == StudioModeCondition::PREVIEW_SCENE); + + // TODO: Remove this workaround once the PREVIEW_SCENE condition type + // has been removed + if (_entryData->_condition != StudioModeCondition::PREVIEW_SCENE) { + _condition->removeItem( + static_cast(StudioModeCondition::PREVIEW_SCENE)); + } } } // namespace advss diff --git a/src/macro-core/macro-condition-studio-mode.hpp b/src/macro-core/macro-condition-studio-mode.hpp index 38c19fe4..40a31c96 100644 --- a/src/macro-core/macro-condition-studio-mode.hpp +++ b/src/macro-core/macro-condition-studio-mode.hpp @@ -10,7 +10,8 @@ namespace advss { enum class StudioModeCondition { STUDIO_MODE_ACTIVE, STUDIO_MODE_NOT_ACTIVE, - PREVIEW_SCENE, + PREVIEW_SCENE, // TODO: Remove in future version as the functionality + // moved to the scene condition }; class MacroConditionStudioMode : public MacroCondition {