UI: Add mute checkbox to volume control

This commit is contained in:
jp9000
2015-03-22 14:58:07 -07:00
parent 399eb6d330
commit 2e053c849b
2 changed files with 51 additions and 2 deletions

View File

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

View File

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