diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index f3dbdcc8..0e1e2a12 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -321,8 +321,8 @@ AdvSceneSwitcher.condition.date.entry.nextMatchDate="Nächster Treffer bei: %1" AdvSceneSwitcher.condition.date.entry.updateOnRepeat="{{updateOnRepeat}} Bei Wiederholung ausgewähltes Datum auf Wiederholungsdatum aktualisieren" AdvSceneSwitcher.condition.sceneTransform="Szenenelement transformieren" AdvSceneSwitcher.condition.sceneTransform.getTransform="Transformation erhalten" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="entspricht Transformation" -AdvSceneSwitcher.condition.sceneTransform.entry.type.changed="hat sich geändert" +AdvSceneSwitcher.condition.sceneTransform.condition.match="entspricht Transformation" +AdvSceneSwitcher.condition.sceneTransform.condition.changed="hat sich geändert" AdvSceneSwitcher.condition.transition="Übergang" AdvSceneSwitcher.condition.transition.type.current="Aktueller Übergangstyp ist" AdvSceneSwitcher.condition.transition.type.duration="Aktuelle Übergangsdauer beträgt" @@ -495,7 +495,7 @@ AdvSceneSwitcher.action.sceneOrder.type.movePosition="An Position verschieben" AdvSceneSwitcher.action.sceneOrder.entry="Auf{{scenes}}{{actions}}{{sources}}{{position}}" AdvSceneSwitcher.action.sceneTransform="Szenenelement transformieren" AdvSceneSwitcher.action.sceneTransform.getTransform="Transformation erhalten" -AdvSceneSwitcher.action.sceneTransform.entry="Auf{{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.entry="Auf{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="Datei" AdvSceneSwitcher.action.file.type.write="Schreiben" AdvSceneSwitcher.action.file.type.append="Anhängen" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 77dbd934..c0882b26 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -910,7 +910,8 @@ AdvSceneSwitcher.action.sceneOrder.type.moveBottom="Move to bottom" AdvSceneSwitcher.action.sceneOrder.type.movePosition="Move to position" AdvSceneSwitcher.action.sceneOrder.entry="On{{scenes}}{{actions}}{{sources}}{{position}}" AdvSceneSwitcher.action.sceneTransform="Scene item transform" -AdvSceneSwitcher.action.sceneTransform.type.manual="Transform" +AdvSceneSwitcher.action.sceneTransform.type.manual="Set transform string" +AdvSceneSwitcher.action.sceneTransform.type.setSingleSetting="Set transform setting" AdvSceneSwitcher.action.sceneTransform.type.reset="Reset transform" AdvSceneSwitcher.action.sceneTransform.type.rotate="Rotate by" AdvSceneSwitcher.action.sceneTransform.type.flipHorizontal="Flip horizontally" @@ -921,7 +922,8 @@ AdvSceneSwitcher.action.sceneTransform.type.centerToScreen="Center to screen" AdvSceneSwitcher.action.sceneTransform.type.centerVertically="Center vertically" AdvSceneSwitcher.action.sceneTransform.type.centerHorizontally="Center horizontally" AdvSceneSwitcher.action.sceneTransform.getTransform="Get transform" -AdvSceneSwitcher.action.sceneTransform.entry="On{{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.getCurrentValue="Get current value" +AdvSceneSwitcher.action.sceneTransform.entry="On{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="File" AdvSceneSwitcher.action.file.type.write="Write" AdvSceneSwitcher.action.file.type.append="Append" diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 173d5240..4d147368 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -269,7 +269,7 @@ AdvSceneSwitcher.condition.date.entry.nextMatchDate="Próxima coincidencia en: % AdvSceneSwitcher.condition.date.entry.updateOnRepeat="{{updateOnRepeat}} Al repetir actualizar la fecha seleccionada para repetir la fecha" AdvSceneSwitcher.condition.sceneTransform="Transformar elemento de escena" AdvSceneSwitcher.condition.sceneTransform.getTransform="Obtener transformación" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="coincide con la transformación" +AdvSceneSwitcher.condition.sceneTransform.condition.match="coincide con la transformación" AdvSceneSwitcher.condition.transition="Transición" AdvSceneSwitcher.condition.transition.type.current="El tipo de transición actual es" AdvSceneSwitcher.condition.transition.type.duration="La duración de la transición actual es" @@ -412,7 +412,7 @@ AdvSceneSwitcher.action.sceneOrder.type.movePosition="Mover a la posición" AdvSceneSwitcher.action.sceneOrder.entry="En{{scenes}}{{actions}}{{sources}}{{position}}" AdvSceneSwitcher.action.sceneTransform="Transformar elemento de escena" AdvSceneSwitcher.action.sceneTransform.getTransform="Obtener transformación" -AdvSceneSwitcher.action.sceneTransform.entry="En{{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.entry="En{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="Archivo" AdvSceneSwitcher.action.file.type.write="Escribir" AdvSceneSwitcher.action.file.type.append="Agregar" diff --git a/data/locale/fr-FR.ini b/data/locale/fr-FR.ini index 152b6f78..c5d27ccd 100644 --- a/data/locale/fr-FR.ini +++ b/data/locale/fr-FR.ini @@ -382,7 +382,7 @@ AdvSceneSwitcher.condition.date.entry.nextMatchDate="Prochaine correspondance à AdvSceneSwitcher.condition.date.entry.updateOnRepeat="{{updateOnRepeat}}À la répétition, mettre à jour la date sélectionnée pour la date de répétition" AdvSceneSwitcher.condition.sceneTransform="Transformation de l'élément de la scène" AdvSceneSwitcher.condition.sceneTransform.getTransform="Obtenir la transformation" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="correspond à la transformation" +AdvSceneSwitcher.condition.sceneTransform.condition.match="correspond à la transformation" AdvSceneSwitcher.condition.transition="Transition" AdvSceneSwitcher.condition.transition.type.current="Le type de transition actuel est" AdvSceneSwitcher.condition.transition.type.duration="La durée de la transition actuelle est" @@ -610,7 +610,7 @@ AdvSceneSwitcher.action.sceneTransform.type.centerToScreen="Centrer à l'écran" AdvSceneSwitcher.action.sceneTransform.type.centerVertically="Centrer verticalement" AdvSceneSwitcher.action.sceneTransform.type.centerHorizontally="Centrer horizontalement" AdvSceneSwitcher.action.sceneTransform.getTransform="Obtenir la transformation" -AdvSceneSwitcher.action.sceneTransform.entry="Sur{{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.entry="Sur{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="Fichier" AdvSceneSwitcher.action.file.type.write="Écrire" AdvSceneSwitcher.action.file.type.append="Ajouter" diff --git a/data/locale/ja-JP.ini b/data/locale/ja-JP.ini index e72e4686..1adf4b92 100644 --- a/data/locale/ja-JP.ini +++ b/data/locale/ja-JP.ini @@ -531,8 +531,8 @@ AdvSceneSwitcher.condition.date.entry.pattern="現在の日付「{{currentDate}} AdvSceneSwitcher.condition.date.entry.updateOnRepeat="{{updateOnRepeat}}繰り返しの場合、選択した日付を繰り返しの日付に更新します" ; AdvSceneSwitcher.condition.sceneTransform="Scene item transform" ; AdvSceneSwitcher.condition.sceneTransform.getTransform="Get transform" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="マッチトランスフォーム" -AdvSceneSwitcher.condition.sceneTransform.entry.type.changed="変わりました" +AdvSceneSwitcher.condition.sceneTransform.condition.match="マッチトランスフォーム" +AdvSceneSwitcher.condition.sceneTransform.condition.changed="変わりました" ; AdvSceneSwitcher.condition.transition="Transition" ; AdvSceneSwitcher.condition.transition.type.current="Current transition type is" AdvSceneSwitcher.condition.transition.type.duration="Current transition duration is" @@ -900,7 +900,6 @@ AdvSceneSwitcher.action.sceneTransform.type.centerToScreen="画面中央から" AdvSceneSwitcher.action.sceneTransform.type.centerVertically="縦方向中央に配置" AdvSceneSwitcher.action.sceneTransform.type.centerHorizontally="水平方向に中央揃え" AdvSceneSwitcher.action.sceneTransform.getTransform="変形を取得" -; AdvSceneSwitcher.action.sceneTransform.entry="On{{scenes}}{{action}}{{rotation}}{{sources}}" AdvSceneSwitcher.action.file="ファイル" ; AdvSceneSwitcher.action.file.type.write="Write" ; AdvSceneSwitcher.action.file.type.append="Append" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index 873a6c28..4f8f32be 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -226,7 +226,7 @@ AdvSceneSwitcher.condition.date.state.before="Önce" AdvSceneSwitcher.condition.date.state.between="Arasında" AdvSceneSwitcher.condition.sceneTransform="Sahne öğesi dönüşümü" AdvSceneSwitcher.condition.sceneTransform.getTransform="Dönüşümü al" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="dönüşümle eşleşir" +AdvSceneSwitcher.condition.sceneTransform.condition.match="dönüşümle eşleşir" AdvSceneSwitcher.condition.transition="Geçiş" AdvSceneSwitcher.condition.transition.type.current="Geçerli geçiş türü" AdvSceneSwitcher.condition.transition.type.duration="Mevcut geçiş süresi" @@ -341,7 +341,7 @@ AdvSceneSwitcher.action.sceneOrder.type.movePosition="Konuma taşı" AdvSceneSwitcher.action.sceneOrder.entry="Açık{{scenes}}{{actions}}{{sources}}{{position}}" AdvSceneSwitcher.action.sceneTransform="Sahne öğesi dönüşümü" AdvSceneSwitcher.action.sceneTransform.getTransform="Dönüşümü al" -AdvSceneSwitcher.action.sceneTransform.entry="Açık{{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.entry="Açık{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="Dosya" AdvSceneSwitcher.action.file.type.write="Yaz" AdvSceneSwitcher.action.file.type.append="Ekle" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index 857a9db1..f50b0b5d 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -365,7 +365,7 @@ AdvSceneSwitcher.condition.date.entry.nextMatchDate="下一次匹配 在: %1" AdvSceneSwitcher.condition.date.entry.updateOnRepeat="{{updateOnRepeat}} 重复时,将选定的日期更新为重复日期" AdvSceneSwitcher.condition.sceneTransform="场景项目被改变" AdvSceneSwitcher.condition.sceneTransform.getTransform="内容或者设置被改变了" -AdvSceneSwitcher.condition.sceneTransform.entry.type.matches="匹配变换" +AdvSceneSwitcher.condition.sceneTransform.condition.match="匹配变换" AdvSceneSwitcher.condition.transition="转场" AdvSceneSwitcher.condition.transition.type.current="当前转场特效类型为" AdvSceneSwitcher.condition.transition.type.duration="当前转场特效持续时间为" @@ -552,7 +552,7 @@ AdvSceneSwitcher.action.sceneOrder.type.movePosition="移动到数值位置" AdvSceneSwitcher.action.sceneOrder.entry="在 {{scenes}} {{actions}} {{sources}} {{position}}" AdvSceneSwitcher.action.sceneTransform="场景项目转换" AdvSceneSwitcher.action.sceneTransform.getTransform="获得转换" -AdvSceneSwitcher.action.sceneTransform.entry="在 {{scenes}}{{action}}{{rotation}}{{sources}}" +AdvSceneSwitcher.action.sceneTransform.entry="在{{scenes}}{{action}}{{rotation}}{{sources}}{{settingSelection}}{{singleSettingValue}}" AdvSceneSwitcher.action.file="文件" AdvSceneSwitcher.action.file.type.write="写入" AdvSceneSwitcher.action.file.type.append="追加写入" diff --git a/plugins/base/macro-action-scene-transform.cpp b/plugins/base/macro-action-scene-transform.cpp index 22d09c27..ae0dda2e 100644 --- a/plugins/base/macro-action-scene-transform.cpp +++ b/plugins/base/macro-action-scene-transform.cpp @@ -18,6 +18,8 @@ bool MacroActionSceneTransform::_registered = MacroActionFactory::Register( const static std::map actions = { {MacroActionSceneTransform::Action::MANUAL_TRANSFORM, "AdvSceneSwitcher.action.sceneTransform.type.manual"}, + {MacroActionSceneTransform::Action::SINGLE_TRANSFORM_SETTING, + "AdvSceneSwitcher.action.sceneTransform.type.setSingleSetting"}, {MacroActionSceneTransform::Action::RESET, "AdvSceneSwitcher.action.sceneTransform.type.reset"}, {MacroActionSceneTransform::Action::ROTATE, @@ -200,49 +202,52 @@ void MacroActionSceneTransform::Transform(obs_scene_item *item) } switch (_action) { - case MacroActionSceneTransform::Action::RESET: + case Action::RESET: obs_sceneitem_defer_update_begin(item); reset(item); obs_sceneitem_defer_update_end(item); break; - case MacroActionSceneTransform::Action::ROTATE: + case Action::ROTATE: rotate(item, _rotation); break; - case MacroActionSceneTransform::Action::FLIP_HORIZONTAL: { + case Action::FLIP_HORIZONTAL: { vec2 scale; vec2_set(&scale, -1.0f, 1.0f); flip(item, scale); break; } - case MacroActionSceneTransform::Action::FLIP_VERTICAL: { + case Action::FLIP_VERTICAL: { vec2 scale; vec2_set(&scale, 1.0f, -1.0f); flip(item, scale); break; } - case MacroActionSceneTransform::Action::FIT_TO_SCREEN: + case Action::FIT_TO_SCREEN: centerAlign(item, OBS_BOUNDS_SCALE_INNER); break; - case MacroActionSceneTransform::Action::STRETCH_TO_SCREEN: + case Action::STRETCH_TO_SCREEN: centerAlign(item, OBS_BOUNDS_STRETCH); break; - case MacroActionSceneTransform::Action::CENTER_TO_SCREEN: + case Action::CENTER_TO_SCREEN: center(item, CenterType::SCREEN); break; - case MacroActionSceneTransform::Action::CENTER_VERTICALLY: + case Action::CENTER_VERTICALLY: center(item, CenterType::VERTICAL); break; - case MacroActionSceneTransform::Action::CENTER_HORIZONTALLY: + case Action::CENTER_HORIZONTALLY: center(item, CenterType::HORIZONTAL); break; - case MacroActionSceneTransform::Action::MANUAL_TRANSFORM: - ApplySettings(_settings); // Resolves variables + case Action::MANUAL_TRANSFORM: + ApplySettings(_transformString); // Resolves variables obs_sceneitem_defer_update_begin(item); obs_sceneitem_set_info(item, &_info); obs_sceneitem_set_crop(item, &_crop); obs_sceneitem_defer_update_end(item); break; + case Action::SINGLE_TRANSFORM_SETTING: + SetTransformSetting(item, _settingSelection, + _singleSettingsValue); } } @@ -270,7 +275,9 @@ bool MacroActionSceneTransform::Save(obs_data_t *obj) const _scene.Save(obj); _source.Save(obj); _rotation.Save(obj, "rotation"); - _settings.Save(obj, "settings"); + _transformString.Save(obj, "settings"); + _singleSettingsValue.Save(obj, "singleSettingsValue"); + _settingSelection.Save(obj); return true; } @@ -293,13 +300,15 @@ bool MacroActionSceneTransform::Load(obs_data_t *obj) _scene.Load(obj); _source.Load(obj); _rotation.Load(obj, "rotation"); - _settings.Load(obj, "settings"); + _transformString.Load(obj, "settings"); + _singleSettingsValue.Load(obj, "singleSettingsValue"); + _settingSelection.Load(obj); // Convert old data format // TODO: Remove in future version if (!obs_data_has_user_value(obj, "settings")) { LoadTransformState(obj, _info, _crop); - _settings = ConvertSettings(); + _transformString = ConvertSettings(); } return true; } @@ -326,8 +335,9 @@ void MacroActionSceneTransform::ResolveVariablesToFixedValues() { _scene.ResolveVariables(); _source.ResolveVariables(); - _settings.ResolveVariables(); + _transformString.ResolveVariables(); _rotation.ResolveVariables(); + _singleSettingsValue.ResolveVariables(); } std::string MacroActionSceneTransform::ConvertSettings() @@ -381,9 +391,13 @@ MacroActionSceneTransformEdit::MacroActionSceneTransformEdit( _sources(new SceneItemSelectionWidget(parent)), _action(new QComboBox()), _rotation(new VariableDoubleSpinBox()), - _getSettings(new QPushButton(obs_module_text( + _getTransform(new QPushButton(obs_module_text( "AdvSceneSwitcher.action.sceneTransform.getTransform"))), - _settings(new VariableTextEdit(this)), + _getCurrentValue(new QPushButton(obs_module_text( + "AdvSceneSwitcher.action.sceneTransform.getCurrentValue"))), + _transformString(new VariableTextEdit(this)), + _settingSelection(new TransformSettingSelection(this)), + _singleSettingValue(new VariableLineEdit(this)), _buttonLayout(new QHBoxLayout()) { _rotation->setMinimum(-360); @@ -405,28 +419,40 @@ MacroActionSceneTransformEdit::MacroActionSceneTransformEdit( _rotation, SIGNAL(NumberVariableChanged(const NumberVariable &)), this, SLOT(RotationChanged(const NumberVariable &))); - QWidget::connect(_getSettings, SIGNAL(clicked()), this, + QWidget::connect(_getTransform, SIGNAL(clicked()), this, SLOT(GetSettingsClicked())); - QWidget::connect(_settings, SIGNAL(textChanged()), this, - SLOT(SettingsChanged())); + QWidget::connect(_getCurrentValue, SIGNAL(clicked()), this, + SLOT(GetCurrentValueClicked())); + QWidget::connect(_transformString, SIGNAL(textChanged()), this, + SLOT(TransformStringChanged())); + QWidget::connect(_singleSettingValue, SIGNAL(editingFinished()), this, + SLOT(SettingValueChanged())); + QWidget::connect( + _settingSelection, + SIGNAL(SelectionChanged(const TransformSetting &)), this, + SLOT(SettingSelectionChanged(const TransformSetting &))); QHBoxLayout *entryLayout = new QHBoxLayout; std::unordered_map widgetPlaceholders = { - {"{{scenes}}", _scenes}, {"{{rotation}}", _rotation}, - {"{{sources}}", _sources}, {"{{action}}", _action}, - {"{{settings}}", _settings}, {"{{getSettings}}", _getSettings}, + {"{{scenes}}", _scenes}, + {"{{rotation}}", _rotation}, + {"{{sources}}", _sources}, + {"{{action}}", _action}, + {"{{settingSelection}}", _settingSelection}, + {"{{singleSettingValue}}", _singleSettingValue}, }; PlaceWidgets( obs_module_text("AdvSceneSwitcher.action.sceneTransform.entry"), entryLayout, widgetPlaceholders); - _buttonLayout->addWidget(_getSettings); + _buttonLayout->addWidget(_getTransform); + _buttonLayout->addWidget(_getCurrentValue); _buttonLayout->addStretch(); - QVBoxLayout *mainLayout = new QVBoxLayout; + auto mainLayout = new QVBoxLayout; mainLayout->addLayout(entryLayout); - mainLayout->addWidget(_settings); + mainLayout->addWidget(_transformString); mainLayout->addLayout(_buttonLayout); setLayout(mainLayout); @@ -446,28 +472,31 @@ void MacroActionSceneTransformEdit::UpdateEntryData() _action->setCurrentIndex( _action->findData(static_cast(_entryData->_action))); _rotation->SetValue(_entryData->_rotation); - _settings->setPlainText(_entryData->_settings); + _transformString->setPlainText(_entryData->_transformString); + UpdateSettingSelection(); + _settingSelection->SetSetting(_entryData->_settingSelection); + _singleSettingValue->setText(_entryData->_singleSettingsValue); SetWidgetVisibility(); } void MacroActionSceneTransformEdit::SceneChanged(const SceneSelection &s) { - if (_loading || !_entryData) { - return; + { + GUARD_LOADING_AND_LOCK(); + _entryData->_scene = s; } - auto lock = LockContext(); - _entryData->_scene = s; + UpdateSettingSelection(); } void MacroActionSceneTransformEdit::SourceChanged(const SceneItemSelection &item) { - if (_loading || !_entryData) { - return; + { + GUARD_LOADING_AND_LOCK(); + _entryData->_source = item; } - auto lock = LockContext(); - _entryData->_source = item; + UpdateSettingSelection(); emit HeaderInfoChanged( QString::fromStdString(_entryData->GetShortDesc())); adjustSize(); @@ -476,11 +505,7 @@ void MacroActionSceneTransformEdit::SourceChanged(const SceneItemSelection &item void MacroActionSceneTransformEdit::ActionChanged(int idx) { - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); + GUARD_LOADING_AND_LOCK(); _entryData->_action = static_cast( _action->itemData(idx).toInt()); SetWidgetVisibility(); @@ -488,11 +513,7 @@ void MacroActionSceneTransformEdit::ActionChanged(int idx) void MacroActionSceneTransformEdit::RotationChanged(const DoubleVariable &value) { - if (_loading || !_entryData) { - return; - } - - auto lock = LockContext(); + GUARD_LOADING_AND_LOCK(); _entryData->_rotation = value; } @@ -508,17 +529,52 @@ void MacroActionSceneTransformEdit::GetSettingsClicked() } auto settings = GetSceneItemTransform(items[0]); - _settings->setPlainText(FormatJsonString(settings)); + _transformString->setPlainText(FormatJsonString(settings)); } -void MacroActionSceneTransformEdit::SettingsChanged() +void MacroActionSceneTransformEdit::GetCurrentValueClicked() { - if (_loading || !_entryData) { + if (_loading || !_entryData || !_entryData->_scene.GetScene(false)) { return; } - auto lock = LockContext(); - _entryData->_settings = _settings->toPlainText().toStdString(); + auto items = _entryData->_source.GetSceneItems(_entryData->_scene); + if (items.empty()) { + return; + } + + auto value = GetTransformSettingValue(items.at(0), + _entryData->_settingSelection); + if (!value) { + return; + } + + _singleSettingValue->setText(QString::fromStdString(*value)); + SettingValueChanged(); +} + +void MacroActionSceneTransformEdit::TransformStringChanged() +{ + GUARD_LOADING_AND_LOCK(); + _entryData->_transformString = + _transformString->toPlainText().toStdString(); + + adjustSize(); + updateGeometry(); +} + +void MacroActionSceneTransformEdit::SettingSelectionChanged( + const TransformSetting &setting) +{ + GUARD_LOADING_AND_LOCK(); + _entryData->_settingSelection = setting; +} + +void MacroActionSceneTransformEdit::SettingValueChanged() +{ + GUARD_LOADING_AND_LOCK(); + _entryData->_singleSettingsValue = + _singleSettingValue->text().toStdString(); adjustSize(); updateGeometry(); @@ -530,13 +586,39 @@ void MacroActionSceneTransformEdit::SetWidgetVisibility() _buttonLayout, _entryData->_action == MacroActionSceneTransform::Action::MANUAL_TRANSFORM); - _settings->setVisible( + _transformString->setVisible( _entryData->_action == MacroActionSceneTransform::Action::MANUAL_TRANSFORM); _rotation->setVisible(_entryData->_action == MacroActionSceneTransform::Action::ROTATE); + _getTransform->setVisible( + _entryData->_action == + MacroActionSceneTransform::Action::MANUAL_TRANSFORM); + _getCurrentValue->setVisible( + _entryData->_action == + MacroActionSceneTransform::Action::SINGLE_TRANSFORM_SETTING); + _settingSelection->setVisible( + _entryData->_action == + MacroActionSceneTransform::Action::SINGLE_TRANSFORM_SETTING); + _singleSettingValue->setVisible( + _entryData->_action == + MacroActionSceneTransform::Action::SINGLE_TRANSFORM_SETTING); adjustSize(); updateGeometry(); } +void MacroActionSceneTransformEdit::UpdateSettingSelection() const +{ + if (!_entryData) { + _settingSelection->SetSource(nullptr); + return; + } + auto items = _entryData->_source.GetSceneItems(_entryData->_scene); + if (items.empty()) { + _settingSelection->SetSource(nullptr); + return; + } + _settingSelection->SetSource(items.at(0)); +} + } // namespace advss diff --git a/plugins/base/macro-action-scene-transform.hpp b/plugins/base/macro-action-scene-transform.hpp index 08a7de58..d9f18657 100644 --- a/plugins/base/macro-action-scene-transform.hpp +++ b/plugins/base/macro-action-scene-transform.hpp @@ -2,6 +2,7 @@ #include "macro-action-edit.hpp" #include "scene-selection.hpp" #include "scene-item-selection.hpp" +#include "transform-setting.hpp" #include "variable-text-edit.hpp" #include "variable-spinbox.hpp" @@ -33,13 +34,16 @@ public: CENTER_VERTICALLY, CENTER_HORIZONTALLY, MANUAL_TRANSFORM = 100, + SINGLE_TRANSFORM_SETTING, }; Action _action = Action::RESET; SceneSelection _scene; SceneItemSelection _source; - StringVariable _settings = ""; + StringVariable _transformString = ""; DoubleVariable _rotation = 90.0; + StringVariable _singleSettingsValue = ""; + TransformSetting _settingSelection; private: void Transform(obs_scene_item *); @@ -76,19 +80,26 @@ private slots: void ActionChanged(int); void RotationChanged(const NumberVariable &value); void GetSettingsClicked(); - void SettingsChanged(); + void GetCurrentValueClicked(); + void TransformStringChanged(); + void SettingSelectionChanged(const TransformSetting &); + void SettingValueChanged(); signals: void HeaderInfoChanged(const QString &); private: void SetWidgetVisibility(); + void UpdateSettingSelection() const; SceneSelectionWidget *_scenes; SceneItemSelectionWidget *_sources; QComboBox *_action; VariableDoubleSpinBox *_rotation; - QPushButton *_getSettings; - VariableTextEdit *_settings; + QPushButton *_getTransform; + QPushButton *_getCurrentValue; + VariableTextEdit *_transformString; + TransformSettingSelection *_settingSelection; + VariableLineEdit *_singleSettingValue; QHBoxLayout *_buttonLayout; std::shared_ptr _entryData;