From 884fb1b6377d7a00dd54b086f79e48565f876dec Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 16 Jul 2023 20:29:21 +0200 Subject: [PATCH] Adjust to SceneItemSelection rework And do minor cleanup --- data/locale/de-DE.ini | 2 +- data/locale/en-US.ini | 2 +- data/locale/es-ES.ini | 2 +- data/locale/tr-TR.ini | 2 +- data/locale/zh-CN.ini | 2 +- src/macro-core/macro-action-scene-lock.cpp | 5 +- src/macro-core/macro-action-scene-order.cpp | 29 ++- .../macro-action-scene-transform.cpp | 14 +- .../macro-action-scene-visibility.cpp | 213 ++++-------------- .../macro-action-scene-visibility.hpp | 28 +-- src/macro-core/macro-action-transition.cpp | 7 +- .../macro-condition-scene-order.cpp | 32 ++- .../macro-condition-scene-transform.cpp | 9 +- .../macro-condition-scene-visibility.cpp | 22 +- 14 files changed, 107 insertions(+), 262 deletions(-) diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index 72b7024a..8c79fa6a 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -451,7 +451,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="Verstecken" AdvSceneSwitcher.action.sceneVisibility.type.toggle="Umschalten" AdvSceneSwitcher.action.sceneVisibility.type.source="Quelle" AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Beliebig" -AdvSceneSwitcher.action.sceneVisibility.entry="Auf{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}" +AdvSceneSwitcher.action.sceneVisibility.entry="Auf{{scenes}}{{actions}}{{sources}}" AdvSceneSwitcher.action.filter="Filter" AdvSceneSwitcher.action.filter.type.enable="Aktivieren" AdvSceneSwitcher.action.filter.type.disable="Deaktivieren" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 71050ea3..da2faa11 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -538,7 +538,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="Hide" AdvSceneSwitcher.action.sceneVisibility.type.toggle="Toggle" AdvSceneSwitcher.action.sceneVisibility.type.source="Source" AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Any" -AdvSceneSwitcher.action.sceneVisibility.entry="On{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}" +AdvSceneSwitcher.action.sceneVisibility.entry="On{{scenes}}{{actions}}{{sources}}" AdvSceneSwitcher.action.filter="Filter" AdvSceneSwitcher.action.filter.type.enable="Enable" AdvSceneSwitcher.action.filter.type.disable="Disable" diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 71a586dd..70738893 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -371,7 +371,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.show="Mostrar" AdvSceneSwitcher.action.sceneVisibility.type.hide="Ocultar" AdvSceneSwitcher.action.sceneVisibility.type.source="Fuente" AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Cualquiera" -AdvSceneSwitcher.action.sceneVisibility.entry="En{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}" +AdvSceneSwitcher.action.sceneVisibility.entry="En{{scenes}}{{actions}}{{sources}}" AdvSceneSwitcher.action.filter="Filtro" AdvSceneSwitcher.action.filter.type.enable="Habilitar" AdvSceneSwitcher.action.filter.type.disable="Deshabilitar" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index 09fbd9b3..e4691f3f 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -301,7 +301,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.show="Göster" AdvSceneSwitcher.action.sceneVisibility.type.hide="Gizle" AdvSceneSwitcher.action.sceneVisibility.type.source="Kayıt" AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="Herhangi" -AdvSceneSwitcher.action.sceneVisibility.entry="Açık{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}" +AdvSceneSwitcher.action.sceneVisibility.entry="Açık{{scenes}}{{actions}}{{sources}}" AdvSceneSwitcher.action.filter="Filtrele" AdvSceneSwitcher.action.filter.type.enable="Etkin" AdvSceneSwitcher.action.filter.type.disable="Etkisiz" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index aefe1112..8d9b97ec 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -502,7 +502,7 @@ AdvSceneSwitcher.action.sceneVisibility.type.hide="隐藏" AdvSceneSwitcher.action.sceneVisibility.type.toggle="切换" AdvSceneSwitcher.action.sceneVisibility.type.source="来源" AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup="全部" -AdvSceneSwitcher.action.sceneVisibility.entry="置{{scenes}}{{actions}}{{sourceTypes}}{{sources}}{{sourceGroups}}" +AdvSceneSwitcher.action.sceneVisibility.entry="置{{scenes}}{{actions}}{{sources}}" AdvSceneSwitcher.action.filter="滤镜" AdvSceneSwitcher.action.filter.type.enable="开启" AdvSceneSwitcher.action.filter.type.disable="关闭" diff --git a/src/macro-core/macro-action-scene-lock.cpp b/src/macro-core/macro-action-scene-lock.cpp index bda2416e..9d9877ee 100644 --- a/src/macro-core/macro-action-scene-lock.cpp +++ b/src/macro-core/macro-action-scene-lock.cpp @@ -39,9 +39,8 @@ bool MacroActionSceneLock::PerformAction() { auto items = _source.GetSceneItems(_scene); - for (auto item : items) { + for (const auto &item : items) { setSceneItemLock(item, _action); - obs_sceneitem_release(item); } return true; @@ -160,6 +159,8 @@ void MacroActionSceneLockEdit::SourceChanged(const SceneItemSelection &item) _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroActionSceneLockEdit::ActionChanged(int value) diff --git a/src/macro-core/macro-action-scene-order.cpp b/src/macro-core/macro-action-scene-order.cpp index b0310fe6..48b0d686 100644 --- a/src/macro-core/macro-action-scene-order.cpp +++ b/src/macro-core/macro-action-scene-order.cpp @@ -23,7 +23,7 @@ const static std::map actionTypes = { "AdvSceneSwitcher.action.sceneOrder.type.movePosition"}, }; -static void moveSceneItemsUp(std::vector &items) +static void moveSceneItemsUp(std::vector &items) { // In the case of the same source being in two sequential positions // moving the sources up will cause the sources to swap positions due to @@ -33,41 +33,36 @@ static void moveSceneItemsUp(std::vector &items) // will be moved up. std::reverse(items.begin(), items.end()); - for (auto &i : items) { + for (const auto &i : items) { obs_sceneitem_set_order(i, OBS_ORDER_MOVE_UP); - obs_sceneitem_release(i); } } -static void moveSceneItemsDown(std::vector &items) +static void moveSceneItemsDown(std::vector &items) { - for (auto &i : items) { + for (const auto &i : items) { obs_sceneitem_set_order(i, OBS_ORDER_MOVE_DOWN); - obs_sceneitem_release(i); } } -static void moveSceneItemsTop(std::vector &items) +static void moveSceneItemsTop(std::vector &items) { - for (auto &i : items) { + for (const auto &i : items) { obs_sceneitem_set_order(i, OBS_ORDER_MOVE_TOP); - obs_sceneitem_release(i); } } -static void moveSceneItemsBottom(std::vector &items) +static void moveSceneItemsBottom(std::vector &items) { - for (auto &i : items) { + for (const auto &i : items) { obs_sceneitem_set_order(i, OBS_ORDER_MOVE_BOTTOM); - obs_sceneitem_release(i); } } -static void moveSceneItemsPos(std::vector &items, int pos) +static void moveSceneItemsPos(std::vector &items, int pos) { - for (auto &i : items) { + for (const auto &i : items) { obs_sceneitem_set_order_position(i, pos); - obs_sceneitem_release(i); } } @@ -149,7 +144,7 @@ std::string MacroActionSceneOrder::GetShortDesc() const static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { + for (const auto &entry : actionTypes) { list->addItem(obs_module_text(entry.second.c_str())); } } @@ -228,6 +223,8 @@ void MacroActionSceneOrderEdit::SourceChanged(const SceneItemSelection &item) _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroActionSceneOrderEdit::ActionChanged(int value) diff --git a/src/macro-core/macro-action-scene-transform.cpp b/src/macro-core/macro-action-scene-transform.cpp index 4b678597..9766761e 100644 --- a/src/macro-core/macro-action-scene-transform.cpp +++ b/src/macro-core/macro-action-scene-transform.cpp @@ -235,6 +235,7 @@ void MacroActionSceneTransform::Transform(obs_scene_item *item) center(item, CenterType::HORIZONTAL); break; case MacroActionSceneTransform::Action::MANUAL_TRANSFORM: + ApplySettings(_settings); // Resolves variables obs_sceneitem_defer_update_begin(item); obs_sceneitem_set_info(item, &_info); obs_sceneitem_set_crop(item, &_crop); @@ -245,12 +246,9 @@ void MacroActionSceneTransform::Transform(obs_scene_item *item) bool MacroActionSceneTransform::PerformAction() { - ApplySettings(_settings); // Resolves variables - auto items = _source.GetSceneItems(_scene); - for (auto &item : items) { + for (const auto &item : items) { Transform(item); - obs_sceneitem_release(item); } return true; } @@ -345,9 +343,6 @@ void MacroActionSceneTransform::ApplySettings(const std::string &settings) } obs_data_release(obj); } - for (auto item : items) { - obs_sceneitem_release(item); - } obs_data_release(data); } @@ -455,6 +450,8 @@ void MacroActionSceneTransformEdit::SourceChanged(const SceneItemSelection &item _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroActionSceneTransformEdit::ActionChanged(int idx) @@ -492,9 +489,6 @@ void MacroActionSceneTransformEdit::GetSettingsClicked() auto settings = GetSceneItemTransform(items[0]); _settings->setPlainText(FormatJsonString(settings)); - for (auto item : items) { - obs_sceneitem_release(item); - } } void MacroActionSceneTransformEdit::SettingsChanged() diff --git a/src/macro-core/macro-action-scene-visibility.cpp b/src/macro-core/macro-action-scene-visibility.cpp index cd534e14..0dd44152 100644 --- a/src/macro-core/macro-action-scene-visibility.cpp +++ b/src/macro-core/macro-action-scene-visibility.cpp @@ -11,85 +11,38 @@ bool MacroActionSceneVisibility::_registered = MacroActionFactory::Register( MacroActionSceneVisibilityEdit::Create, "AdvSceneSwitcher.action.sceneVisibility"}); -const static std::map actionTypes = { - {SceneVisibilityAction::SHOW, - "AdvSceneSwitcher.action.sceneVisibility.type.show"}, - {SceneVisibilityAction::HIDE, - "AdvSceneSwitcher.action.sceneVisibility.type.hide"}, - {SceneVisibilityAction::TOGGLE, - "AdvSceneSwitcher.action.sceneVisibility.type.toggle"}, -}; - -const static std::map sourceItemSourceTypes = { - {SceneItemSourceType::SOURCE, - "AdvSceneSwitcher.action.sceneVisibility.type.source"}, - {SceneItemSourceType::SOURCE_GROUP, - "AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup"}, -}; - -struct VisibilityData { - std::string name; - SceneVisibilityAction action; +const static std::map + actionTypes = { + {MacroActionSceneVisibility::Action::SHOW, + "AdvSceneSwitcher.action.sceneVisibility.type.show"}, + {MacroActionSceneVisibility::Action::HIDE, + "AdvSceneSwitcher.action.sceneVisibility.type.hide"}, + {MacroActionSceneVisibility::Action::TOGGLE, + "AdvSceneSwitcher.action.sceneVisibility.type.toggle"}, }; static void setSceneItemVisibility(obs_sceneitem_t *item, - SceneVisibilityAction action) + MacroActionSceneVisibility::Action action) { switch (action) { - case SceneVisibilityAction::SHOW: + case MacroActionSceneVisibility::Action::SHOW: obs_sceneitem_set_visible(item, true); break; - case SceneVisibilityAction::HIDE: + case MacroActionSceneVisibility::Action::HIDE: obs_sceneitem_set_visible(item, false); break; - case SceneVisibilityAction::TOGGLE: + case MacroActionSceneVisibility::Action::TOGGLE: obs_sceneitem_set_visible(item, !obs_sceneitem_visible(item)); break; } } -static bool visibilitySourceTypeEnum(obs_scene_t *, obs_sceneitem_t *item, - void *ptr) -{ - VisibilityData *vInfo = reinterpret_cast(ptr); - - auto sourceTypeName = obs_source_get_display_name( - obs_source_get_id(obs_sceneitem_get_source(item))); - if (sourceTypeName && vInfo->name == sourceTypeName) { - setSceneItemVisibility(item, vInfo->action); - } - - if (obs_sceneitem_is_group(item)) { - obs_scene_t *scene = obs_sceneitem_group_get_scene(item); - obs_scene_enum_items(scene, visibilitySourceTypeEnum, ptr); - } - - return true; -} - bool MacroActionSceneVisibility::PerformAction() { - switch (_sourceType) { - case SceneItemSourceType::SOURCE: { - auto items = _source.GetSceneItems(_scene); - for (auto item : items) { - setSceneItemVisibility(item, _action); - obs_sceneitem_release(item); - } - break; + auto items = _source.GetSceneItems(_scene); + for (const auto &item : items) { + setSceneItemVisibility(item, _action); } - case SceneItemSourceType::SOURCE_GROUP: { - auto s = obs_weak_source_get_source(_scene.GetScene()); - auto scene = obs_scene_from_source(s); - VisibilityData vInfo = {_sourceGroup, _action}; - obs_scene_enum_items(scene, visibilitySourceTypeEnum, &vInfo); - obs_source_release(s); - break; - } - default: - break; - } - return true; } @@ -97,18 +50,11 @@ void MacroActionSceneVisibility::LogAction() const { auto it = actionTypes.find(_action); if (it != actionTypes.end()) { - if (_sourceType == SceneItemSourceType::SOURCE) { - vblog(LOG_INFO, - "performed visibility action \"%s\" for source \"%s\" on scene \"%s\"", - it->second.c_str(), - _source.ToString(true).c_str(), - _scene.ToString(true).c_str()); - } else { - vblog(LOG_INFO, - "performed visibility action \"%s\" for any source type \"%s\" on scene \"%s\"", - it->second.c_str(), _sourceGroup.c_str(), - _scene.ToString(true).c_str()); - } + vblog(LOG_INFO, + "performed visibility action \"%s\" for source \"%s\" on scene \"%s\"", + it->second.c_str(), _source.ToString(true).c_str(), + _scene.ToString(true).c_str()); + } else { blog(LOG_WARNING, "ignored unknown SceneVisibility action %d", static_cast(_action)); @@ -119,13 +65,8 @@ bool MacroActionSceneVisibility::Save(obs_data_t *obj) const { MacroAction::Save(obj); _scene.Save(obj); - if (_sourceType == SceneItemSourceType::SOURCE) { - _source.Save(obj); - } else { - obs_data_set_string(obj, "sourceGroup", _sourceGroup.c_str()); - } + _source.Save(obj); obs_data_set_int(obj, "action", static_cast(_action)); - obs_data_set_int(obj, "sourceType", static_cast(_sourceType)); return true; } @@ -136,89 +77,64 @@ bool MacroActionSceneVisibility::Load(obs_data_t *obj) if (obs_data_has_user_value(obj, "source")) { auto sourceName = obs_data_get_string(obj, "source"); obs_data_set_string(obj, "sceneItem", sourceName); - obs_data_set_string(obj, "sourceGroup", sourceName); } MacroAction::Load(obj); _scene.Load(obj); _source.Load(obj); - _sourceType = static_cast( - obs_data_get_int(obj, "sourceType")); - _sourceGroup = obs_data_get_string(obj, "sourceGroup"); - _action = static_cast( + _action = static_cast( obs_data_get_int(obj, "action")); + + // TODO: Remove in future version + if (obs_data_get_int(obj, "sourceType") != 0) { + auto sourceGroup = obs_data_get_string(obj, "sourceGroup"); + _source.SetSourceTypeSelection(sourceGroup); + } return true; } std::string MacroActionSceneVisibility::GetShortDesc() const { - if (_sourceType == SceneItemSourceType::SOURCE && - !_source.ToString().empty()) { + if (!_source.ToString().empty()) { return _scene.ToString() + " - " + _source.ToString(); } - if (_sourceType == SceneItemSourceType::SOURCE_GROUP && - !_sourceGroup.empty()) { - return _scene.ToString() + " - " + - obs_module_text( - "AdvSceneSwitcher.action.sceneVisibility.type.sourceGroup") + - " " + _sourceGroup; - } return ""; } static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { - list->addItem(obs_module_text(entry.second.c_str())); - } -} - -static inline void populateSourceItemTypeSelection(QComboBox *list) -{ - for (auto entry : sourceItemSourceTypes) { + for (const auto &entry : actionTypes) { list->addItem(obs_module_text(entry.second.c_str())); } } MacroActionSceneVisibilityEdit::MacroActionSceneVisibilityEdit( QWidget *parent, std::shared_ptr entryData) - : QWidget(parent) + : QWidget(parent), + _scenes(new SceneSelectionWidget(window(), true, false, true, true)), + _sources(new SceneItemSelectionWidget(parent)), + _actions(new QComboBox()) { - _scenes = new SceneSelectionWidget(window(), true, false, true, true); - _sourceTypes = new QComboBox(); - _sources = new SceneItemSelectionWidget(parent); - _sourceGroups = new QComboBox(); - _actions = new QComboBox(); - - populateSourceItemTypeSelection(_sourceTypes); - PopulateSourceGroupSelection(_sourceGroups); populateActionSelection(_actions); QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this, SLOT(ActionChanged(int))); QWidget::connect(_scenes, SIGNAL(SceneChanged(const SceneSelection &)), this, SLOT(SceneChanged(const SceneSelection &))); - QWidget::connect(_sourceTypes, SIGNAL(currentIndexChanged(int)), this, - SLOT(SourceTypeChanged(int))); QWidget::connect(_scenes, SIGNAL(SceneChanged(const SceneSelection &)), _sources, SLOT(SceneChanged(const SceneSelection &))); QWidget::connect(_sources, SIGNAL(SceneItemChanged(const SceneItemSelection &)), this, SLOT(SourceChanged(const SceneItemSelection &))); - QWidget::connect(_sourceGroups, - SIGNAL(currentTextChanged(const QString &)), this, - SLOT(SourceGroupChanged(const QString &))); - QHBoxLayout *mainLayout = new QHBoxLayout; - std::unordered_map widgetPlaceholders = { - {"{{scenes}}", _scenes}, {"{{sourceTypes}}", _sourceTypes}, - {"{{sources}}", _sources}, {"{{sourceGroups}}", _sourceGroups}, - {"{{actions}}", _actions}, - }; + auto layout = new QHBoxLayout; PlaceWidgets(obs_module_text( "AdvSceneSwitcher.action.sceneVisibility.entry"), - mainLayout, widgetPlaceholders); - setLayout(mainLayout); + layout, + {{"{{scenes}}", _scenes}, + {"{{sources}}", _sources}, + {"{{actions}}", _actions}}); + setLayout(layout); _entryData = entryData; UpdateEntryData(); @@ -232,13 +148,8 @@ void MacroActionSceneVisibilityEdit::UpdateEntryData() } _actions->setCurrentIndex(static_cast(_entryData->_action)); - _sourceTypes->setCurrentIndex( - static_cast(_entryData->_sourceType)); _scenes->SetScene(_entryData->_scene); _sources->SetSceneItem((_entryData->_source)); - _sourceGroups->setCurrentText( - QString::fromStdString(_entryData->_sourceGroup)); - SetWidgetVisibility(); } void MacroActionSceneVisibilityEdit::SceneChanged(const SceneSelection &s) @@ -251,17 +162,6 @@ void MacroActionSceneVisibilityEdit::SceneChanged(const SceneSelection &s) _entryData->_scene = s; } -void MacroActionSceneVisibilityEdit::SourceTypeChanged(int value) -{ - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); - _entryData->_sourceType = static_cast(value); - SetWidgetVisibility(); -} - void MacroActionSceneVisibilityEdit::SourceChanged( const SceneItemSelection &item) { @@ -273,22 +173,8 @@ void MacroActionSceneVisibilityEdit::SourceChanged( _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); -} - -void MacroActionSceneVisibilityEdit::SourceGroupChanged(const QString &text) -{ - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); - if (text == obs_module_text("AdvSceneSwitcher.selectItem")) { - _entryData->_sourceGroup = ""; - } else { - _entryData->_sourceGroup = text.toStdString(); - } - emit HeaderInfoChanged( - QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroActionSceneVisibilityEdit::ActionChanged(int value) @@ -298,19 +184,8 @@ void MacroActionSceneVisibilityEdit::ActionChanged(int value) } auto lock = LockContext(); - _entryData->_action = static_cast(value); -} - -void MacroActionSceneVisibilityEdit::SetWidgetVisibility() -{ - if (!_entryData) { - return; - } - _sources->setVisible(_entryData->_sourceType == - SceneItemSourceType::SOURCE); - _sourceGroups->setVisible(_entryData->_sourceType == - SceneItemSourceType::SOURCE_GROUP); - adjustSize(); + _entryData->_action = + static_cast(value); } } // namespace advss diff --git a/src/macro-core/macro-action-scene-visibility.hpp b/src/macro-core/macro-action-scene-visibility.hpp index 02204ef5..c78baff8 100644 --- a/src/macro-core/macro-action-scene-visibility.hpp +++ b/src/macro-core/macro-action-scene-visibility.hpp @@ -7,17 +7,6 @@ namespace advss { -enum class SceneVisibilityAction { - SHOW, - HIDE, - TOGGLE, -}; - -enum class SceneItemSourceType { - SOURCE, - SOURCE_GROUP, -}; - class MacroActionSceneVisibility : public MacroAction { public: MacroActionSceneVisibility(Macro *m) : MacroAction(m) {} @@ -33,10 +22,14 @@ public: } SceneSelection _scene; - SceneItemSourceType _sourceType = SceneItemSourceType::SOURCE; SceneItemSelection _source; - std::string _sourceGroup = ""; - SceneVisibilityAction _action = SceneVisibilityAction::SHOW; + + enum class Action { + SHOW, + HIDE, + TOGGLE, + }; + Action _action = Action::SHOW; private: static bool _registered; @@ -62,25 +55,18 @@ public: private slots: void SceneChanged(const SceneSelection &); - void SourceTypeChanged(int value); void SourceChanged(const SceneItemSelection &); - void SourceGroupChanged(const QString &text); void ActionChanged(int value); signals: void HeaderInfoChanged(const QString &); protected: SceneSelectionWidget *_scenes; - QComboBox *_sourceTypes; SceneItemSelectionWidget *_sources; - QComboBox *_sourceGroups; QComboBox *_actions; std::shared_ptr _entryData; private: - void SetWidgetVisibility(); - - QHBoxLayout *_mainLayout; bool _loading = true; }; diff --git a/src/macro-core/macro-action-transition.cpp b/src/macro-core/macro-action-transition.cpp index 62c79ab4..b28126b6 100644 --- a/src/macro-core/macro-action-transition.cpp +++ b/src/macro-core/macro-action-transition.cpp @@ -88,7 +88,7 @@ void MacroActionTransition::SetSourceTransition(bool show) obs_source_release(transition); const auto items = _source.GetSceneItems(_scene); - for (auto &item : items) { + for (const auto &item : items) { if (_setTransitionType) { obs_sceneitem_set_transition(item, show, t); } @@ -96,7 +96,6 @@ void MacroActionTransition::SetSourceTransition(bool show) obs_sceneitem_set_transition_duration( item, show, _duration.Milliseconds()); } - obs_sceneitem_release(item); } obs_source_release(t); @@ -200,7 +199,7 @@ std::string MacroActionTransition::GetShortDesc() const static inline void populateActionSelection(QComboBox *list) { - for (auto entry : actionTypes) { + for (const auto &entry : actionTypes) { list->addItem(obs_module_text(entry.second.c_str())); } } @@ -298,6 +297,8 @@ void MacroActionTransitionEdit::SourceChanged(const SceneItemSelection &item) _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroActionTransitionEdit::ActionChanged(int value) diff --git a/src/macro-core/macro-condition-scene-order.cpp b/src/macro-core/macro-condition-scene-order.cpp index 1bfaf86a..723b49f5 100644 --- a/src/macro-core/macro-condition-scene-order.cpp +++ b/src/macro-core/macro-condition-scene-order.cpp @@ -29,16 +29,16 @@ struct PosInfo2 { static bool getSceneItemPositionHelper(obs_scene_t *, obs_sceneitem_t *item, void *ptr) { - PosInfo2 *posInfo = reinterpret_cast(ptr); + auto posInfo = reinterpret_cast(ptr); + if (obs_sceneitem_is_group(item)) { + obs_scene_t *scene = obs_sceneitem_group_get_scene(item); + obs_scene_enum_items(scene, getSceneItemPositionHelper, ptr); + } if (posInfo->item == item) { posInfo->pos = posInfo->curPos; return false; } - if (obs_sceneitem_is_group(item)) { - obs_scene_t *scene = obs_sceneitem_group_get_scene(item); - obs_scene_enum_items(scene, getSceneItemPositionHelper, ptr); - } posInfo->curPos += 1; return true; } @@ -50,11 +50,11 @@ static PosInfo2 getSceneItemPos(obs_scene_item *item, obs_scene *scene) return pos; } -std::vector getSceneItemPositions(std::vector &items, - obs_scene *scene) +static std::vector getSceneItemPositions(std::vector &items, + obs_scene *scene) { std::vector positions; - for (auto item : items) { + for (const auto &item : items) { auto pos = getSceneItemPos(item, scene); if (pos.pos != -1) { positions.emplace_back(pos.pos); @@ -106,13 +106,6 @@ bool MacroConditionSceneOrder::CheckCondition() auto positions1 = getSceneItemPositions(items1, scene); auto positions2 = getSceneItemPositions(items2, scene); - for (auto i : items1) { - obs_sceneitem_release(i); - } - for (auto i : items2) { - obs_sceneitem_release(i); - } - bool ret = false; switch (_condition) { @@ -124,8 +117,9 @@ bool MacroConditionSceneOrder::CheckCondition() break; case Condition::POSITION: for (int p : positions1) { - if (p == _position) + if (p == _position) { ret = true; + } } break; default: @@ -195,7 +189,7 @@ std::string MacroConditionSceneOrder::GetShortDesc() const static inline void populateConditionSelection(QComboBox *list) { - for (auto entry : sceneOrderConditionTypes) { + for (const auto &entry : sceneOrderConditionTypes) { list->addItem(obs_module_text(entry.second.c_str())); } } @@ -282,6 +276,8 @@ void MacroConditionSceneOrderEdit::SourceChanged(const SceneItemSelection &item) _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroConditionSceneOrderEdit::Source2Changed(const SceneItemSelection &item) @@ -294,6 +290,8 @@ void MacroConditionSceneOrderEdit::Source2Changed(const SceneItemSelection &item _entryData->_source2 = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroConditionSceneOrderEdit::ConditionChanged(int index) diff --git a/src/macro-core/macro-condition-scene-transform.cpp b/src/macro-core/macro-condition-scene-transform.cpp index 64f84ec9..0874418f 100644 --- a/src/macro-core/macro-condition-scene-transform.cpp +++ b/src/macro-core/macro-condition-scene-transform.cpp @@ -18,12 +18,11 @@ bool MacroConditionSceneTransform::CheckCondition() auto items = _source.GetSceneItems(_scene); std::string json; - for (auto &item : items) { + for (const auto &item : items) { json = GetSceneItemTransform(item); if (MatchJson(json, _settings, _regex)) { ret = true; } - obs_sceneitem_release(item); } SetVariableValue(json); return ret; @@ -165,6 +164,8 @@ void MacroConditionSceneTransformEdit::SourceChanged( _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroConditionSceneTransformEdit::GetSettingsClicked() @@ -184,10 +185,6 @@ void MacroConditionSceneTransformEdit::GetSettingsClicked() settings = EscapeForRegex(settings); } _settings->setPlainText(settings); - - for (auto item : items) { - obs_sceneitem_release(item); - } } void MacroConditionSceneTransformEdit::SettingsChanged() diff --git a/src/macro-core/macro-condition-scene-visibility.cpp b/src/macro-core/macro-condition-scene-visibility.cpp index 40a733a9..cf08cdd2 100644 --- a/src/macro-core/macro-condition-scene-visibility.cpp +++ b/src/macro-core/macro-condition-scene-visibility.cpp @@ -24,32 +24,30 @@ const static std::map "AdvSceneSwitcher.condition.sceneVisibility.type.changed"}, }; -static bool areAllSceneItemsShown(const std::vector &items) +static bool areAllSceneItemsShown(const std::vector &items) { bool ret = true; - for (auto item : items) { + for (const auto &item : items) { if (!obs_sceneitem_visible(item)) { ret = false; } - obs_sceneitem_release(item); } return ret; } -static bool areAllSceneItemsHidden(const std::vector &items) +static bool areAllSceneItemsHidden(const std::vector &items) { bool ret = true; - for (auto item : items) { + for (const auto &item : items) { if (obs_sceneitem_visible(item)) { ret = false; } - obs_sceneitem_release(item); } return ret; } static bool -didVisibilityOfAnySceneItemsChange(const std::vector &items, +didVisibilityOfAnySceneItemsChange(const std::vector &items, std::vector &previousVisibility) { std::vector currentVisibility; @@ -64,10 +62,6 @@ didVisibilityOfAnySceneItemsChange(const std::vector &items, ret = previousVisibility != currentVisibility; } previousVisibility = currentVisibility; - - for (const auto &item : items) { - obs_sceneitem_release(item); - } return ret; } @@ -86,10 +80,10 @@ bool MacroConditionSceneVisibility::CheckCondition() case Condition::CHANGED: return didVisibilityOfAnySceneItemsChange(items, _previousVisibilty); - break; default: break; } + return false; } @@ -129,7 +123,7 @@ std::string MacroConditionSceneVisibility::GetShortDesc() const static inline void populateConditionSelection(QComboBox *list) { - for (auto entry : conditionTypes) { + for (const auto &entry : conditionTypes) { list->addItem(obs_module_text(entry.second.c_str())); } } @@ -183,6 +177,8 @@ void MacroConditionSceneVisibilityEdit::SourceChanged( _entryData->_source = item; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); + adjustSize(); + updateGeometry(); } void MacroConditionSceneVisibilityEdit::SceneChanged(const SceneSelection &s)