diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 574497a4..bfa87299 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -1240,12 +1240,19 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) array_obj, "restriction"); uint64_t time = obs_data_get_int(array_obj, "time"); + string mediaStr = MakeMediaSwitchName(source, scene, + transition, state, + restriction, time) + .toUtf8() + .constData(); + switcher->mediaSwitches.emplace_back( GetWeakSourceByName(scene), GetWeakSourceByName(source), GetWeakTransitionByName(transition), state, restriction, time, - (strcmp(scene, PREVIOUS_SCENE_NAME) == 0)); + (strcmp(scene, PREVIOUS_SCENE_NAME) == 0), + mediaStr); obs_data_release(array_obj); } diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 179130d0..16ddd5be 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -120,6 +120,7 @@ public slots: void on_fileScenesList_currentRowChanged(int idx); void on_browseButton_3_clicked(); + void on_mediaSwitches_currentRowChanged(int idx); void on_mediaAdd_clicked(); void on_mediaRemove_clicked(); diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index 26b86e06..23446bed 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -212,18 +212,20 @@ struct MediaSwitch { time_restriction restriction; bool matched; bool usePreviousScene; + std::string mediaSwitchStr; inline MediaSwitch(OBSWeakSource scene_, OBSWeakSource source_, OBSWeakSource transition_, obs_media_state state_, time_restriction restriction_, uint64_t time_, - bool usePreviousScene_) + bool usePreviousScene_, std::string mediaSwitchStr_) : scene(scene_), source(source_), transition(transition_), state(state_), restriction(restriction_), time(time_), - usePreviousScene(usePreviousScene_) + usePreviousScene(usePreviousScene_), + mediaSwitchStr(mediaSwitchStr_) { } }; diff --git a/src/media-switch.cpp b/src/media-switch.cpp index 07dbb3a0..8545c591 100644 --- a/src/media-switch.cpp +++ b/src/media-switch.cpp @@ -1,6 +1,37 @@ #include #include "headers/advanced-scene-switcher.hpp" +void SceneSwitcher::on_mediaSwitches_currentRowChanged(int idx) +{ + if (loading) + return; + if (idx == -1) + return; + + QListWidgetItem *item = ui->mediaSwitches->item(idx); + + QString mediaSceneStr = item->data(Qt::UserRole).toString(); + + lock_guard lock(switcher->m); + for (auto &s : switcher->mediaSwitches) { + if (mediaSceneStr.compare(s.mediaSwitchStr.c_str()) == 0) { + QString sceneName = GetWeakSourceName(s.scene).c_str(); + QString sourceName = + GetWeakSourceName(s.source).c_str(); + QString transitionName = + GetWeakSourceName(s.transition).c_str(); + ui->mediaScenes->setCurrentText(sceneName); + ui->mediaSources->setCurrentText(sourceName); + ui->mediaTransitions->setCurrentText(transitionName); + ui->mediaStates->setCurrentIndex(s.state); + ui->mediaTimeRestrictions->setCurrentIndex( + s.restriction); + ui->mediaTime->setValue(s.time); + break; + } + } +} + void SceneSwitcher::on_mediaAdd_clicked() { QString sourceName = ui->mediaSources->currentText(); @@ -32,7 +63,8 @@ void SceneSwitcher::on_mediaAdd_clicked() lock_guard lock(switcher->m); switcher->mediaSwitches.emplace_back( scene, source, transition, state, restriction, time, - (sceneName == QString(PREVIOUS_SCENE_NAME))); + (sceneName == QString(PREVIOUS_SCENE_NAME)), + switchText.toUtf8().constData()); } void SceneSwitcher::on_mediaRemove_clicked()