UI: Add audio mixer toolbar

This adds a toolbar to the audio mixer dock, so it is
easier to access advanced audio dialog and unhide/vertical
actions.
master
cg2121 2022-07-25 07:22:24 -05:00 committed by Matt Gajownik
parent 018f52bfab
commit e072976ccf
12 changed files with 229 additions and 100 deletions

View File

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

View File

@ -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 */

View File

@ -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 */

View File

@ -0,0 +1 @@
<svg fill="#d2d2d2" enable-background="new 924 796 200 200" height="200" viewBox="924 796 200 200" width="200" xmlns="http://www.w3.org/2000/svg"><path d="m1049.078 903.431h-3.447c-3.104 0-5.875-1.963-6.904-4.891-.626-1.793-1.354-3.536-2.176-5.227-1.361-2.806-.799-6.167 1.404-8.369l2.381-2.382c4.029-4.028 4.029-10.556.002-14.583l-1.717-1.717c-4.025-4.024-10.557-4.028-14.58 0l-2.436 2.433c-2.193 2.196-5.538 2.769-8.336 1.425-1.696-.811-3.442-1.532-5.236-2.155-2.948-1.017-4.928-3.795-4.928-6.91v-3.37c0-5.693-4.618-10.31-10.309-10.31h-2.43c-5.695 0-10.312 4.616-10.312 10.31v3.444c0 3.107-1.962 5.877-4.892 6.906-1.792.627-3.534 1.354-5.224 2.176-2.803 1.361-6.166.796-8.371-1.406l-2.377-2.382c-4.03-4.028-10.558-4.028-14.584 0l-1.719 1.717c-4.026 4.028-4.028 10.555 0 14.583l2.434 2.432c2.193 2.197 2.765 5.54 1.421 8.341-.812 1.691-1.532 3.44-2.15 5.234-1.021 2.945-3.798 4.926-6.915 4.926h-3.367c-5.695 0-10.312 4.617-10.312 10.313v2.429c0 5.693 4.617 10.31 10.312 10.31h3.441c3.106 0 5.876 1.963 6.903 4.893.63 1.791 1.358 3.537 2.18 5.227 1.361 2.804.795 6.164-1.408 8.367l-2.379 2.383c-4.029 4.027-4.027 10.555 0 14.582l1.718 1.718c4.025 4.023 10.553 4.026 14.58-.003l2.431-2.432c2.195-2.194 5.54-2.768 8.341-1.424 1.694.813 3.441 1.533 5.236 2.155 2.946 1.018 4.927 3.795 4.927 6.913v3.364c-.004 5.699 4.614 10.313 10.311 10.313h2.427c5.696 0 10.314-4.614 10.311-10.309v-3.445c0-3.104 1.962-5.875 4.892-6.905 1.792-.628 3.537-1.354 5.229-2.175 2.801-1.362 6.165-.798 8.368 1.404l2.379 2.38c4.027 4.029 10.555 4.025 14.583.002l1.717-1.718c4.027-4.026 4.03-10.557 0-14.581l-2.432-2.433c-2.197-2.193-2.768-5.54-1.426-8.337.814-1.696 1.533-3.445 2.154-5.24 1.021-2.947 3.795-4.926 6.914-4.926h3.367c5.695.002 10.31-4.616 10.31-10.312v-2.429c.001-5.691-4.613-10.313-10.306-10.309zm-57.384 36.716c-13.852 0-25.081-11.227-25.081-25.078 0-13.853 11.229-25.08 25.081-25.08 13.85 0 25.079 11.228 25.079 25.08-.001 13.852-11.229 25.078-25.079 25.078z"/><path d="m1117.307 845.487h-1.727c-2.557 0-4.847-1.583-5.752-3.974-.229-.609-.479-1.212-.746-1.804-1.053-2.329-.554-5.07 1.256-6.876l1.219-1.221c2.613-2.611 2.613-6.853 0-9.466l-.473-.473c-2.613-2.612-6.852-2.612-9.465 0l-1.219 1.221c-1.809 1.809-4.547 2.308-6.877 1.258-.593-.268-1.192-.516-1.805-.747-2.389-.903-3.975-3.196-3.975-5.748v-1.729c0-3.697-2.996-6.692-6.689-6.692h-.668c-3.698 0-6.696 2.995-6.696 6.692v1.724c0 2.557-1.581 4.85-3.972 5.753-.609.231-1.215.479-1.805.747-2.328 1.05-5.069.551-6.876-1.256l-1.22-1.221c-2.611-2.614-6.854-2.613-9.467.001l-.472.472c-2.613 2.613-2.613 6.853 0 9.465l1.219 1.22c1.806 1.806 2.31 4.547 1.257 6.876-.268.592-.517 1.194-.748 1.804-.903 2.391-3.193 3.977-5.748 3.977h-1.727c-3.695-.002-6.691 2.997-6.691 6.69v.669c0 3.696 2.996 6.693 6.691 6.693h1.722c2.557-.001 4.85 1.582 5.753 3.973.231.611.48 1.215.747 1.809 1.052 2.326.552 5.065-1.255 6.871l-1.219 1.224c-2.613 2.609-2.613 6.851 0 9.463l.475.473c2.611 2.614 6.852 2.614 9.463 0l1.217-1.219c1.807-1.806 4.549-2.308 6.877-1.255.592.269 1.197.517 1.809.748 2.389.901 3.974 3.193 3.974 5.747v1.724c-.004 3.694 2.995 6.692 6.692 6.692h.669c3.693 0 6.692-2.994 6.692-6.692v-1.721c0-2.556 1.582-4.849 3.971-5.752.612-.23 1.216-.479 1.809-.746 2.326-1.053 5.068-.551 6.873 1.251l1.223 1.222c2.609 2.615 6.85 2.615 9.465 0l.473-.475c2.611-2.611 2.611-6.851 0-9.464l-1.221-1.22c-1.805-1.806-2.307-4.547-1.256-6.875.268-.59.518-1.194.749-1.805.901-2.391 3.191-3.976 5.747-3.976h1.725c3.694.004 6.691-2.995 6.695-6.69v-.669c-.004-3.697-3-6.693-6.693-6.693zm-36.59 21.753c-8.131 0-14.723-6.592-14.723-14.724s6.592-14.724 14.723-14.724c8.133 0 14.725 6.592 14.725 14.724s-6.592 14.724-14.725 14.724z"/></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -540,6 +540,10 @@ QToolButton:pressed {
qproperty-icon: url(./Dark/dots-vert.svg);
}
* [themeID="cogsIcon"] {
qproperty-icon: url(./Dark/cogs.svg);
}
/***********************/
/* --- Combo boxes --- */
/***********************/

