From ad55f413bb907eb8c0a14e95fbba2ca7d8b68d84 Mon Sep 17 00:00:00 2001 From: Clayton Groeneveld Date: Tue, 26 Feb 2019 06:58:53 -0600 Subject: [PATCH] UI: Add ability to copy & paste filters from the mixer --- UI/window-basic-main.cpp | 47 ++++++++++++++++++++++++++++++++++++++++ UI/window-basic-main.hpp | 5 ++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index eb56cba9e..128ed6936 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2775,6 +2775,9 @@ void OBSBasic::VolControlContextMenu() QAction unhideAllAction(QTStr("UnhideAll"), this); QAction mixerRenameAction(QTStr("Rename"), this); + QAction copyFiltersAction(QTStr("Copy.Filters"), this); + QAction pasteFiltersAction(QTStr("Paste.Filters"), this); + QAction filtersAction(QTStr("Filters"), this); QAction propertiesAction(QTStr("Properties"), this); QAction advPropAction(QTStr("Basic.MainMenu.Edit.AdvAudio"), this); @@ -2796,6 +2799,13 @@ void OBSBasic::VolControlContextMenu() this, &OBSBasic::MixerRenameSource, Qt::DirectConnection); + connect(©FiltersAction, &QAction::triggered, + this, &OBSBasic::AudioMixerCopyFilters, + Qt::DirectConnection); + connect(&pasteFiltersAction, &QAction::triggered, + this, &OBSBasic::AudioMixerPasteFilters, + Qt::DirectConnection); + connect(&filtersAction, &QAction::triggered, this, &OBSBasic::GetAudioSourceFilters, Qt::DirectConnection); @@ -2819,6 +2829,11 @@ void OBSBasic::VolControlContextMenu() mixerRenameAction.setProperty("volControl", QVariant::fromValue(vol)); + copyFiltersAction.setProperty("volControl", + QVariant::fromValue(vol)); + pasteFiltersAction.setProperty("volControl", + QVariant::fromValue(vol)); + filtersAction.setProperty("volControl", QVariant::fromValue(vol)); propertiesAction.setProperty("volControl", @@ -2826,11 +2841,19 @@ void OBSBasic::VolControlContextMenu() /* ------------------- */ + if (copyFiltersString == nullptr) + pasteFiltersAction.setEnabled(false); + else + pasteFiltersAction.setEnabled(true); + QMenu popup; popup.addAction(&unhideAllAction); popup.addAction(&hideAction); popup.addAction(&mixerRenameAction); popup.addSeparator(); + popup.addAction(©FiltersAction); + popup.addAction(&pasteFiltersAction); + popup.addSeparator(); popup.addAction(&toggleControlLayoutAction); popup.addSeparator(); popup.addAction(&filtersAction); @@ -6727,6 +6750,30 @@ void OBSBasic::on_actionPasteDup_triggered() on_actionPasteTransform_triggered(); } +void OBSBasic::AudioMixerCopyFilters() +{ + QAction *action = reinterpret_cast(sender()); + VolControl *vol = action->property("volControl").value(); + obs_source_t *source = vol->GetSource(); + + copyFiltersString = obs_source_get_name(source); +} + +void OBSBasic::AudioMixerPasteFilters() +{ + QAction *action = reinterpret_cast(sender()); + VolControl *vol = action->property("volControl").value(); + obs_source_t *dstSource = vol->GetSource(); + + OBSSource source = obs_get_source_by_name(copyFiltersString); + obs_source_release(source); + + if (source == dstSource) + return; + + obs_source_copy_filters(dstSource, source); +} + void OBSBasic::on_actionCopyFilters_triggered() { OBSSceneItem item = GetCurrentSceneItem(); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 2ee43915f..974a045bb 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -155,7 +155,7 @@ private: bool fullscreenInterface = false; const char *copyString; - const char *copyFiltersString; + const char *copyFiltersString = nullptr; bool copyVisible = true; QScopedPointer updateCheckThread; @@ -518,6 +518,9 @@ private slots: void on_actionShowAbout_triggered(); + void AudioMixerCopyFilters(); + void AudioMixerPasteFilters(); + private: /* OBS Callbacks */ static void SceneReordered(void *data, calldata_t *params);