From dc7c8cfb4811e11e73cbbf119100aad9fb84a0a6 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Thu, 25 Dec 2025 12:48:52 -0500 Subject: [PATCH] frontend: Move transition preview button to button box --- frontend/dialogs/OBSBasicProperties.cpp | 108 ++++++++++++------------ frontend/dialogs/OBSBasicProperties.hpp | 4 +- frontend/forms/OBSBasicProperties.ui | 55 +++++++++++- 3 files changed, 107 insertions(+), 60 deletions(-) diff --git a/frontend/dialogs/OBSBasicProperties.cpp b/frontend/dialogs/OBSBasicProperties.cpp index 64f864788..f38cc742b 100644 --- a/frontend/dialogs/OBSBasicProperties.cpp +++ b/frontend/dialogs/OBSBasicProperties.cpp @@ -76,7 +76,11 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_) ui->propertiesLayout->addWidget(view); if (type == OBS_SOURCE_TYPE_TRANSITION) { - connect(view, &OBSPropertiesView::PropertiesRefreshed, this, &OBSBasicProperties::AddPreviewButton); + ui->transitionButton->setVisible(true); + connect(ui->transitionButton, &QPushButton::clicked, this, + &OBSBasicProperties::previewTransitionClicked); + } else { + ui->transitionButton->setVisible(false); } view->show(); @@ -147,6 +151,8 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_) } else { ui->preview->hide(); } + + connect(ui->defaultsButton, &QPushButton::clicked, this, &OBSBasicProperties::restoreDefaultsClicked); } OBSBasicProperties::~OBSBasicProperties() @@ -159,37 +165,6 @@ OBSBasicProperties::~OBSBasicProperties() main->UpdateContextBarDeferred(true); } -void OBSBasicProperties::AddPreviewButton() -{ - QPushButton *playButton = new QPushButton(QTStr("PreviewTransition"), this); - VScrollArea *area = view; - area->widget()->layout()->addWidget(playButton); - - playButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - auto play = [this]() { - OBSSource start; - OBSSource end; - - if (direction) { - start = sourceA; - end = sourceB; - } else { - start = sourceB; - end = sourceA; - } - - obs_transition_set(sourceClone, start); - obs_transition_start(sourceClone, OBS_TRANSITION_MODE_AUTO, main->GetTransitionDuration(), end); - direction = !direction; - - start = nullptr; - end = nullptr; - }; - - connect(playButton, &QPushButton::clicked, this, play); -} - static obs_source_t *CreateLabel(const char *name, size_t h) { OBSDataAutoRelease settings = obs_data_create(); @@ -251,6 +226,53 @@ static void CreateTransitionScene(OBSSource scene, const char *text, uint32_t co obs_sceneitem_set_bounds_type(item, OBS_BOUNDS_SCALE_INNER); } +static bool ConfirmReset(QWidget *parent) +{ + QMessageBox::StandardButton button; + + button = OBSMessageBox::question(parent, QTStr("ConfirmReset.Title"), QTStr("ConfirmReset.Text"), + QMessageBox::Yes | QMessageBox::No); + + return button == QMessageBox::Yes; +} + +void OBSBasicProperties::restoreDefaultsClicked() +{ + if (!ConfirmReset(this)) { + return; + } + + OBSDataAutoRelease settings = obs_source_get_settings(source); + obs_data_clear(settings); + + if (!view->DeferUpdate()) { + obs_source_update(source, nullptr); + } + + view->ReloadProperties(); +} + +void OBSBasicProperties::previewTransitionClicked() +{ + OBSSource start; + OBSSource end; + + if (direction) { + start = sourceA; + end = sourceB; + } else { + start = sourceB; + end = sourceA; + } + + obs_transition_set(sourceClone, start); + obs_transition_start(sourceClone, OBS_TRANSITION_MODE_AUTO, main->GetTransitionDuration(), end); + direction = !direction; + + start = nullptr; + end = nullptr; +} + void OBSBasicProperties::SourceRemoved(void *data, calldata_t *) { QMetaObject::invokeMethod(static_cast(data), "close"); @@ -269,16 +291,6 @@ void OBSBasicProperties::UpdateProperties(void *data, calldata_t *) QMetaObject::invokeMethod(static_cast(data)->view, "ReloadProperties"); } -static bool ConfirmReset(QWidget *parent) -{ - QMessageBox::StandardButton button; - - button = OBSMessageBox::question(parent, QTStr("ConfirmReset.Title"), QTStr("ConfirmReset.Text"), - QMessageBox::Yes | QMessageBox::No); - - return button == QMessageBox::Yes; -} - void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) { QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button); @@ -329,18 +341,6 @@ void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) obs_source_update(source, oldSettings); close(); - - } else if (val == QDialogButtonBox::ResetRole) { - if (!ConfirmReset(this)) - return; - - OBSDataAutoRelease settings = obs_source_get_settings(source); - obs_data_clear(settings); - - if (!view->DeferUpdate()) - obs_source_update(source, nullptr); - - view->ReloadProperties(); } } diff --git a/frontend/dialogs/OBSBasicProperties.hpp b/frontend/dialogs/OBSBasicProperties.hpp index 91738115c..559b0579c 100644 --- a/frontend/dialogs/OBSBasicProperties.hpp +++ b/frontend/dialogs/OBSBasicProperties.hpp @@ -39,7 +39,6 @@ private: OBSSignal updatePropertiesSignal; OBSData oldSettings; OBSPropertiesView *view; - QDialogButtonBox *buttonBox; QSplitter *windowSplitter; OBSSourceAutoRelease sourceA; @@ -59,7 +58,8 @@ private: private slots: void on_buttonBox_clicked(QAbstractButton *button); - void AddPreviewButton(); + void restoreDefaultsClicked(); + void previewTransitionClicked(); public: OBSBasicProperties(QWidget *parent, OBSSource source_); diff --git a/frontend/forms/OBSBasicProperties.ui b/frontend/forms/OBSBasicProperties.ui index 66a25488e..4688df43d 100644 --- a/frontend/forms/OBSBasicProperties.ui +++ b/frontend/forms/OBSBasicProperties.ui @@ -108,11 +108,58 @@ - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults + + + + QFrame::NoFrame + + QFrame::Plain + + + 0 + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + RestoreDefaults + + + false + + + + + + + PreviewTransition + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + +