From 6b6e37da92df9f6202463c6ca8c439fc2f3a1fce Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Fri, 25 Aug 2023 19:26:31 +0200 Subject: [PATCH] Hide preview scene options from studio mode action and condition The options will only be hidden if the it is not being used. Thus the functionality of existing macros will not be affected. --- src/macro-core/macro-action-studio-mode.cpp | 51 ++++++++++++------- src/macro-core/macro-action-studio-mode.hpp | 21 ++++---- .../macro-condition-studio-mode.cpp | 7 +++ .../macro-condition-studio-mode.hpp | 3 +- 4 files changed, 52 insertions(+), 30 deletions(-) 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 {