diff --git a/src/macro-core/macro-action-variable.cpp b/src/macro-core/macro-action-variable.cpp index 3fc20c0f..a668b2c1 100644 --- a/src/macro-core/macro-action-variable.cpp +++ b/src/macro-core/macro-action-variable.cpp @@ -119,7 +119,7 @@ void MacroActionVariable::HandleMathExpression(Variable *var) bool MacroActionVariable::PerformAction() { - auto var = GetVariableByName(_variableName); + auto var = _variable.lock(); if (!var) { return true; } @@ -132,7 +132,7 @@ bool MacroActionVariable::PerformAction() apppend(*var, _strValue); break; case Type::APPEND_VAR: { - auto var2 = GetVariableByName(_variable2Name); + auto var2 = _variable2.lock(); if (!var2) { return true; } @@ -171,18 +171,18 @@ bool MacroActionVariable::PerformAction() } case Type::SUBSTRING: { if (_regex.Enabled()) { - HandleRegexSubString(var); + HandleRegexSubString(var.get()); return true; } - HandleIndexSubString(var); + HandleIndexSubString(var.get()); return true; } case Type::FIND_AND_REPLACE: { - HandleFindAndReplace(var); + HandleFindAndReplace(var.get()); return true; } case Type::MATH_EXPRESSION: { - HandleMathExpression(var); + HandleMathExpression(var.get()); return true; } } @@ -193,8 +193,10 @@ bool MacroActionVariable::PerformAction() bool MacroActionVariable::Save(obs_data_t *obj) const { MacroAction::Save(obj); - obs_data_set_string(obj, "variableName", _variableName.c_str()); - obs_data_set_string(obj, "variable2Name", _variable2Name.c_str()); + obs_data_set_string(obj, "variableName", + GetWeakVariableName(_variable).c_str()); + obs_data_set_string(obj, "variable2Name", + GetWeakVariableName(_variable2).c_str()); obs_data_set_string(obj, "strValue", _strValue.c_str()); obs_data_set_double(obj, "numValue", _numValue); obs_data_set_int(obj, "condition", static_cast(_type)); @@ -213,8 +215,10 @@ bool MacroActionVariable::Save(obs_data_t *obj) const bool MacroActionVariable::Load(obs_data_t *obj) { MacroAction::Load(obj); - _variableName = obs_data_get_string(obj, "variableName"); - _variable2Name = obs_data_get_string(obj, "variable2Name"); + _variable = + GetWeakVariableByName(obs_data_get_string(obj, "variableName")); + _variable2 = GetWeakVariableByName( + obs_data_get_string(obj, "variable2Name")); _strValue = obs_data_get_string(obj, "strValue"); _numValue = obs_data_get_double(obj, "numValue"); _type = static_cast(obs_data_get_int(obj, "condition")); @@ -238,7 +242,7 @@ bool MacroActionVariable::PostLoad() std::string MacroActionVariable::GetShortDesc() const { - return _variableName; + return GetWeakVariableName(_variable); } void MacroActionVariable::SetSegmentIndexValue(int value) @@ -463,8 +467,8 @@ void MacroActionVariableEdit::UpdateEntryData() return; } - _variables->SetVariable(_entryData->_variableName); - _variables2->SetVariable(_entryData->_variable2Name); + _variables->SetVariable(_entryData->_variable); + _variables2->SetVariable(_entryData->_variable2); _actions->setCurrentIndex(static_cast(_entryData->_type)); _strValue->setPlainText(QString::fromStdString(_entryData->_strValue)); _numValue->setValue(_entryData->_numValue); @@ -489,7 +493,7 @@ void MacroActionVariableEdit::VariableChanged(const QString &text) } std::lock_guard lock(switcher->m); - _entryData->_variableName = text.toStdString(); + _entryData->_variable = GetWeakVariableByQString(text); } void MacroActionVariableEdit::Variable2Changed(const QString &text) @@ -499,7 +503,7 @@ void MacroActionVariableEdit::Variable2Changed(const QString &text) } std::lock_guard lock(switcher->m); - _entryData->_variable2Name = text.toStdString(); + _entryData->_variable2 = GetWeakVariableByQString(text); } void MacroActionVariableEdit::ActionChanged(int value) diff --git a/src/macro-core/macro-action-variable.hpp b/src/macro-core/macro-action-variable.hpp index ae811bb4..29e2c730 100644 --- a/src/macro-core/macro-action-variable.hpp +++ b/src/macro-core/macro-action-variable.hpp @@ -36,8 +36,8 @@ public: }; Type _type = Type::SET_FIXED_VALUE; - std::string _variableName = ""; - std::string _variable2Name = ""; + std::weak_ptr _variable; + std::weak_ptr _variable2; std::string _strValue = ""; double _numValue = 0; int _subStringStart = 0; diff --git a/src/macro-core/macro-condition-variable.cpp b/src/macro-core/macro-condition-variable.cpp index 57a7112b..2f308609 100644 --- a/src/macro-core/macro-condition-variable.cpp +++ b/src/macro-core/macro-condition-variable.cpp @@ -76,8 +76,8 @@ bool MacroConditionVariable::ValueChanged(const Variable &var) bool MacroConditionVariable::CompareVariables() { - auto var1 = GetVariableByName(_variableName); - auto var2 = GetVariableByName(_variable2Name); + auto var1 = _variable.lock(); + auto var2 = _variable2.lock(); if (!var1 || !var2) { return false; } @@ -105,7 +105,7 @@ bool MacroConditionVariable::CompareVariables() bool MacroConditionVariable::CheckCondition() { - auto var = GetVariableByName(_variableName); + auto var = _variable.lock(); if (!var) { return false; } @@ -137,8 +137,10 @@ bool MacroConditionVariable::CheckCondition() bool MacroConditionVariable::Save(obs_data_t *obj) const { MacroCondition::Save(obj); - obs_data_set_string(obj, "variableName", _variableName.c_str()); - obs_data_set_string(obj, "variable2Name", _variable2Name.c_str()); + obs_data_set_string(obj, "variableName", + GetWeakVariableName(_variable).c_str()); + obs_data_set_string(obj, "variable2Name", + GetWeakVariableName(_variable2).c_str()); obs_data_set_string(obj, "strValue", _strValue.c_str()); obs_data_set_double(obj, "numValue", _numValue); obs_data_set_int(obj, "condition", static_cast(_type)); @@ -149,8 +151,10 @@ bool MacroConditionVariable::Save(obs_data_t *obj) const bool MacroConditionVariable::Load(obs_data_t *obj) { MacroCondition::Load(obj); - _variableName = obs_data_get_string(obj, "variableName"); - _variable2Name = obs_data_get_string(obj, "variable2Name"); + _variable = + GetWeakVariableByName(obs_data_get_string(obj, "variableName")); + _variable2 = GetWeakVariableByName( + obs_data_get_string(obj, "variable2Name")); _strValue = obs_data_get_string(obj, "strValue"); _numValue = obs_data_get_double(obj, "numValue"); _type = static_cast(obs_data_get_int(obj, "condition")); @@ -165,7 +169,7 @@ bool MacroConditionVariable::Load(obs_data_t *obj) std::string MacroConditionVariable::GetShortDesc() const { - return _variableName; + return GetWeakVariableName(_variable); } static inline void populateConditionSelection(QComboBox *list) @@ -236,8 +240,8 @@ void MacroConditionVariableEdit::UpdateEntryData() return; } - _variables->SetVariable(_entryData->_variableName); - _variables2->SetVariable(_entryData->_variable2Name); + _variables->SetVariable(_entryData->_variable); + _variables2->SetVariable(_entryData->_variable2); _conditions->setCurrentIndex(static_cast(_entryData->_type)); _strValue->setPlainText(QString::fromStdString(_entryData->_strValue)); _numValue->setValue(_entryData->_numValue); @@ -252,7 +256,7 @@ void MacroConditionVariableEdit::VariableChanged(const QString &text) } std::lock_guard lock(switcher->m); - _entryData->_variableName = text.toStdString(); + _entryData->_variable = GetWeakVariableByQString(text); } void MacroConditionVariableEdit::Variable2Changed(const QString &text) @@ -263,7 +267,7 @@ void MacroConditionVariableEdit::Variable2Changed(const QString &text) } std::lock_guard lock(switcher->m); - _entryData->_variable2Name = text.toStdString(); + _entryData->_variable2 = GetWeakVariableByQString(text); } void MacroConditionVariableEdit::ConditionChanged(int value) diff --git a/src/macro-core/macro-condition-variable.hpp b/src/macro-core/macro-condition-variable.hpp index da89e7c7..ac89f48c 100644 --- a/src/macro-core/macro-condition-variable.hpp +++ b/src/macro-core/macro-condition-variable.hpp @@ -35,8 +35,8 @@ public: }; Type _type = Type::EQUALS; - std::string _variableName = ""; - std::string _variable2Name = ""; + std::weak_ptr _variable; + std::weak_ptr _variable2; std::string _strValue = ""; double _numValue = 0; RegexConfig _regex;