Browse Source

UI: Cleanup advanced audio window

This converts the advanced audio window to use
a ui form, so it is easier to modify in the future.

This also fixes sizing issues with the control widgets,
as before the audio tracks would be clipped, because the
widgets in the window were too wide.
Clayton Groeneveld 3 years ago
parent
commit
295386781f

+ 1 - 0
UI/CMakeLists.txt

@@ -112,6 +112,7 @@ target_sources(
           forms/AutoConfigVideoPage.ui
           forms/ColorSelect.ui
           forms/OBSAbout.ui
+          forms/OBSAdvAudio.ui
           forms/OBSBasic.ui
           forms/OBSBasicFilters.ui
           forms/OBSBasicInteraction.ui

+ 17 - 28
UI/adv-audio-control.cpp

@@ -27,8 +27,6 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	uint32_t flags = obs_source_get_flags(source);
 	uint32_t mixers = obs_source_get_audio_mixers(source);
 
-	activeContainer = new QWidget();
-	forceMonoContainer = new QWidget();
 	mixerContainer = new QWidget();
 	balanceContainer = new QWidget();
 	labelL = new QLabel();
@@ -70,12 +68,6 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 				 OBSSourceBalanceChanged, this);
 	renameSignal.Connect(handler, "rename", OBSSourceRenamed, this);
 
-	hlayout = new QHBoxLayout();
-	hlayout->setContentsMargins(0, 0, 0, 0);
-	activeContainer->setLayout(hlayout);
-	hlayout = new QHBoxLayout();
-	hlayout->setContentsMargins(0, 0, 0, 0);
-	forceMonoContainer->setLayout(hlayout);
 	hlayout = new QHBoxLayout();
 	hlayout->setContentsMargins(0, 0, 0, 0);
 	mixerContainer->setLayout(hlayout);
@@ -85,7 +77,6 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	balanceContainer->setFixedWidth(150);
 
 	labelL->setText("L");
-
 	labelR->setText("R");
 
 	OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
@@ -104,9 +95,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 				 : QTStr("Basic.Stats.Status.Inactive"));
 	if (isActive)
 		setThemeID(active, "error");
-	activeContainer->layout()->addWidget(active);
-	activeContainer->layout()->setAlignment(active, Qt::AlignVCenter);
-	activeContainer->setFixedWidth(120);
+	active->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
 
 	volume->setMinimum(MIN_DB - 0.1);
 	volume->setMaximum(MAX_DB);
@@ -114,7 +103,6 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	volume->setDecimals(1);
 	volume->setSuffix(" dB");
 	volume->setValue(obs_mul_to_db(vol));
-	volume->setFixedWidth(100);
 	volume->setAccessibleName(
 		QTStr("Basic.AdvAudio.VolumeSource").arg(sourceName));
 
@@ -127,10 +115,11 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	percent->setMaximum(2000);
 	percent->setSuffix("%");
 	percent->setValue((int)(obs_source_get_volume(source) * 100.0f));
-	percent->setFixedWidth(100);
 	percent->setAccessibleName(
 		QTStr("Basic.AdvAudio.VolumeSource").arg(sourceName));
 
+	stackedWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+	stackedWidget->setFixedWidth(100);
 	stackedWidget->addWidget(volume);
 	stackedWidget->addWidget(percent);
 
@@ -139,14 +128,11 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 
 	SetVolumeWidget(volType);
 
+	forceMono->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
 	forceMono->setChecked((flags & OBS_SOURCE_FLAG_FORCE_MONO) != 0);
 	forceMono->setAccessibleName(
 		QTStr("Basic.AdvAudio.MonoSource").arg(sourceName));
 
-	forceMonoContainer->layout()->addWidget(forceMono);
-	forceMonoContainer->layout()->setAlignment(forceMono, Qt::AlignVCenter);
-	forceMonoContainer->setFixedWidth(50);
-
 	balance->setOrientation(Qt::Horizontal);
 	balance->setMinimum(0);
 	balance->setMaximum(100);
@@ -191,6 +177,8 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 		monitoringType->setAccessibleName(
 			QTStr("Basic.AdvAudio.MonitoringSource")
 				.arg(sourceName));
