From 8cfed048ccd3eebea217f3e9e689ed09e52cdfaf Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Mon, 23 Aug 2021 21:16:31 +0200 Subject: [PATCH] Create copy of previous macro segment when inserting new segment --- src/macro-action-edit.cpp | 16 +++++++++++++--- src/macro-condition-edit.cpp | 16 +++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp index e249c566..b43c373e 100644 --- a/src/macro-action-edit.cpp +++ b/src/macro-action-edit.cpp @@ -134,12 +134,22 @@ void AdvSceneSwitcher::AddMacroAction(int idx) return; } - MacroActionSwitchScene temp; - std::string id = temp.GetId(); - + std::string id; + if (idx - 1 >= 0) { + id = macro->Actions().at(idx - 1)->GetId(); + } else { + MacroActionSwitchScene temp; + id = temp.GetId(); + } std::lock_guard lock(switcher->m); macro->Actions().emplace(macro->Actions().begin() + idx, MacroActionFactory::Create(id)); + if (idx - 1 >= 0) { + auto data = obs_data_create(); + macro->Actions().at(idx - 1)->Save(data); + macro->Actions().at(idx)->Load(data); + obs_data_release(data); + } macro->UpdateActionIndices(); // All entry pointers in existing edit widgets after the new entry will diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp index 1a1baeb6..7c915433 100644 --- a/src/macro-condition-edit.cpp +++ b/src/macro-condition-edit.cpp @@ -254,14 +254,24 @@ void AdvSceneSwitcher::AddMacroCondition(int idx) return; } - MacroConditionScene temp; - std::string id = temp.GetId(); - + std::string id; + if (idx - 1 >= 0) { + id = macro->Conditions().at(idx - 1)->GetId(); + } else { + MacroConditionScene temp; + id = temp.GetId(); + } std::lock_guard lock(switcher->m); bool root = idx == 0; auto cond = macro->Conditions().emplace(macro->Conditions().begin() + idx, MacroConditionFactory::Create(id)); + if (idx - 1 >= 0) { + auto data = obs_data_create(); + macro->Conditions().at(idx - 1)->Save(data); + macro->Conditions().at(idx)->Load(data); + obs_data_release(data); + } auto logic = root ? LogicType::ROOT_NONE : LogicType::NONE; (*cond)->SetLogicType(logic); macro->UpdateConditionIndices();