From 81e64382c9c1699d15bc95c0cc0dcad502a131ba Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Tue, 27 Dec 2022 17:44:38 +0100 Subject: [PATCH] Add variable support to media action --- src/macro-core/macro-action-media.cpp | 37 ++++++++++++--------------- src/macro-core/macro-action-media.hpp | 7 ++--- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/macro-core/macro-action-media.cpp b/src/macro-core/macro-action-media.cpp index a36422f1..fee90d4c 100644 --- a/src/macro-core/macro-action-media.cpp +++ b/src/macro-core/macro-action-media.cpp @@ -21,7 +21,7 @@ const static std::map actionTypes = { bool MacroActionMedia::PerformAction() { - auto source = obs_weak_source_get_source(_mediaSource); + auto source = obs_weak_source_get_source(_mediaSource.GetSource()); obs_media_state state = obs_source_media_get_state(source); switch (_action) { case MediaAction::PLAY: @@ -62,8 +62,7 @@ void MacroActionMedia::LogAction() const auto it = actionTypes.find(_action); if (it != actionTypes.end()) { vblog(LOG_INFO, "performed action \"%s\" for source \"%s\"", - it->second.c_str(), - GetWeakSourceName(_mediaSource).c_str()); + it->second.c_str(), _mediaSource.ToString(true).c_str()); } else { blog(LOG_WARNING, "ignored unknown media action %d", static_cast(_action)); @@ -73,8 +72,7 @@ void MacroActionMedia::LogAction() const bool MacroActionMedia::Save(obs_data_t *obj) const { MacroAction::Save(obj); - obs_data_set_string(obj, "mediaSource", - GetWeakSourceName(_mediaSource).c_str()); + _mediaSource.Save(obj, "mediaSource"); obs_data_set_int(obj, "action", static_cast(_action)); _seek.Save(obj); return true; @@ -83,8 +81,7 @@ bool MacroActionMedia::Save(obs_data_t *obj) const bool MacroActionMedia::Load(obs_data_t *obj) { MacroAction::Load(obj); - const char *MediaSourceName = obs_data_get_string(obj, "mediaSource"); - _mediaSource = GetWeakSourceByName(MediaSourceName); + _mediaSource.Load(obj, "mediaSource"); _action = static_cast(obs_data_get_int(obj, "action")); _seek.Load(obj); return true; @@ -92,10 +89,7 @@ bool MacroActionMedia::Load(obs_data_t *obj) std::string MacroActionMedia::GetShortDesc() const { - if (_mediaSource) { - return GetWeakSourceName(_mediaSource); - } - return ""; + return _mediaSource.ToString(); } static inline void populateActionSelection(QComboBox *list) @@ -108,18 +102,20 @@ static inline void populateActionSelection(QComboBox *list) MacroActionMediaEdit::MacroActionMediaEdit( QWidget *parent, std::shared_ptr entryData) : QWidget(parent), - _mediaSources(new QComboBox()), + _sources(new SourceSelectionWidget(this, QStringList(), true)), _actions(new QComboBox()), _seek(new DurationSelection()) { populateActionSelection(_actions); - populateMediaSelection(_mediaSources); + auto sources = GetMediaSourceNames(); + sources.sort(); + _sources->SetSourceNameList(sources); QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this, SLOT(ActionChanged(int))); - QWidget::connect(_mediaSources, - SIGNAL(currentTextChanged(const QString &)), this, - SLOT(SourceChanged(const QString &))); + QWidget::connect(_sources, + SIGNAL(SourceChanged(const SourceSelection &)), this, + SLOT(SourceChanged(const SourceSelection &))); QWidget::connect(_seek, SIGNAL(DurationChanged(double)), this, SLOT(DurationChanged(double))); QWidget::connect(_seek, SIGNAL(UnitChanged(DurationUnit)), this, @@ -127,7 +123,7 @@ MacroActionMediaEdit::MacroActionMediaEdit( QHBoxLayout *mainLayout = new QHBoxLayout; std::unordered_map widgetPlaceholders = { - {"{{mediaSources}}", _mediaSources}, + {"{{mediaSources}}", _sources}, {"{{actions}}", _actions}, {"{{duration}}", _seek}, }; @@ -146,21 +142,20 @@ void MacroActionMediaEdit::UpdateEntryData() return; } - _mediaSources->setCurrentText( - GetWeakSourceName(_entryData->_mediaSource).c_str()); + _sources->SetSource(_entryData->_mediaSource); _actions->setCurrentIndex(static_cast(_entryData->_action)); _seek->SetDuration(_entryData->_seek); SetWidgetVisibility(); } -void MacroActionMediaEdit::SourceChanged(const QString &text) +void MacroActionMediaEdit::SourceChanged(const SourceSelection &source) { if (_loading || !_entryData) { return; } std::lock_guard lock(switcher->m); - _entryData->_mediaSource = GetWeakSourceByQString(text); + _entryData->_mediaSource = source; emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); } diff --git a/src/macro-core/macro-action-media.hpp b/src/macro-core/macro-action-media.hpp index 3219eda5..8eacf8c6 100644 --- a/src/macro-core/macro-action-media.hpp +++ b/src/macro-core/macro-action-media.hpp @@ -1,6 +1,7 @@ #pragma once #include "macro-action-edit.hpp" #include "duration-control.hpp" +#include "source-selection.hpp" #include #include @@ -29,7 +30,7 @@ public: return std::make_shared(m); } - OBSWeakSource _mediaSource; + SourceSelection _mediaSource; MediaAction _action = MediaAction::PLAY; Duration _seek; @@ -55,7 +56,7 @@ public: } private slots: - void SourceChanged(const QString &text); + void SourceChanged(const SourceSelection &); void ActionChanged(int value); void DurationChanged(double value); void DurationUnitChanged(DurationUnit unit); @@ -63,7 +64,7 @@ signals: void HeaderInfoChanged(const QString &); protected: - QComboBox *_mediaSources; + SourceSelectionWidget *_sources; QComboBox *_actions; DurationSelection *_seek; std::shared_ptr _entryData;