View File

@ -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;
}

View File

@ -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);
}

View File

@ -1020,113 +1020,156 @@
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedMixerArea">
<widget class="VScrollArea" name="hMixerScrollArea">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
<widget class="QFrame" name="mixerFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<property name="leftMargin">
<number>0</number>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
<property name="topMargin">
<number>0</number>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
<property name="rightMargin">
<number>0</number>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="hVolumeWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>67</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="hVolControlLayout">
<property name="spacing">
<number>0</number>
<item>
<widget class="QStackedWidget" name="stackedMixerArea">
<widget class="VScrollArea" name="hMixerScrollArea">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="hVolumeWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>74</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="hVolControlLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
<widget class="HScrollArea" name="vMixerScrollArea">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="vVolumeWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>16</width>
<height>28</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="vVolControlLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
</widget>
</item>
<item>
<widget class="QToolBar" name="mixerToolbar">
<property name="iconSize">
<size>
<width>16</width>
<height>16</height>
</size>
</property>
<property name="leftMargin">
<number>0</number>
<property name="floatable">
<bool>false</bool>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
<widget class="HScrollArea" name="vMixerScrollArea">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAsNeeded</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="vVolumeWidgets">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>16</width>
<height>28</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="vVolControlLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
<addaction name="actionMixerToolbarAdvAudio"/>
<addaction name="separator"/>
<addaction name="actionMixerToolbarMenu"/>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
@ -2253,6 +2296,33 @@
<string>Undo.Redo</string>
</property>
</action>
<action name="actionMixerToolbarAdvAudio">
<property name="icon">
<iconset resource="obs.qrc">
<normaloff>:/settings/images/settings/advanced.svg</normaloff>:/settings/images/settings/advanced.svg</iconset>
</property>
<property name="text">
<string>AdvAudioProps</string>
</property>
<property name="toolTip">
<string>Basic.AdvAudio</string>
</property>
<property name="themeID" stdset="0">
<string>cogsIcon</string>
</property>
</action>
<action name="actionMixerToolbarMenu">
<property name="icon">
<iconset resource="obs.qrc">
<normaloff>:/res/images/dots-vert.svg</normaloff>:/res/images/dots-vert.svg</iconset>
</property>
<property name="text">
<string>MixerToolbarMenu</string>
</property>
<property name="themeID" stdset="0">
<string>menuIconSmall</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

