diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index a8d858ab..853fcd51 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1214,8 +1214,8 @@ AdvSceneSwitcher.action.variable.currentSegmentValue="Current value:" AdvSceneSwitcher.action.variable.layout.other="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}{{scenes}}{{tempVars}}{{tempVarsHelp}}{{sceneItemIndex}}{{direction}}{{stringLength}}{{paddingCharSelection}}{{caseType}}{{jsonQuery}}{{jsonQueryHelp}}{{jsonIndex}}" AdvSceneSwitcher.action.variable.layout.pad="{{actions}}of{{variables}}to length{{stringLength}}by adding{{paddingCharSelection}}to the{{direction}}" AdvSceneSwitcher.action.variable.layout.truncate="{{actions}}of{{variables}}to length{{stringLength}}by removing characters from the{{direction}}" -AdvSceneSwitcher.action.variable.layout.substringIndex="Substring start:{{subStringStart}}Substring size:{{subStringSize}}" -AdvSceneSwitcher.action.variable.layout.substringRegex="Assign value of{{regexMatchIdx}}match using regular expression:" +AdvSceneSwitcher.action.variable.layout.substringIndex="Substring start:{{subStringStart}}Substring size:{{subStringSize}}{{subStringRegex}}" +AdvSceneSwitcher.action.variable.layout.substringRegex="Assign value of{{regexMatchIdx}}match using regular expression:{{subStringRegex}}" AdvSceneSwitcher.action.variable.layout.findAndReplace="{{findStr}}{{findRegex}}{{replaceStr}}" AdvSceneSwitcher.action.variable.layout.userInput.customPrompt="{{useCustomPrompt}}Use custom prompt{{inputPrompt}}" AdvSceneSwitcher.action.variable.layout.userInput.placeholder="{{useInputPlaceholder}}Fill with placeholder{{inputPlaceholder}}" diff --git a/data/locale/fr-FR.ini b/data/locale/fr-FR.ini index 25ff5266..22982954 100644 --- a/data/locale/fr-FR.ini +++ b/data/locale/fr-FR.ini @@ -701,8 +701,8 @@ AdvSceneSwitcher.action.variable.invalidSelection="Sélection invalide !" AdvSceneSwitcher.action.variable.actionNoVariableSupport="La récupération de valeurs de variables à partir d'actions %1 n'est pas prise en charge !" AdvSceneSwitcher.action.variable.conditionNoVariableSupport="La récupération de valeurs de variables à partir de conditions %1 n'est pas prise en charge !" AdvSceneSwitcher.action.variable.currentSegmentValue="Valeur actuelle :" -AdvSceneSwitcher.action.variable.layout.substringIndex="Début de la sous-chaîne :{{subStringStart}}Taille de la sous-chaîne :{{subStringSize}}" -AdvSceneSwitcher.action.variable.layout.substringRegex="Attribuer la valeur du match{{regexMatchIdx}}en utilisant une expression régulière :" +AdvSceneSwitcher.action.variable.layout.substringIndex="Début de la sous-chaîne :{{subStringStart}}Taille de la sous-chaîne :{{subStringSize}}{{subStringRegex}}" +AdvSceneSwitcher.action.variable.layout.substringRegex="Attribuer la valeur du match{{regexMatchIdx}}en utilisant une expression régulière:{{subStringRegex}}" AdvSceneSwitcher.action.variable.layout.userInput.customPrompt="{{useCustomPrompt}}Utiliser un message personnalisé{{inputPrompt}}" AdvSceneSwitcher.action.variable.layout.userInput.placeholder="{{useInputPlaceholder}}Remplir avec un indicateur de position{{inputPlaceholder}}" AdvSceneSwitcher.action.projector="Projecteur" diff --git a/data/locale/ja-JP.ini b/data/locale/ja-JP.ini index 99fe6b34..9760de93 100644 --- a/data/locale/ja-JP.ini +++ b/data/locale/ja-JP.ini @@ -1149,8 +1149,8 @@ AdvSceneSwitcher.action.variable.currentSegmentValue="現在値:" ; AdvSceneSwitcher.action.variable.layout.other="{{actions}}{{variables}}{{variables2}}{{strValue}}{{numValue}}{{segmentIndex}}{{mathExpression}}{{envVariableName}}{{scenes}}{{tempVars}}{{tempVarsHelp}}{{sceneItemIndex}}{{direction}}{{stringLength}}{{paddingCharSelection}}" AdvSceneSwitcher.action.variable.layout.pad="{{actions}}の{{variables}}の長さを{{stringLength}}にするには、{{paddingCharSelection}}を{{direction}}に追加します。" AdvSceneSwitcher.action.variable.layout.truncate="{{actions}}の{{variables}}の長さを{{stringLength}}にするには、{{direction}}から文字を削除します。" -AdvSceneSwitcher.action.variable.layout.substringIndex="部分文字列の開始:{{subStringStart}}部分文字列のサイズ:{{subStringSize}}" -AdvSceneSwitcher.action.variable.layout.substringRegex="正規表現を使用して{{regexMatchIdx}}一致の値を割り当てます:" +AdvSceneSwitcher.action.variable.layout.substringIndex="部分文字列の開始:{{subStringStart}}部分文字列のサイズ:{{subStringSize}}{{subStringRegex}}" +AdvSceneSwitcher.action.variable.layout.substringRegex="正規表現を使用して{{regexMatchIdx}}一致の値を割り当てます:{{subStringRegex}}" ; AdvSceneSwitcher.action.variable.layout.findAndReplace="{{findStr}}{{findRegex}}{{replaceStr}}" AdvSceneSwitcher.action.variable.layout.userInput.customPrompt="{{useCustomPrompt}}カスタム プロンプトを使用する{{inputPrompt}}" AdvSceneSwitcher.action.variable.layout.userInput.placeholder="{{useInputPlaceholder}}プレースホルダーを入力{{inputPlaceholder}}" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index 8bd04757..2ab15fc8 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -1030,8 +1030,8 @@ AdvSceneSwitcher.action.variable.conditionNoVariableSupport="Obter valores de va AdvSceneSwitcher.action.variable.currentSegmentValue="Valor atual:" AdvSceneSwitcher.action.variable.layout.pad="{{actions}}de{{variables}}para comprimento{{stringLength}}adicionando{{paddingCharSelection}}ao{{direction}}" AdvSceneSwitcher.action.variable.layout.truncate="{{actions}}de{{variables}}para comprimento{{stringLength}}removendo caracteres da{{direction}}" -AdvSceneSwitcher.action.variable.layout.substringIndex="Início da substring:{{subStringStart}}Tamanho da substring:{{subStringSize}}" -AdvSceneSwitcher.action.variable.layout.substringRegex="Atribuir valor do{{regexMatchIdx}}correspondência usando expressão regular:" +AdvSceneSwitcher.action.variable.layout.substringIndex="Início da substring:{{subStringStart}}Tamanho da substring:{{subStringSize}}{{subStringRegex}}" +AdvSceneSwitcher.action.variable.layout.substringRegex="Atribuir valor do{{regexMatchIdx}}correspondência usando expressão regular:{{subStringRegex}}" AdvSceneSwitcher.action.variable.layout.findAndReplace="{{findStr}}{{findRegex}}{{replaceStr}}" AdvSceneSwitcher.action.variable.layout.userInput.customPrompt="{{useCustomPrompt}}Usar prompt personalizado{{inputPrompt}}" AdvSceneSwitcher.action.variable.layout.userInput.placeholder="{{useInputPlaceholder}}Preencher com placeholder{{inputPlaceholder}}" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index 9dde389d..40dbf819 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -1100,8 +1100,8 @@ AdvSceneSwitcher.action.variable.conditionNoVariableSupport="不支持从 %1 条 AdvSceneSwitcher.action.variable.currentSegmentValue="当前值:" AdvSceneSwitcher.action.variable.layout.pad="{{actions}}于{{variables}}的{{direction}}起,内容为{{paddingCharSelection}}将其变量值长度增加至{{stringLength}}." AdvSceneSwitcher.action.variable.layout.truncate="{{actions}}于{{variables}}的{{direction}}起,将变量长度缩减至{{stringLength}}" -AdvSceneSwitcher.action.variable.layout.substringIndex="截取字符串开始位置:{{subStringStart}} 截取字符串长度:{{subStringSize}}" -AdvSceneSwitcher.action.variable.layout.substringRegex="使用正则表达式为 {{regexMatchIdx}} 匹配的值:" +AdvSceneSwitcher.action.variable.layout.substringIndex="截取字符串开始位置:{{subStringStart}} 截取字符串长度:{{subStringSize}}{{subStringRegex}}" +AdvSceneSwitcher.action.variable.layout.substringRegex="使用正则表达式为 {{regexMatchIdx}} 匹配的值:{{subStringRegex}}" AdvSceneSwitcher.action.variable.layout.findAndReplace="{{findStr}}{{findRegex}}{{replaceStr}}" AdvSceneSwitcher.action.variable.layout.userInput.customPrompt="{{useCustomPrompt}}使用自定义提示{{inputPrompt}}" AdvSceneSwitcher.action.variable.layout.userInput.placeholder="{{useInputPlaceholder}}用占位符填充{{inputPlaceholder}}" diff --git a/lib/macro/macro-action-variable.cpp b/lib/macro/macro-action-variable.cpp index fa44eeca..d2908afc 100644 --- a/lib/macro/macro-action-variable.cpp +++ b/lib/macro/macro-action-variable.cpp @@ -801,11 +801,10 @@ MacroActionVariableEdit::MacroActionVariableEdit( _segmentValueStatus(new QLabel()), _segmentValue(new ResizingPlainTextEdit(this, 10, 1, 1)), _substringLayout(new QVBoxLayout()), - _subStringIndexEntryLayout(new QHBoxLayout()), - _subStringRegexEntryLayout(new QHBoxLayout()), + _subStringControlsLayout(new QHBoxLayout()), _subStringStart(new VariableSpinBox(this)), _subStringSize(new VariableSpinBox(this)), - _substringRegex(new RegexConfigWidget(parent)), + _subStringRegex(new RegexConfigWidget(parent)), _regexPattern(new ResizingPlainTextEdit(this, 10, 1, 1)), _regexMatchIdx(new VariableSpinBox(this)), _findReplaceLayout(new QHBoxLayout()), @@ -901,7 +900,7 @@ MacroActionVariableEdit::MacroActionVariableEdit( _subStringSize, SIGNAL(NumberVariableChanged(const NumberVariable &)), this, SLOT(SubStringSizeChanged(const NumberVariable &))); - QWidget::connect(_substringRegex, + QWidget::connect(_subStringRegex, SIGNAL(RegexConfigChanged(const RegexConfig &)), this, SLOT(SubStringRegexChanged(const RegexConfig &))); QWidget::connect(_regexPattern, SIGNAL(textChanged()), this, @@ -975,9 +974,6 @@ MacroActionVariableEdit::MacroActionVariableEdit( {"{{strValue}}", _strValue}, {"{{numValue}}", _numValue}, {"{{segmentIndex}}", _segmentIdx}, - {"{{subStringStart}}", _subStringStart}, - {"{{subStringSize}}", _subStringSize}, - {"{{regexMatchIdx}}", _regexMatchIdx}, {"{{findRegex}}", _findRegex}, {"{{findStr}}", _findStr}, {"{{replaceStr}}", _replaceStr}, @@ -1009,12 +1005,7 @@ MacroActionVariableEdit::MacroActionVariableEdit( PlaceWidgets( obs_module_text( "AdvSceneSwitcher.action.variable.layout.substringIndex"), - _subStringIndexEntryLayout, widgetPlaceholders); - - PlaceWidgets( - obs_module_text( - "AdvSceneSwitcher.action.variable.layout.substringRegex"), - _subStringRegexEntryLayout, widgetPlaceholders); + _subStringControlsLayout, widgetPlaceholders); PlaceWidgets( obs_module_text( @@ -1039,11 +1030,10 @@ MacroActionVariableEdit::MacroActionVariableEdit( _randomLayout->addWidget(_generateInteger); auto regexConfigLayout = new QHBoxLayout; - regexConfigLayout->addWidget(_substringRegex); + regexConfigLayout->addWidget(_subStringRegex); regexConfigLayout->addStretch(); - _substringLayout->addLayout(_subStringIndexEntryLayout); - _substringLayout->addLayout(_subStringRegexEntryLayout); + _substringLayout->addLayout(_subStringControlsLayout); _substringLayout->addWidget(_regexPattern); _substringLayout->addLayout(regexConfigLayout); @@ -1090,7 +1080,7 @@ void MacroActionVariableEdit::UpdateEntryData() : MacroSegmentSelection::Type::ACTION); _subStringStart->SetValue(_entryData->_subStringStart); _subStringSize->SetValue(_entryData->_subStringSize); - _substringRegex->SetRegexConfig(_entryData->_subStringRegex); + _subStringRegex->SetRegexConfig(_entryData->_subStringRegex); _findRegex->SetRegexConfig(_entryData->_findRegex); _regexPattern->setPlainText( QString::fromStdString(_entryData->_regexPattern)); @@ -1495,8 +1485,20 @@ void MacroActionVariableEdit::SetWidgetVisibility() {"{{jsonQuery}}", _jsonQuery}, {"{{jsonQueryHelp}}", _jsonQueryHelp}, {"{{jsonIndex}}", _jsonIndex}, + {"{{subStringRegex}}", _subStringRegex}, + {"{{subStringStart}}", _subStringStart}, + {"{{subStringSize}}", _subStringSize}, + {"{{regexMatchIdx}}", _regexMatchIdx}, }; + for (const auto &[_, widget] : widgetPlaceholders) { + _entryLayout->removeWidget(widget); + _subStringControlsLayout->removeWidget(widget); + } + + ClearLayout(_entryLayout); + ClearLayout(_subStringControlsLayout); + const char *layoutString = ""; if (_entryData->_action == MacroActionVariable::Action::PAD) { layoutString = obs_module_text( @@ -1510,11 +1512,6 @@ void MacroActionVariableEdit::SetWidgetVisibility() "AdvSceneSwitcher.action.variable.layout.other"); } - for (const auto &[_, widget] : widgetPlaceholders) { - _entryLayout->removeWidget(widget); - } - - ClearLayout(_entryLayout); PlaceWidgets(layoutString, _entryLayout, widgetPlaceholders); if (_entryData->_action == MacroActionVariable::Action::SET_VALUE || @@ -1561,15 +1558,25 @@ void MacroActionVariableEdit::SetWidgetVisibility() MacroActionVariable::Action::SET_ACTION_VALUE || _entryData->_action == MacroActionVariable::Action::SET_CONDITION_VALUE); + + bool showRegex = _entryData->_subStringRegex.Enabled(); + layoutString = + showRegex + ? "AdvSceneSwitcher.action.variable.layout.substringRegex" + : "AdvSceneSwitcher.action.variable.layout.substringIndex"; + PlaceWidgets(obs_module_text(layoutString), _subStringControlsLayout, + widgetPlaceholders); + _subStringStart->setVisible(!showRegex); + _subStringSize->setVisible(!showRegex); + _regexMatchIdx->setVisible(showRegex); + SetLayoutVisible(_substringLayout, _entryData->_action == MacroActionVariable::Action::SUBSTRING); - if (_entryData->_action == MacroActionVariable::Action::SUBSTRING) { - bool showRegex = _entryData->_subStringRegex.Enabled(); - SetLayoutVisible(_subStringIndexEntryLayout, !showRegex); - SetLayoutVisible(_subStringRegexEntryLayout, showRegex); - _regexPattern->setVisible(showRegex); - } + _regexPattern->setVisible( + showRegex && + _entryData->_action == MacroActionVariable::Action::SUBSTRING); + SetLayoutVisible(_findReplaceLayout, _entryData->_action == MacroActionVariable::Action::FIND_AND_REPLACE); diff --git a/lib/macro/macro-action-variable.hpp b/lib/macro/macro-action-variable.hpp index 9d9f1bf5..2a5bb153 100644 --- a/lib/macro/macro-action-variable.hpp +++ b/lib/macro/macro-action-variable.hpp @@ -194,11 +194,10 @@ private: QLabel *_segmentValueStatus; ResizingPlainTextEdit *_segmentValue; QVBoxLayout *_substringLayout; - QHBoxLayout *_subStringIndexEntryLayout; - QHBoxLayout *_subStringRegexEntryLayout; + QHBoxLayout *_subStringControlsLayout; VariableSpinBox *_subStringStart; VariableSpinBox *_subStringSize; - RegexConfigWidget *_substringRegex; + RegexConfigWidget *_subStringRegex; ResizingPlainTextEdit *_regexPattern; VariableSpinBox *_regexMatchIdx; QHBoxLayout *_findReplaceLayout;