+		monitoringType->setSizePolicy(QSizePolicy::Maximum,
+					      QSizePolicy::Fixed);
 	}
 
 	mixer1->setText("1");
@@ -218,14 +206,14 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	mixer6->setAccessibleName(
 		QTStr("Basic.Settings.Output.Adv.Audio.Track6"));
 
+	balanceContainer->layout()->addWidget(labelL);
+	balanceContainer->layout()->addWidget(balance);
+	balanceContainer->layout()->addWidget(labelR);
+
 	speaker_layout sl = obs_source_get_speaker_layout(source);
 
-	if (sl == SPEAKERS_STEREO) {
-		balanceContainer->layout()->addWidget(labelL);
-		balanceContainer->layout()->addWidget(balance);
-		balanceContainer->layout()->addWidget(labelR);
-		balanceContainer->setMaximumWidth(170);
-	}
+	if (sl != SPEAKERS_STEREO)
+		balanceContainer->setEnabled(false);
 
 	mixerContainer->layout()->addWidget(mixer1);
 	mixerContainer->layout()->addWidget(mixer2);
@@ -233,6 +221,7 @@ OBSAdvAudioCtrl::OBSAdvAudioCtrl(QGridLayout *, obs_source_t *source_)
 	mixerContainer->layout()->addWidget(mixer4);
 	mixerContainer->layout()->addWidget(mixer5);
 	mixerContainer->layout()->addWidget(mixer6);
+	mixerContainer->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
 
 	QWidget::connect(volume, SIGNAL(valueChanged(double)), this,
 			 SLOT(volumeChanged(double)));
