diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index 1241e704..7a76b95a 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -575,7 +575,7 @@ AdvSceneSwitcher.action.variable.invalidSelection="Ungültige Auswahl!" AdvSceneSwitcher.action.variable.actionNoVariableSupport="Das Abrufen von Variablenwerten aus %1 Aktionen wird nicht unterstützt!" AdvSceneSwitcher.action.variable.conditionNoVariableSupport="Das Abrufen von Variablenwerten aus %1 Bedingungen wird nicht unterstützt!" AdvSceneSwitcher.action.variable.currentSegmentValue="Aktueller Wert:" -AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}" +AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}" ; Transition Tab diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 9ee5c3b2..e9c830ce 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -736,6 +736,7 @@ AdvSceneSwitcher.action.variable.type.subString="Set to substring of current val AdvSceneSwitcher.action.variable.type.findAndReplace="Find and replace in current value" AdvSceneSwitcher.action.variable.type.mathExpression="Mathematical expression" AdvSceneSwitcher.action.variable.type.askForValue="Get user input" +AdvSceneSwitcher.action.variable.type.environmentVariable="Set to environment variable value" AdvSceneSwitcher.action.variable.askForValuePromptDefault="Assign value to variable \"%1\":" AdvSceneSwitcher.action.variable.askForValuePrompt="Assign value to variable:" AdvSceneSwitcher.action.variable.mathExpression.example="( 1 + 2 * 3 ) / 4" @@ -747,7 +748,7 @@ AdvSceneSwitcher.action.variable.invalidSelection="Invalid selection!" AdvSceneSwitcher.action.variable.actionNoVariableSupport="Getting variable values from %1 actions is not supported!" AdvSceneSwitcher.action.variable.conditionNoVariableSupport="Getting variable values from %1 conditions is not supported!" AdvSceneSwitcher.action.variable.currentSegmentValue="Current value:" -AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}" +AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}" AdvSceneSwitcher.action.variable.entry.substringIndex="Substring start:{{subStringStart}}Substring size:{{subStringSize}}" AdvSceneSwitcher.action.variable.entry.substringRegex="Assign value of{{regexMatchIdx}}match using regular expression:" AdvSceneSwitcher.action.variable.entry.findAndReplace="{{findStr}}{{replaceStr}}" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index f12fac20..52bcaf38 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -652,7 +652,7 @@ AdvSceneSwitcher.action.variable.invalidSelection="无效选择!" AdvSceneSwitcher.action.variable.actionNoVariableSupport="不支持从 %1 个操作获取变量值!" AdvSceneSwitcher.action.variable.conditionNoVariableSupport="不支持从 %1 条件中获取变量值!" AdvSceneSwitcher.action.variable.currentSegmentValue="当前值:" -AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}" +AdvSceneSwitcher.action.variable.entry="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}" AdvSceneSwitcher.action.variable.entry.substringIndex="子字符串开始:{{subStringStart}} 子字符串大小:{{subStringSize}}" AdvSceneSwitcher.action.variable.entry.substringRegex="使用正则表达式为 {{regexMatchIdx}} 匹配的值:" AdvSceneSwitcher.action.variable.entry.findAndReplace="{{findStr}}{{replaceStr}}" diff --git a/src/macro-core/macro-action-variable.cpp b/src/macro-core/macro-action-variable.cpp index 8b8863cb..5b025bbc 100644 --- a/src/macro-core/macro-action-variable.cpp +++ b/src/macro-core/macro-action-variable.cpp @@ -41,6 +41,8 @@ const static std::map actionTypes = { "AdvSceneSwitcher.action.variable.type.mathExpression"}, {MacroActionVariable::Type::USER_INPUT, "AdvSceneSwitcher.action.variable.type.askForValue"}, + {MacroActionVariable::Type::ENV_VARIABLE, + "AdvSceneSwitcher.action.variable.type.environmentVariable"}, }; static void apppend(Variable &var, const std::string &value) @@ -226,6 +228,10 @@ bool MacroActionVariable::PerformAction() var->SetValue(*params.result); return true; } + case Type::ENV_VARIABLE: { + var->SetValue(std::getenv(_envVariableName.c_str())); + return true; + } } return true; @@ -254,6 +260,7 @@ bool MacroActionVariable::Save(obs_data_t *obj) const _inputPrompt.Save(obj, "inputPrompt"); obs_data_set_bool(obj, "useInputPlaceholder", _useInputPlaceholder); _inputPlaceholder.Save(obj, "inputPlaceholder"); + _envVariableName.Save(obj, "environmentVariableName"); return true; } @@ -280,6 +287,7 @@ bool MacroActionVariable::Load(obs_data_t *obj) _inputPrompt.Load(obj, "inputPrompt"); _useInputPlaceholder = obs_data_get_bool(obj, "useInputPlaceholder"); _inputPlaceholder.Load(obj, "inputPlaceholder"); + _envVariableName.Load(obj, "environmentVariableName"); return true; } @@ -404,7 +412,8 @@ MacroActionVariableEdit::MacroActionVariableEdit( _inputPrompt(new VariableLineEdit(this)), _placeholderLayout(new QHBoxLayout()), _useInputPlaceholder(new QCheckBox()), - _inputPlaceholder(new VariableLineEdit(this)) + _inputPlaceholder(new VariableLineEdit(this)), + _envVariable(new VariableLineEdit(this)) { _numValue->setMinimum(-9999999999); _numValue->setMaximum(9999999999); @@ -463,6 +472,8 @@ MacroActionVariableEdit::MacroActionVariableEdit( SLOT(UseInputPlaceholderChanged(int))); QWidget::connect(_inputPlaceholder, SIGNAL(editingFinished()), this, SLOT(InputPlaceholderChanged())); + QWidget::connect(_envVariable, SIGNAL(editingFinished()), this, + SLOT(EnvVariableChanged())); std::unordered_map widgetPlaceholders = { {"{{variables}}", _variables}, @@ -481,6 +492,7 @@ MacroActionVariableEdit::MacroActionVariableEdit( {"{{inputPrompt}}", _inputPrompt}, {"{{useInputPlaceholder}}", _useInputPlaceholder}, {"{{inputPlaceholder}}", _inputPlaceholder}, + {"{{envVariableName}}", _envVariable}, }; auto entryLayout = new QHBoxLayout; PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.variable.entry"), @@ -572,6 +584,7 @@ void MacroActionVariableEdit::UpdateEntryData() _inputPrompt->setText(_entryData->_inputPrompt); _useInputPlaceholder->setChecked(_entryData->_useInputPlaceholder); _inputPlaceholder->setText(_entryData->_inputPlaceholder); + _envVariable->setText(_entryData->_envVariableName); SetWidgetVisibility(); } @@ -879,6 +892,16 @@ void MacroActionVariableEdit::InputPlaceholderChanged() _entryData->_inputPlaceholder = _inputPlaceholder->text().toStdString(); } +void MacroActionVariableEdit::EnvVariableChanged() +{ + if (_loading || !_entryData) { + return; + } + + auto lock = LockContext(); + _entryData->_envVariableName = _envVariable->text().toStdString(); +} + void MacroActionVariableEdit::SetWidgetVisibility() { if (!_entryData) { @@ -951,6 +974,8 @@ void MacroActionVariableEdit::SetWidgetVisibility() } else { AddStretchIfNecessary(_placeholderLayout); } + _envVariable->setVisible(_entryData->_type == + MacroActionVariable::Type::ENV_VARIABLE); adjustSize(); updateGeometry(); } diff --git a/src/macro-core/macro-action-variable.hpp b/src/macro-core/macro-action-variable.hpp index 56a65142..6d858393 100644 --- a/src/macro-core/macro-action-variable.hpp +++ b/src/macro-core/macro-action-variable.hpp @@ -37,6 +37,7 @@ public: FIND_AND_REPLACE, MATH_EXPRESSION, USER_INPUT, + ENV_VARIABLE, }; Type _type = Type::SET_FIXED_VALUE; @@ -61,6 +62,11 @@ public: bool _useInputPlaceholder = false; StringVariable _inputPlaceholder = obs_module_text("AdvSceneSwitcher.enterText"); +#ifdef _WIN32 + StringVariable _envVariableName = "USERPROFILE"; +#else + StringVariable _envVariableName = "HOME"; +#endif private: void DecrementCurrentSegmentVariableRef(); @@ -112,6 +118,7 @@ private slots: void InputPromptChanged(); void UseInputPlaceholderChanged(int); void InputPlaceholderChanged(); + void EnvVariableChanged(); signals: void HeaderInfoChanged(const QString &); @@ -147,6 +154,7 @@ private: QHBoxLayout *_placeholderLayout; QCheckBox *_useInputPlaceholder; VariableLineEdit *_inputPlaceholder; + VariableLineEdit *_envVariable; std::shared_ptr _entryData; QTimer _timer;