#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 }