UI: Add "Active Sources Only" option to adv audio props
Allows the ability to modify the properties of inactive audio sources which may in scenes other than the one that is currently active.
This commit is contained in:
@@ -876,6 +876,7 @@ Basic.Settings.Advanced.AutoRemux.MP4="(record as mkv)"
|
||||
|
||||
# advanced audio properties
|
||||
Basic.AdvAudio="Advanced Audio Properties"
|
||||
Basic.AdvAudio.ActiveOnly="Active Sources Only"
|
||||
Basic.AdvAudio.Name="Name"
|
||||
Basic.AdvAudio.Volume="Volume"
|
||||
Basic.AdvAudio.Mono="Mono"
|
||||
|
@@ -18,7 +18,8 @@ OBSBasicAdvAudio::OBSBasicAdvAudio(QWidget *parent)
|
||||
sourceAddedSignal(obs_get_signal_handler(), "source_activate",
|
||||
OBSSourceAdded, this),
|
||||
sourceRemovedSignal(obs_get_signal_handler(), "source_deactivate",
|
||||
OBSSourceRemoved, this)
|
||||
OBSSourceRemoved, this),
|
||||
showInactive(false)
|
||||
{
|
||||
QScrollArea *scrollArea;
|
||||
QVBoxLayout *vlayout;
|
||||
@@ -70,7 +71,12 @@ OBSBasicAdvAudio::OBSBasicAdvAudio(QWidget *parent)
|
||||
|
||||
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);
|
||||
|
||||
@@ -80,6 +86,9 @@ OBSBasicAdvAudio::OBSBasicAdvAudio(QWidget *parent)
|
||||
vlayout->addLayout(buttonLayout);
|
||||
setLayout(vlayout);
|
||||
|
||||
connect(activeOnly, SIGNAL(clicked(bool)), this,
|
||||
SLOT(ActiveOnlyChanged(bool)));
|
||||
|
||||
connect(closeButton, &QPushButton::clicked, [this]() { close(); });
|
||||
|
||||
installEventFilter(CreateShortcutFilter());
|
||||
@@ -115,7 +124,8 @@ bool OBSBasicAdvAudio::EnumSources(void *param, obs_source_t *source)
|
||||
OBSBasicAdvAudio *dialog = reinterpret_cast<OBSBasicAdvAudio *>(param);
|
||||
uint32_t flags = obs_source_get_output_flags(source);
|
||||
|
||||
if ((flags & OBS_SOURCE_AUDIO) != 0 && obs_source_active(source))
|
||||
if ((flags & OBS_SOURCE_AUDIO) != 0 &&
|
||||
(dialog->showInactive || obs_source_active(source)))
|
||||
dialog->AddAudioSource(source);
|
||||
|
||||
return true;
|
||||
@@ -139,6 +149,10 @@ void OBSBasicAdvAudio::OBSSourceRemoved(void *param, calldata_t *calldata)
|
||||
|
||||
inline void OBSBasicAdvAudio::AddAudioSource(obs_source_t *source)
|
||||
{
|
||||
for (size_t i = 0; i < controls.size(); i++) {
|
||||
if (controls[i]->GetSource() == source)
|
||||
return;
|
||||
}
|
||||
OBSAdvAudioCtrl *control = new OBSAdvAudioCtrl(mainLayout, source);
|
||||
|
||||
InsertQObjectByName(controls, control);
|
||||
@@ -217,3 +231,46 @@ void OBSBasicAdvAudio::ShowContextMenu(const QPoint &pos)
|
||||
|
||||
contextMenu->exec(mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void OBSBasicAdvAudio::ActiveOnlyChanged(bool checked)
|
||||
{
|
||||
SetShowInactive(!checked);
|
||||
}
|
||||
|
||||
void OBSBasicAdvAudio::SetShowInactive(bool show)
|
||||
{
|
||||
if (showInactive == show)
|
||||
return;
|
||||
|
||||
showInactive = show;
|
||||
activeOnly->setChecked(!showInactive);
|
||||
sourceAddedSignal.Disconnect();
|
||||
sourceRemovedSignal.Disconnect();
|
||||
|
||||
if (showInactive) {
|
||||
sourceAddedSignal.Connect(obs_get_signal_handler(),
|
||||
"source_create", OBSSourceAdded,
|
||||
this);
|
||||
sourceRemovedSignal.Connect(obs_get_signal_handler(),
|
||||
"source_remove", OBSSourceRemoved,
|
||||
this);
|
||||
|
||||
obs_enum_sources(EnumSources, this);
|
||||
} else {
|
||||
sourceAddedSignal.Connect(obs_get_signal_handler(),
|
||||
"source_activate", OBSSourceAdded,
|
||||
this);
|
||||
sourceRemovedSignal.Connect(obs_get_signal_handler(),
|
||||
"source_deactivate",
|
||||
OBSSourceRemoved, this);
|
||||
|
||||
for (size_t i = 0; i < controls.size(); i++) {
|
||||
const auto source = controls[i]->GetSource();
|
||||
if (!obs_source_active(source)) {
|
||||
delete controls[i];
|
||||
controls.erase(controls.begin() + i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,8 @@
|
||||
#include <obs.hpp>
|
||||
#include <QDialog>
|
||||
#include <vector>
|
||||
#include <QCheckBox>
|
||||
#include <QPointer>
|
||||
|
||||
class OBSAdvAudioCtrl;
|
||||
class QGridLayout;
|
||||
@@ -15,8 +17,10 @@ class OBSBasicAdvAudio : public QDialog {
|
||||
private:
|
||||
QWidget *controlArea;
|
||||
QGridLayout *mainLayout;
|
||||
QPointer<QCheckBox> activeOnly;
|
||||
OBSSignal sourceAddedSignal;
|
||||
OBSSignal sourceRemovedSignal;
|
||||
bool showInactive;
|
||||
|
||||
std::vector<OBSAdvAudioCtrl *> controls;
|
||||
|
||||
@@ -33,8 +37,10 @@ public slots:
|
||||
|
||||
void ShowContextMenu(const QPoint &pos);
|
||||
void SetVolumeType();
|
||||
void ActiveOnlyChanged(bool checked);
|
||||
|
||||
public:
|
||||
OBSBasicAdvAudio(QWidget *parent);
|
||||
~OBSBasicAdvAudio();
|
||||
void SetShowInactive(bool showInactive);
|
||||
};
|
||||
|
Reference in New Issue
Block a user