@@ -270,9 +259,9 @@ OBSAdvAudioCtrl::~OBSAdvAudioCtrl()
 {
 	iconLabel->deleteLater();
 	nameLabel->deleteLater();
-	activeContainer->deleteLater();
+	active->deleteLater();
 	stackedWidget->deleteLater();
-	forceMonoContainer->deleteLater();
+	forceMono->deleteLater();
 	balanceContainer->deleteLater();
 	syncOffset->deleteLater();
 	if (obs_audio_monitoring_available())
@@ -287,9 +276,9 @@ void OBSAdvAudioCtrl::ShowAudioControl(QGridLayout *layout)
 
 	layout->addWidget(iconLabel, lastRow, idx++);
 	layout->addWidget(nameLabel, lastRow, idx++);
-	layout->addWidget(activeContainer, lastRow, idx++);
+	layout->addWidget(active, lastRow, idx++);
 	layout->addWidget(stackedWidget, lastRow, idx++);
-	layout->addWidget(forceMonoContainer, lastRow, idx++);
+	layout->addWidget(forceMono, lastRow, idx++);
 	layout->addWidget(balanceContainer, lastRow, idx++);
 	layout->addWidget(syncOffset, lastRow, idx++);
 	if (obs_audio_monitoring_available())

+ 0 - 2
UI/adv-audio-control.hpp

@@ -24,8 +24,6 @@ class OBSAdvAudioCtrl : public QObject {
 private:
 	OBSSource source;
 
-	QPointer<QWidget> activeContainer;
-	QPointer<QWidget> forceMonoContainer;
 	QPointer<QWidget> mixerContainer;
 	QPointer<QWidget> balanceContainer;
 

+ 358 - 0
UI/forms/OBSAdvAudio.ui

@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OBSAdvAudio</class>
+ <widget class="QDialog" name="OBSAdvAudio">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1100</width>
+    <height>340</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="contextMenuPolicy">
+   <enum>Qt::CustomContextMenu</enum>
+  </property>
+  <property name="windowTitle">
+   <string>Basic.AdvAudio</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="leftMargin">
+    <number>11</number>
+   </property>
+   <property name="topMargin">
+    <number>11</number>
+   </property>
+   <property name="rightMargin">
+    <number>11</number>
+   </property>
+   <property name="bottomMargin">
+    <number>11</number>
+   </property>
+   <property name="verticalSpacing">
+    <number>11</number>
+   </property>
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>7</number>
+     </property>
+     <item>
+      <widget class="QCheckBox" name="activeOnly">
+       <property name="text">
+        <string>Basic.AdvAudio.ActiveOnly</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="closeButton">
+       <property name="text">
+        <string>Close</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="0">
+    <widget class="QScrollArea" name="scrollArea">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="sizeAdjustPolicy">
+      <enum>QAbstractScrollArea::AdjustToContents</enum>
+     </property>
+     <property name="widgetResizable">
+      <bool>true</bool>
+     </property>
+     <widget class="QWidget" name="scrollAreaWidgetContents">
+      <property name="geometry">
+       <rect>
+        <x>0</x>
+        <y>0</y>
+        <width>1346</width>
+        <height>254</height>
+       </rect>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_3">
+       <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>
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <item row="0" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <property name="spacing">
+          <number>0</number>
+         </property>
+         <property name="leftMargin">
+          <number>4</number>
+         </property>
+         <property name="topMargin">
+          <number>4</number>
+         </property>
+         <property name="rightMargin">
+          <number>4</number>
+         </property>
+         <property name="bottomMargin">
+          <number>4</number>
+         </property>
+         <item>
+          <layout class="QGridLayout" name="mainLayout">
+           <property name="verticalSpacing">
+            <number>4</number>
+           </property>
+           <item row="0" column="5">
+            <widget class="QLabel" name="label_2">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.Balance</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="2">
+            <widget class="QLabel" name="label_7">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.Stats.Status</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="4">
+            <widget class="QLabel" name="label_3">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.Mono</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="8">
+            <widget class="QLabel" name="label_5">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.AudioTracks</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLabel" name="label">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.Name</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="6">
+            <widget class="QLabel" name="label_4">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.SyncOffset</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="7">
+            <widget class="QLabel" name="label_6">
+             <property name="font">
+              <font>
+               <weight>75</weight>
+               <bold>true</bold>
+              </font>
+             </property>
+             <property name="text">
+              <string>Basic.AdvAudio.Monitoring</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="3">
+            <widget class="QWidget" name="widget" native="true">
+             <layout class="QGridLayout" name="gridLayout_2">
+              <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>
+              <property name="spacing">
+               <number>0</number>
+              </property>
+              <item row="0" column="0">
+               <layout class="QHBoxLayout" name="horizontalLayout_2">
+                <property name="spacing">
+                 <number>2</number>
+                </property>
+                <item>
+                 <widget class="QLabel" name="label_9">
+                  <property name="font">
+                   <font>
+                    <weight>75</weight>
+                    <bold>true</bold>
+                   </font>
+                  </property>
+                  <property name="text">
+                   <string>Basic.AdvAudio.Volume</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QCheckBox" name="usePercent">
+                  <property name="font">
+                   <font>
+                    <weight>75</weight>
+                    <bold>true</bold>
+                   </font>
+                  </property>
+                  <property name="text">
+                   <string>%</string>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_3">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeType">
+                   <enum>QSizePolicy::Minimum</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>0</width>
+                    <height>0</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+               </layout>
+              </item>
+             </layout>
+            </widget>
+           </item>
+           <item row="0" column="0">
+            <widget class="QLabel" name="label_8">
+             <property name="text">
+              <string/>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="verticalSpacer">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>closeButton</sender>
+   <signal>clicked()</signal>
+   <receiver>OBSAdvAudio</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>1286</x>
+     <y>474</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>672</x>
+     <y>250</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>

+ 12 - 108
UI/window-basic-adv-audio.cpp

@@ -1,9 +1,3 @@
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QGridLayout>
-#include <QScrollArea>
-#include <QPushButton>
-#include <QLabel>
 #include "window-basic-adv-audio.hpp"
 #include "window-basic-main.hpp"
 #include "item-widget-helpers.hpp"
@@ -11,124 +5,34 @@
 #include "obs-app.hpp"
 #include "qt-wrappers.hpp"
 
+#include "ui_OBSAdvAudio.h"
+
 Q_DECLARE_METATYPE(OBSSource);
 
 OBSBasicAdvAudio::OBSBasicAdvAudio(QWidget *parent)
 	: QDialog(parent),
+	  ui(new Ui::OBSAdvAudio),
 	  sourceAddedSignal(obs_get_signal_handler(), "source_activate",
 			    OBSSourceAdded, this),
 	  sourceRemovedSignal(obs_get_signal_handler(), "source_deactivate",
 			      OBSSourceRemoved, this),
 	  showInactive(false)
 {
-	QScrollArea *scrollArea;
-	QVBoxLayout *vlayout;
-	QWidget *widget;
-	QLabel *label;
-
-	QLabel *volLabel = new QLabel(QTStr("Basic.AdvAudio.Volume"));
-	volLabel->setStyleSheet("font-weight: bold;");
-	volLabel->setContentsMargins(0, 0, 6, 0);
-
-	usePercent = new QCheckBox();
-	usePercent->setStyleSheet("font-weight: bold;");
-	usePercent->setText("%");
-	connect(usePercent, SIGNAL(toggled(bool)), this,
-		SLOT(SetVolumeType(bool)));
+	ui->setupUi(this);
 
 	VolumeType volType = (VolumeType)config_get_int(
 		GetGlobalConfig(), "BasicWindow", "AdvAudioVolumeType");
 
 	if (volType == VolumeType::Percent)
-		usePercent->setChecked(true);
-
-	QHBoxLayout *volLayout = new QHBoxLayout();
-	volLayout->setContentsMargins(0, 0, 0, 0);
-	volLayout->addWidget(volLabel);
-	volLayout->addWidget(usePercent);
-	volLayout->addStretch();
-
-	int idx = 0;
-	mainLayout = new QGridLayout;
-	mainLayout->setContentsMargins(0, 0, 0, 0);
-	label = new QLabel("");
-	mainLayout->addWidget(label, 0, idx++);
-	label = new QLabel(QTStr("Basic.AdvAudio.Name"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-	label = new QLabel(QTStr("Basic.Stats.Status"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-	mainLayout->addLayout(volLayout, 0, idx++);
-	label = new QLabel(QTStr("Basic.AdvAudio.Mono"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-	label = new QLabel(QTStr("Basic.AdvAudio.Balance"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-	label = new QLabel(QTStr("Basic.AdvAudio.SyncOffset"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-	if (obs_audio_monitoring_available()) {
-		label = new QLabel(QTStr("Basic.AdvAudio.Monitoring"));
-		label->setStyleSheet("font-weight: bold;");
-		mainLayout->addWidget(label, 0, idx++);
-	}
-	label = new QLabel(QTStr("Basic.AdvAudio.AudioTracks"));
-	label->setStyleSheet("font-weight: bold;");
-	mainLayout->addWidget(label, 0, idx++);
-
-	controlArea = new QWidget;
-	controlArea->setLayout(mainLayout);
-	controlArea->setSizePolicy(QSizePolicy::Preferred,
-				   QSizePolicy::Preferred);
-
-	vlayout = new QVBoxLayout;
-	vlayout->addWidget(controlArea);
-	//vlayout->setAlignment(controlArea, Qt::AlignTop);
-	widget = new QWidget;
-	widget->setLayout(vlayout);
-	widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
-
-	scrollArea = new QScrollArea;
-	scrollArea->setWidget(widget);
-	scrollArea->setWidgetResizable(true);
-
-	QPushButton *closeButton = new QPushButton(QTStr("Close"));
-
-	activeOnly = new QCheckBox();
-	activeOnly->setChecked(!showInactive);
-	activeOnly->setText(QTStr("Basic.AdvAudio.ActiveOnly"));
-
-	QHBoxLayout *buttonLayout = new QHBoxLayout;
-	buttonLayout->addWidget(activeOnly);
-	buttonLayout->addStretch();
-	buttonLayout->addWidget(closeButton);
-
-	vlayout = new QVBoxLayout;
-	vlayout->setContentsMargins(11, 11, 11, 11);
-	vlayout->addWidget(scrollArea);
-	vlayout->addLayout(buttonLayout);
-	setLayout(vlayout);
-
-	connect(activeOnly, SIGNAL(clicked(bool)), this,
-		SLOT(ActiveOnlyChanged(bool)));
-
-	connect(closeButton, &QPushButton::clicked, [this]() { close(); });
+		ui->usePercent->setChecked(true);
 
 	installEventFilter(CreateShortcutFilter());
 
 	/* enum user scene/sources */
 	obs_enum_sources(EnumSources, this);
 
-	resize(1100, 340);
-	setWindowTitle(QTStr("Basic.AdvAudio"));
 	setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
-	setSizeGripEnabled(true);
-	setWindowModality(Qt::NonModal);
 	setAttribute(Qt::WA_DeleteOnClose, true);
-
-	setContextMenuPolicy(Qt::CustomContextMenu);
 }
 
 OBSBasicAdvAudio::~OBSBasicAdvAudio()
@@ -175,12 +79,12 @@ inline void OBSBasicAdvAudio::AddAudioSource(obs_source_t *source)
 		if (controls[i]->GetSource() == source)
 			return;
 	}
-	OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(mainLayout, source);
+	OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(ui->mainLayout, source);
 
 	InsertQObjectByName(controls, control);
 
 	for (auto control : controls) {
-		control->ShowAudioControl(mainLayout);
+		control->ShowAudioControl(ui->mainLayout);
 	}
 }
 
@@ -210,11 +114,11 @@ void OBSBasicAdvAudio::SourceRemoved(OBSSource source)
 	}
 }
 
-void OBSBasicAdvAudio::SetVolumeType(bool percent)
+void OBSBasicAdvAudio::on_usePercent_toggled(bool checked)
 {
 	VolumeType type;
 
-	if (percent)
+	if (checked)
 		type = VolumeType::Percent;
 	else
 		type = VolumeType::dB;
@@ -226,7 +130,7 @@ void OBSBasicAdvAudio::SetVolumeType(bool percent)
 		       (int)type);
 }
 
-void OBSBasicAdvAudio::ActiveOnlyChanged(bool checked)
+void OBSBasicAdvAudio::on_activeOnly_toggled(bool checked)
 {
 	SetShowInactive(!checked);
 }
@@ -237,7 +141,7 @@ void OBSBasicAdvAudio::SetShowInactive(bool show)
 		return;
 
 	showInactive = show;
-	activeOnly->setChecked(!showInactive);
+
 	sourceAddedSignal.Disconnect();
 	sourceRemovedSignal.Disconnect();
 
@@ -275,7 +179,7 @@ void OBSBasicAdvAudio::SetIconsVisible(bool visible)
 {
 	showVisible = visible;
 
-	QLayoutItem *item = mainLayout->itemAtPosition(0, 0);
+	QLayoutItem *item = ui->mainLayout->itemAtPosition(0, 0);
 	QLabel *headerLabel = qobject_cast<QLabel *>(item->widget());
 	visible ? headerLabel->show() : headerLabel->hide();
 

+ 6 - 9
UI/window-basic-adv-audio.hpp

@@ -3,11 +3,10 @@
 #include <obs.hpp>
 #include <QDialog>
 #include <vector>
-#include <QCheckBox>
-#include <QPointer>
+#include <memory>
 
 class OBSAdvAudioCtrl;
-class QGridLayout;
+class Ui_OBSAdvAudio;
 
 // "Basic advanced audio"?  ...
 
@@ -15,10 +14,6 @@ class OBSBasicAdvAudio : public QDialog {
 	Q_OBJECT
 
 private:
-	QWidget *controlArea;
-	QGridLayout *mainLayout;
-	QPointer<QCheckBox> activeOnly;
-	QPointer<QCheckBox> usePercent;
 	OBSSignal sourceAddedSignal;
 	OBSSignal sourceRemovedSignal;
 	bool showInactive;
@@ -33,12 +28,14 @@ private:
 	static void OBSSourceAdded(void *param, calldata_t *calldata);
 	static void OBSSourceRemoved(void *param, calldata_t *calldata);
 
+	std::unique_ptr<Ui_OBSAdvAudio> ui;
+
 public slots:
 	void SourceAdded(OBSSource source);
 	void SourceRemoved(OBSSource source);
 
-	void SetVolumeType(bool percent);
-	void ActiveOnlyChanged(bool checked);
+	void on_usePercent_toggled(bool checked);
+	void on_activeOnly_toggled(bool checked);
 
 public:
 	OBSBasicAdvAudio(QWidget *parent);