eismultiplexer-qt/channelwidget.cpp
Carl Philipp Klemm 5c5efb5029 Support windows
2025-08-25 17:00:16 +02:00

98 lines
2.6 KiB
C++

#include "channelwidget.h"
#include <QDebug>
#include <QMessageBox>
ChannelWidget::ChannelWidget(uint16_t deviceSerial, uint16_t channelNumber,
std::shared_ptr<struct eismultiplexer> multiplexer,
QWidget *parent)
:
QWidget(parent),
deviceSerial(deviceSerial),
channelNumber(channelNumber),
multiplexer(multiplexer),
checkbox("Enable"),
devicelabel(QString::asprintf("Device %04u", deviceSerial)),
channellabel(QString::asprintf("Channel %u", channelNumber)),
ganglabel("Ganged:")
{
hlayout.addLayout(&labellayout);
vlayout.addLayout(&hlayout);
labellayout.addWidget(&devicelabel);
labellayout.addWidget(&channellabel);
line.setGeometry(QRect(320, 150, 118, 3));
line.setFrameShape(QFrame::HLine);
line.setFrameShadow(QFrame::Sunken);
vlayout.addWidget(&line);
gangcombo.addItem("Unganged");
hlayout.addStretch();
hlayout.addWidget(&ganglabel);
hlayout.addWidget(&gangcombo);
hlayout.addWidget(&checkbox);
connect(&checkbox, &QCheckBox::toggled, this, &ChannelWidget::onChannelToggled);
setFixedHeight(96);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setLayout(&vlayout);
}
ChannelWidget::~ChannelWidget()
{
// Nothing to clean up
}
uint16_t ChannelWidget::getDeviceSerial() const
{
return deviceSerial;
}
uint16_t ChannelWidget::getChannelNumber() const
{
return channelNumber;
}
bool ChannelWidget::isChecked() const
{
return checkbox.isChecked();
}
void ChannelWidget::onChannelToggled(bool checked)
{
if (checked)
{
// Emit signal before actually turning on the channel
emit channelAboutToBeTurnedOn(deviceSerial, channelNumber);
}
channel_t channelFlag = static_cast<channel_t>(1 << channelNumber);
if (checked)
{
if (eismultiplexer_connect_channel(multiplexer.get(), 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.blockSignals(true);
checkbox.setChecked(false);
setEnabled(false); // Gray out the widget
}
}
else
{
if (eismultiplexer_disconnect_channel(multiplexer.get(), 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.blockSignals(true);
checkbox.setChecked(true);
setEnabled(false); // Gray out the widget
}
}
}