1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#include "slxoutput.h"
#include "main.h"
SlxOutput::SlxOutput(QWidget *parent, const QString &id)
: unused(false),
QWidget(parent),
_id(id)
{
setupUi(this);
volumeSlider->setMaximum(65535);
volumeSlider->setSingleStep(200);
volumeSlider->setSingleStep(2000);
_volumeTimer.setInterval(100);
_volumeTimer.setSingleShot(true);
// Events
connect(muteToggleButton, &QToolButton::toggled, [this]() {
if (g_IgnoreGui)
return;
if (_sink.isEmpty())
return;
setMuted(_sink, muteToggleButton->isChecked());
});
connect(defaultToggleButton, &QToolButton::toggled, [this]() {
if (g_IgnoreGui)
return;
if (!defaultToggleButton->isChecked()) {
defaultToggleButton->setChecked(true);
}
if (_sink.isEmpty()) {
enableCard(_card, _port);
} else {
enableSink(_sink, _port);
}
});
connect(volumeSlider, &QSlider::sliderMoved, this, &SlxOutput::volumeSliderChanged);
connect(volumeSlider, &QSlider::valueChanged, this, &SlxOutput::volumeSliderChanged);
connect(&_volumeTimer, &QTimer::timeout, [this]() {
if (g_IgnoreGui || !isSink())
return;
setSinkVolume(_sink, volumeSlider->value());
});
}
SlxOutput::~SlxOutput()
{
}
void SlxOutput::volumeSliderChanged(int value)
{
if (g_IgnoreGui)
return;
// Update slider every 100ms
if (_volumeTimer.isActive())
return;
_volumeTimer.start();
}
void SlxOutput::updateOutput(const QString &name, bool isDefault, bool isMuted, int volume, const QString &card, const QString &sink, const QString &port)
{
nameLabel->setText(name);
if (sink != _sink) {
QFont fi = nameLabel->font();
fi.setBold(!sink.isEmpty());
nameLabel->setFont(fi);
}
_card = card;
_sink = sink;
_port = port;
defaultToggleButton->setChecked(isDefault);
muteToggleButton->setChecked(isMuted);
if (volume == -1) {
volumeSlider->setEnabled(false);
} else {
if (volume > volumeSlider->maximum()) {
volumeSlider->setMaximum(volume);
}
volumeSlider->setValue(volume);
volumeSlider->setEnabled(isSink());
}
muteToggleButton->setEnabled(isSink());
unused = false; // Entry was updated, so it's being used
}
|