UI: Add mute checkbox to volume control
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include "volume-control.hpp"
|
||||
#include "qt-wrappers.hpp"
|
||||
#include "mute-checkbox.hpp"
|
||||
#include <util/platform.h>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
@@ -33,6 +34,15 @@ void VolControl::OBSVolumeLevel(void *data, calldata_t *calldata)
|
||||
Q_ARG(float, peakHold));
|
||||
}
|
||||
|
||||
void VolControl::OBSVolumeMuted(void *data, calldata_t *calldata)
|
||||
{
|
||||
VolControl *volControl = static_cast<VolControl*>(data);
|
||||
bool muted = calldata_bool(calldata, "muted");
|
||||
|
||||
QMetaObject::invokeMethod(volControl, "VolumeMuted",
|
||||
Q_ARG(bool, muted));
|
||||
}
|
||||
|
||||
void VolControl::VolumeChanged()
|
||||
{
|
||||
slider->blockSignals(true);
|
||||
@@ -44,9 +54,26 @@ void VolControl::VolumeChanged()
|
||||
|
||||
void VolControl::VolumeLevel(float mag, float peak, float peakHold)
|
||||
{
|
||||
if (obs_source_muted(source) || !obs_source_enabled(source)) {
|
||||
mag = 0.0f;
|
||||
peak = 0.0f;
|
||||
peakHold = 0.0f;
|
||||
}
|
||||
|
||||
volMeter->setLevels(mag, peak, peakHold);
|
||||
}
|
||||
|
||||
void VolControl::VolumeMuted(bool muted)
|
||||
{
|
||||
if (mute->isChecked() != muted)
|
||||
mute->setChecked(muted);
|
||||
}
|
||||
|
||||
void VolControl::SetMuted(bool checked)
|
||||
{
|
||||
obs_source_set_muted(source, checked);
|
||||
}
|
||||
|
||||
void VolControl::SliderChanged(int vol)
|
||||
{
|
||||
obs_fader_set_deflection(obs_fader, float(vol) * 0.01f);
|
||||
@@ -76,12 +103,14 @@ VolControl::VolControl(OBSSource source_)
|
||||
obs_fader (obs_fader_create(OBS_FADER_CUBIC)),
|
||||
obs_volmeter (obs_volmeter_create(OBS_FADER_LOG))
|
||||
{
|
||||
QHBoxLayout *volLayout = new QHBoxLayout();
|
||||
QVBoxLayout *mainLayout = new QVBoxLayout();
|
||||
QHBoxLayout *textLayout = new QHBoxLayout();
|
||||
|
||||
nameLabel = new QLabel();
|
||||
volLabel = new QLabel();
|
||||
volMeter = new VolumeMeter();
|
||||
mute = new MuteCheckBox();
|
||||
slider = new QSlider(Qt::Horizontal);
|
||||
|
||||
QFont font = nameLabel->font();
|
||||
@@ -101,11 +130,17 @@ VolControl::VolControl(OBSSource source_)
|
||||
textLayout->setAlignment(nameLabel, Qt::AlignLeft);
|
||||
textLayout->setAlignment(volLabel, Qt::AlignRight);
|
||||
|
||||
mute->setChecked(obs_source_muted(source));
|
||||
|
||||
volLayout->addWidget(slider);
|
||||
volLayout->addWidget(mute);
|
||||
volLayout->setSpacing(5);
|
||||
|
||||
mainLayout->setContentsMargins(4, 4, 4, 4);
|
||||
mainLayout->setSpacing(2);
|
||||
mainLayout->addItem(textLayout);
|
||||
mainLayout->addWidget(volMeter);
|
||||
mainLayout->addWidget(slider);
|
||||
mainLayout->addItem(volLayout);
|
||||
|
||||
setLayout(mainLayout);
|
||||
|
||||
@@ -115,8 +150,13 @@ VolControl::VolControl(OBSSource source_)
|
||||
signal_handler_connect(obs_volmeter_get_signal_handler(obs_volmeter),
|
||||
"levels_updated", OBSVolumeLevel, this);
|
||||
|
||||
signal_handler_connect(obs_source_get_signal_handler(source),
|
||||
"mute", OBSVolumeMuted, this);
|
||||
|
||||
QWidget::connect(slider, SIGNAL(valueChanged(int)),
|
||||
this, SLOT(SliderChanged(int)));
|
||||
QWidget::connect(mute, SIGNAL(clicked(bool)),
|
||||
this, SLOT(SetMuted(bool)));
|
||||
|
||||
obs_fader_attach_source(obs_fader, source);
|
||||
obs_volmeter_attach_source(obs_volmeter, source);
|
||||
@@ -133,6 +173,9 @@ VolControl::~VolControl()
|
||||
signal_handler_disconnect(obs_volmeter_get_signal_handler(obs_volmeter),
|
||||
"levels_updated", OBSVolumeLevel, this);
|
||||
|
||||
signal_handler_disconnect(obs_source_get_signal_handler(source),
|
||||
"mute", OBSVolumeMuted, this);
|
||||
|
||||
obs_fader_destroy(obs_fader);
|
||||
obs_volmeter_destroy(obs_volmeter);
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ private:
|
||||
float mag, peak, peakHold;
|
||||
QColor bkColor, magColor, peakColor, peakHoldColor;
|
||||
QTimer *resetTimer;
|
||||
|
||||
|
||||
public:
|
||||
explicit VolumeMeter(QWidget *parent = 0);
|
||||
void setLevels(float nmag, float npeak, float npeakHold);
|
||||
@@ -36,6 +36,7 @@ private slots:
|
||||
|
||||
class QLabel;
|
||||
class QSlider;
|
||||
class MuteCheckBox;
|
||||
|
||||
class VolControl : public QWidget {
|
||||
Q_OBJECT
|
||||
@@ -46,6 +47,7 @@ private:
|
||||
QLabel *volLabel;
|
||||
VolumeMeter *volMeter;
|
||||
QSlider *slider;
|
||||
MuteCheckBox *mute;
|
||||
float levelTotal;
|
||||
float levelCount;
|
||||
obs_fader_t *obs_fader;
|
||||
@@ -53,10 +55,14 @@ private:
|
||||
|
||||
static void OBSVolumeChanged(void *param, calldata_t *calldata);
|
||||
static void OBSVolumeLevel(void *data, calldata_t *calldata);
|
||||
static void OBSVolumeMuted(void *data, calldata_t *calldata);
|
||||
|
||||
private slots:
|
||||
void VolumeChanged();
|
||||
void VolumeMuted(bool muted);
|
||||
void VolumeLevel(float mag, float peak, float peakHold);
|
||||
|
||||
void SetMuted(bool checked);
|
||||
void SliderChanged(int vol);
|
||||
void updateText();
|
||||
|
||||
|
Reference in New Issue
Block a user