1
UI/forms/images/cogs.svg Normal file
View File

@ -0,0 +1 @@
<svg fill="currentColor" enable-background="new 924 796 200 200" height="200" viewBox="924 796 200 200" width="200" xmlns="http://www.w3.org/2000/svg"><path d="m1049.078 903.431h-3.447c-3.104 0-5.875-1.963-6.904-4.891-.626-1.793-1.354-3.536-2.176-5.227-1.361-2.806-.799-6.167 1.404-8.369l2.381-2.382c4.029-4.028 4.029-10.556.002-14.583l-1.717-1.717c-4.025-4.024-10.557-4.028-14.58 0l-2.436 2.433c-2.193 2.196-5.538 2.769-8.336 1.425-1.696-.811-3.442-1.532-5.236-2.155-2.948-1.017-4.928-3.795-4.928-6.91v-3.37c0-5.693-4.618-10.31-10.309-10.31h-2.43c-5.695 0-10.312 4.616-10.312 10.31v3.444c0 3.107-1.962 5.877-4.892 6.906-1.792.627-3.534 1.354-5.224 2.176-2.803 1.361-6.166.796-8.371-1.406l-2.377-2.382c-4.03-4.028-10.558-4.028-14.584 0l-1.719 1.717c-4.026 4.028-4.028 10.555 0 14.583l2.434 2.432c2.193 2.197 2.765 5.54 1.421 8.341-.812 1.691-1.532 3.44-2.15 5.234-1.021 2.945-3.798 4.926-6.915 4.926h-3.367c-5.695 0-10.312 4.617-10.312 10.313v2.429c0 5.693 4.617 10.31 10.312 10.31h3.441c3.106 0 5.876 1.963 6.903 4.893.63 1.791 1.358 3.537 2.18 5.227 1.361 2.804.795 6.164-1.408 8.367l-2.379 2.383c-4.029 4.027-4.027 10.555 0 14.582l1.718 1.718c4.025 4.023 10.553 4.026 14.58-.003l2.431-2.432c2.195-2.194 5.54-2.768 8.341-1.424 1.694.813 3.441 1.533 5.236 2.155 2.946 1.018 4.927 3.795 4.927 6.913v3.364c-.004 5.699 4.614 10.313 10.311 10.313h2.427c5.696 0 10.314-4.614 10.311-10.309v-3.445c0-3.104 1.962-5.875 4.892-6.905 1.792-.628 3.537-1.354 5.229-2.175 2.801-1.362 6.165-.798 8.368 1.404l2.379 2.38c4.027 4.029 10.555 4.025 14.583.002l1.717-1.718c4.027-4.026 4.03-10.557 0-14.581l-2.432-2.433c-2.197-2.193-2.768-5.54-1.426-8.337.814-1.696 1.533-3.445 2.154-5.24 1.021-2.947 3.795-4.926 6.914-4.926h3.367c5.695.002 10.31-4.616 10.31-10.312v-2.429c.001-5.691-4.613-10.313-10.306-10.309zm-57.384 36.716c-13.852 0-25.081-11.227-25.081-25.078 0-13.853 11.229-25.08 25.081-25.08 13.85 0 25.079 11.228 25.079 25.08-.001 13.852-11.229 25.078-25.079 25.078z"/><path d="m1117.307 845.487h-1.727c-2.557 0-4.847-1.583-5.752-3.974-.229-.609-.479-1.212-.746-1.804-1.053-2.329-.554-5.07 1.256-6.876l1.219-1.221c2.613-2.611 2.613-6.853 0-9.466l-.473-.473c-2.613-2.612-6.852-2.612-9.465 0l-1.219 1.221c-1.809 1.809-4.547 2.308-6.877 1.258-.593-.268-1.192-.516-1.805-.747-2.389-.903-3.975-3.196-3.975-5.748v-1.729c0-3.697-2.996-6.692-6.689-6.692h-.668c-3.698 0-6.696 2.995-6.696 6.692v1.724c0 2.557-1.581 4.85-3.972 5.753-.609.231-1.215.479-1.805.747-2.328 1.05-5.069.551-6.876-1.256l-1.22-1.221c-2.611-2.614-6.854-2.613-9.467.001l-.472.472c-2.613 2.613-2.613 6.853 0 9.465l1.219 1.22c1.806 1.806 2.31 4.547 1.257 6.876-.268.592-.517 1.194-.748 1.804-.903 2.391-3.193 3.977-5.748 3.977h-1.727c-3.695-.002-6.691 2.997-6.691 6.69v.669c0 3.696 2.996 6.693 6.691 6.693h1.722c2.557-.001 4.85 1.582 5.753 3.973.231.611.48 1.215.747 1.809 1.052 2.326.552 5.065-1.255 6.871l-1.219 1.224c-2.613 2.609-2.613 6.851 0 9.463l.475.473c2.611 2.614 6.852 2.614 9.463 0l1.217-1.219c1.807-1.806 4.549-2.308 6.877-1.255.592.269 1.197.517 1.809.748 2.389.901 3.974 3.193 3.974 5.747v1.724c-.004 3.694 2.995 6.692 6.692 6.692h.669c3.693 0 6.692-2.994 6.692-6.692v-1.721c0-2.556 1.582-4.849 3.971-5.752.612-.23 1.216-.479 1.809-.746 2.326-1.053 5.068-.551 6.873 1.251l1.223 1.222c2.609 2.615 6.85 2.615 9.465 0l.473-.475c2.611-2.611 2.611-6.851 0-9.464l-1.221-1.22c-1.805-1.806-2.307-4.547-1.256-6.875.268-.59.518-1.194.749-1.805.901-2.391 3.191-3.976 5.747-3.976h1.725c3.694.004 6.691-2.995 6.695-6.69v-.669c-.004-3.697-3-6.693-6.693-6.693zm-36.59 21.753c-8.131 0-14.723-6.592-14.723-14.724s6.592-14.724 14.723-14.724c8.133 0 14.725 6.592 14.725 14.724s-6.592 14.724-14.725 14.724z"/></svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -61,6 +61,7 @@
<file>images/interact.svg</file>
<file>images/dots.svg</file>
<file>images/dots-vert.svg</file>
<file>images/cogs.svg</file>
</qresource>
<qresource prefix="/settings">
<file>images/settings/output.svg</file>

View File

@ -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)
{

View File

@ -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();