diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 64ff69aa9..3179cc363 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -112,6 +112,7 @@ MoveSourceUp="Move Source(s) Up" MoveSourceDown="Move Source(s) Down" SourceProperties="Open Source Properties" SourceFilters="Open Source Filters" +MixerToolbarMenu="Audio Mixer Menu" # warning for plugin load failures PluginsFailedToLoad.Title="Plugin Load Error" diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index b709c3d2b..39020c639 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -403,6 +403,10 @@ QToolButton:pressed { qproperty-icon: url(./Dark/dots-vert.svg); } +* [themeID="cogsIcon"] { + qproperty-icon: url(./Dark/cogs.svg); +} + /* Tab Widget */ QTabWidget::pane { /* The tab widget frame */ diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index 8f745d791..ea3ea23a2 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -310,6 +310,10 @@ QToolButton:pressed { qproperty-icon: url(./Dark/dots-vert.svg); } +* [themeID="cogsIcon"] { + qproperty-icon: url(./Dark/cogs.svg); +} + /* Tab Widget */ QTabWidget::pane { /* The tab widget frame */ diff --git a/UI/data/themes/Dark/cogs.svg b/UI/data/themes/Dark/cogs.svg new file mode 100644 index 000000000..398875442 --- /dev/null +++ b/UI/data/themes/Dark/cogs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index 7ba73b4f8..73d5a50c3 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -540,6 +540,10 @@ QToolButton:pressed { qproperty-icon: url(./Dark/dots-vert.svg); } +* [themeID="cogsIcon"] { + qproperty-icon: url(./Dark/cogs.svg); +} + /***********************/ /* --- Combo boxes --- */ /***********************/ diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss index 69bd06c3b..5ec7f46c1 100644 --- a/UI/data/themes/System.qss +++ b/UI/data/themes/System.qss @@ -50,6 +50,10 @@ OBSThemeMeta { qproperty-icon: url(:res/images/dots-vert.svg); } +* [themeID="cogsIcon"] { + qproperty-icon: url(:/res/images/cogs.svg); +} + MuteCheckBox { outline: none; } diff --git a/UI/data/themes/Yami.qss b/UI/data/themes/Yami.qss index 51aeab6c2..343006606 100644 --- a/UI/data/themes/Yami.qss +++ b/UI/data/themes/Yami.qss @@ -458,6 +458,10 @@ QToolButton:pressed { qproperty-icon: url(./Dark/refresh.svg); } +* [themeID="cogsIcon"] { + qproperty-icon: url(./Dark/cogs.svg); +} + #sourceInteractButton { qproperty-icon: url(./Dark/interact.svg); } diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui index 60f4e8f0c..435970950 100644 --- a/UI/forms/OBSBasic.ui +++ b/UI/forms/OBSBasic.ui @@ -1020,113 +1020,156 @@ 0 - - - - Qt::CustomContextMenu + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 0 - - QFrame::StyledPanel + + 0 - - QFrame::Sunken + + 0 - - Qt::ScrollBarAsNeeded + + 0 - - Qt::ScrollBarAlwaysOff + + 0 - - true - - - - - 0 - 0 - 67 - 16 - - - - - 0 - 0 - - - - - 0 + + + + + Qt::CustomContextMenu + + + QFrame::StyledPanel + + + QFrame::Sunken + + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 74 + 16 + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + Qt::CustomContextMenu + + + QFrame::StyledPanel + + + QFrame::Sunken + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAsNeeded + + + true + + + + + 0 + 0 + 16 + 28 + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + 16 + 16 + - - 0 + + false - - 0 - - - 0 - - - 0 - - - - - - - Qt::CustomContextMenu - - - QFrame::StyledPanel - - - QFrame::Sunken - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAsNeeded - - - true - - - - - 0 - 0 - 16 - 28 - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - + + + + + + @@ -2253,6 +2296,33 @@ Undo.Redo + + + + :/settings/images/settings/advanced.svg:/settings/images/settings/advanced.svg + + + AdvAudioProps + + + Basic.AdvAudio + + + cogsIcon + + + + + + :/res/images/dots-vert.svg:/res/images/dots-vert.svg + + + MixerToolbarMenu + + + menuIconSmall + + diff --git a/UI/forms/images/cogs.svg b/UI/forms/images/cogs.svg new file mode 100644 index 000000000..4f4c3f2e7 --- /dev/null +++ b/UI/forms/images/cogs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/UI/forms/obs.qrc b/UI/forms/obs.qrc index 977cfa39d..c88a11b45 100644 --- a/UI/forms/obs.qrc +++ b/UI/forms/obs.qrc @@ -61,6 +61,7 @@ images/interact.svg images/dots.svg images/dots-vert.svg + images/cogs.svg images/settings/output.svg diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 18c228f6d..891ecebbc 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -581,6 +581,14 @@ void OBSBasic::copyActionsDynamicProperties() temp->setProperty(y, x->property(y)); } } + + for (QAction *x : ui->mixerToolbar->actions()) { + QWidget *temp = ui->mixerToolbar->widgetForAction(x); + + for (QByteArray &y : x->dynamicPropertyNames()) { + temp->setProperty(y, x->property(y)); + } + } } void OBSBasic::UpdateVolumeControlsDecayRate() @@ -4960,6 +4968,31 @@ void OBSBasic::on_actionAdvAudioProperties_triggered() advAudioWindow->SetIconsVisible(iconsVisible); } +void OBSBasic::on_actionMixerToolbarAdvAudio_triggered() +{ + on_actionAdvAudioProperties_triggered(); +} + +void OBSBasic::on_actionMixerToolbarMenu_triggered() +{ + QAction unhideAllAction(QTStr("UnhideAll"), this); + connect(&unhideAllAction, &QAction::triggered, this, + &OBSBasic::UnhideAllAudioControls, Qt::DirectConnection); + + QAction toggleControlLayoutAction(QTStr("VerticalLayout"), this); + toggleControlLayoutAction.setCheckable(true); + toggleControlLayoutAction.setChecked(config_get_bool( + GetGlobalConfig(), "BasicWindow", "VerticalVolControl")); + connect(&toggleControlLayoutAction, &QAction::changed, this, + &OBSBasic::ToggleVolControlLayout, Qt::DirectConnection); + + QMenu popup; + popup.addAction(&unhideAllAction); + popup.addSeparator(); + popup.addAction(&toggleControlLayoutAction); + popup.exec(QCursor::pos()); +} + void OBSBasic::on_scenes_currentItemChanged(QListWidgetItem *current, QListWidgetItem *prev) { diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index cc19f2b33..3bdb0bff7 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -995,6 +995,8 @@ private slots: void on_action_Settings_triggered(); void on_actionShowMissingFiles_triggered(); void on_actionAdvAudioProperties_triggered(); + void on_actionMixerToolbarAdvAudio_triggered(); + void on_actionMixerToolbarMenu_triggered(); void on_actionShowLogs_triggered(); void on_actionUploadCurrentLog_triggered(); void on_actionUploadLastLog_triggered();