eismultiplexer-qt/channelwidget.cpp

57 lines
2 KiB
C++

#include "channelwidget.h"
#include <QDebug>
#include <QMessageBox>
ChannelWidget::ChannelWidget(uint16_t deviceSerial, uint16_t channelNumber, struct eismultiplexer* multiplexer,
QWidget *parent)
: QWidget(parent), deviceSerial(deviceSerial), channelNumber(channelNumber), multiplexer(multiplexer)
{
// Create layout
QHBoxLayout* layout = new QHBoxLayout(this);
// Create label with device serial and channel number
label = new QLabel(QString("Device %1, Channel %2").arg(deviceSerial).arg(channelNumber), this);
layout->addWidget(label);
// Create checkbox
checkbox = new QCheckBox(this);
layout->addWidget(checkbox);
// Connect checkbox signal
connect(checkbox, &QCheckBox::toggled, this, &ChannelWidget::onChannelToggled);
// Set layout
setLayout(layout);
}
ChannelWidget::~ChannelWidget()
{
// Nothing to clean up
}
void ChannelWidget::onChannelToggled(bool checked)
{
channel_t channelFlag = static_cast<channel_t>(1 << channelNumber);
if (checked) {
if (eismultiplexer_connect_channel(multiplexer, channelFlag) < 0) {
QMessageBox::warning(this, tr("Connection Failed"),
tr("Failed to connect channel %1 on device %2").arg(channelNumber).arg(deviceSerial));
qWarning() << "Failed to connect channel" << channelNumber << "on device" << deviceSerial;
checkbox->setChecked(false);
setEnabled(false); // Gray out the widget
}
} else {
if (eismultiplexer_disconnect_channel(multiplexer, channelFlag) < 0) {
QMessageBox::warning(this, tr("Disconnection Failed"),
tr("Failed to disconnect channel %1 on device %2").arg(channelNumber).arg(deviceSerial));
qWarning() << "Failed to disconnect channel" << channelNumber << "on device" << deviceSerial;
checkbox->setChecked(true);
setEnabled(false); // Gray out the widget
}
}
}