Add option to set individual transform settings

This commit is contained in:
WarmUpTill 2024-06-26 19:03:36 +02:00 committed by WarmUpTill
parent 2160da59f3
commit bfc51b2df5
9 changed files with 165 additions and 71 deletions

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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="追加写入"

View File

@ -18,6 +18,8 @@ bool MacroActionSceneTransform::_registered = MacroActionFactory::Register(
const static std::map<MacroActionSceneTransform::Action, std::string> 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<double> &)),
this, SLOT(RotationChanged(const NumberVariable<double> &)));
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<std::string, QWidget *> 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<int>(_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<MacroActionSceneTransform::Action>(
_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

View File

@ -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<double> &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<MacroActionSceneTransform> _entryData;