From 2d84da2f7e38c6d26acfe2d3a1d634d6dc360eae Mon Sep 17 00:00:00 2001 From: cg2121 Date: Sun, 9 Apr 2017 05:39:53 -0500 Subject: [PATCH] UI: Add "Defaults" button to filters/properties windows This adds a "Defaults" button in the source and filter properties, which will clear and reset all settings. Closes jp9000/obs-studio#875 --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicFilters.ui | 25 +++---------------------- UI/window-basic-filters.cpp | 31 +++++++++++++++++++++++++++++++ UI/window-basic-filters.hpp | 3 +++ UI/window-basic-properties.cpp | 18 ++++++++++++++---- 5 files changed, 52 insertions(+), 26 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index f7dc4d746..921ebc5b8 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -71,6 +71,7 @@ PasteDuplicate="Paste (Duplicate)" RemuxRecordings="Remux Recordings" Next="Next" Back="Back" +Defaults="Defaults" # warning if program already open AlreadyRunning.Title="OBS is already running" diff --git a/UI/forms/OBSBasicFilters.ui b/UI/forms/OBSBasicFilters.ui index c53fe6750..b25d5d373 100644 --- a/UI/forms/OBSBasicFilters.ui +++ b/UI/forms/OBSBasicFilters.ui @@ -412,12 +412,9 @@ - - - Close - - - false + + + QDialogButtonBox::Reset|QDialogButtonBox::Close @@ -446,21 +443,5 @@ - - close - clicked() - OBSBasicFilters - accept() - - - 811 - 701 - - - 722 - 727 - - - diff --git a/UI/window-basic-filters.cpp b/UI/window-basic-filters.cpp index 744e3f7ee..1f017ddfa 100644 --- a/UI/window-basic-filters.cpp +++ b/UI/window-basic-filters.cpp @@ -87,6 +87,15 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_) SLOT(EffectFilterNameEdited(QWidget*, QAbstractItemDelegate::EndEditHint))); + connect(ui->buttonBox->button(QDialogButtonBox::Close), + SIGNAL(clicked()), this, SLOT(close())); + + ui->buttonBox->button(QDialogButtonBox::Reset)->setText( + QTStr("Defaults")); + + connect(ui->buttonBox->button(QDialogButtonBox::Reset), + SIGNAL(clicked()), this, SLOT(ResetFilters())); + uint32_t flags = obs_source_get_output_flags(source); bool audio = (flags & OBS_SOURCE_AUDIO) != 0; bool audioOnly = (flags & OBS_SOURCE_VIDEO) == 0; @@ -573,6 +582,7 @@ void OBSBasicFilters::on_moveAsyncFilterDown_clicked() void OBSBasicFilters::on_asyncFilters_GotFocus() { UpdatePropertiesView(ui->asyncFilters->currentRow(), true); + isAsync = true; } void OBSBasicFilters::on_asyncFilters_currentRowChanged(int row) @@ -614,6 +624,7 @@ void OBSBasicFilters::on_moveEffectFilterDown_clicked() void OBSBasicFilters::on_effectFilters_GotFocus() { UpdatePropertiesView(ui->effectFilters->currentRow(), false); + isAsync = false; } void OBSBasicFilters::on_effectFilters_currentRowChanged(int row) @@ -739,3 +750,23 @@ void OBSBasicFilters::EffectFilterNameEdited(QWidget *editor, FilterNameEdited(editor, ui->effectFilters); UNUSED_PARAMETER(endHint); } + +void OBSBasicFilters::ResetFilters() +{ + QListWidget *list = isAsync ? ui->asyncFilters : ui->effectFilters; + int row = list->currentRow(); + + OBSSource filter = GetFilter(row, isAsync); + + if (!filter) + return; + + obs_data_t *settings = obs_source_get_settings(filter); + obs_data_clear(settings); + obs_data_release(settings); + + if (!view->DeferUpdate()) + obs_source_update(filter, nullptr); + + view->RefreshProperties(); +} diff --git a/UI/window-basic-filters.hpp b/UI/window-basic-filters.hpp index 243897610..1e67f6641 100644 --- a/UI/window-basic-filters.hpp +++ b/UI/window-basic-filters.hpp @@ -68,12 +68,15 @@ private: void FilterNameEdited(QWidget *editor, QListWidget *list); + bool isAsync; + private slots: void AddFilter(OBSSource filter); void RemoveFilter(OBSSource filter); void ReorderFilters(); void RenameAsyncFilter(); void RenameEffectFilter(); + void ResetFilters(); void AddFilterFromAction(); diff --git a/UI/window-basic-properties.cpp b/UI/window-basic-properties.cpp index d163d41ca..dc35c1fc7 100644 --- a/UI/window-basic-properties.cpp +++ b/UI/window-basic-properties.cpp @@ -49,8 +49,9 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_) int cy = (int)config_get_int(App()->GlobalConfig(), "PropertiesWindow", "cy"); - buttonBox->setStandardButtons(QDialogButtonBox::Ok | - QDialogButtonBox::Cancel); + buttonBox->addButton(QTStr("OK"), QDialogButtonBox::AcceptRole); + buttonBox->addButton(QTStr("Cancel"), QDialogButtonBox::RejectRole); + buttonBox->addButton(QTStr("Defaults"), QDialogButtonBox::ResetRole); buttonBox->setObjectName(QStringLiteral("buttonBox")); if (cx > 400 && cy > 400) @@ -158,9 +159,8 @@ void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) if (view->DeferUpdate()) view->UpdateSettings(); - } - if (val == QDialogButtonBox::RejectRole) { + } else if (val == QDialogButtonBox::RejectRole) { obs_data_t *settings = obs_source_get_settings(source); obs_data_clear(settings); obs_data_release(settings); @@ -171,6 +171,16 @@ void OBSBasicProperties::on_buttonBox_clicked(QAbstractButton *button) obs_source_update(source, oldSettings); close(); + + } else if (val == QDialogButtonBox::ResetRole) { + obs_data_t *settings = obs_source_get_settings(source); + obs_data_clear(settings); + obs_data_release(settings); + + if (!view->DeferUpdate()) + obs_source_update(source, nullptr); + + view->RefreshProperties(); } }