eismultiplexer-qt/triggerwidget.cpp
2025-10-13 14:08:43 +02:00

96 lines
2.5 KiB
C++

#include "triggerwidget.h"
#include <QDebug>
#include <QMessageBox>
#include <eismultiplexer.h>
TriggerWidget::TriggerWidget(uint16_t deviceSerial, uint16_t triggerNumber,
std::shared_ptr<struct eismultiplexer> multiplexer,
QWidget *parent):
QWidget(parent),
deviceSerial(deviceSerial),
triggerNumber(triggerNumber),
multiplexer(multiplexer),
inputCheckbox("Input"),
levelCheckbox("Level"),
devicelabel(QString::asprintf("Device %04u", deviceSerial)),
triggerlabel(QString::asprintf("Trigger %u", triggerNumber))
{
hlayout.addLayout(&labellayout);
vlayout.addLayout(&hlayout);
inputCheckbox.setChecked(true);
levelCheckbox.setEnabled(false);
labellayout.addWidget(&devicelabel);
labellayout.addWidget(&triggerlabel);
line.setFrameShape(QFrame::HLine);
line.setFrameShadow(QFrame::Sunken);
vlayout.addWidget(&line);
hlayout.addStretch();
hlayout.addWidget(&inputCheckbox);
hlayout.addWidget(&levelCheckbox);
connect(&inputCheckbox, &QCheckBox::toggled, this, &TriggerWidget::onInputToggled);
connect(&levelCheckbox, &QCheckBox::toggled, this, &TriggerWidget::onLevelToggled);
setFixedHeight(96);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setLayout(&vlayout);
// Initialize trigger state
updateTriggerState();
}
TriggerWidget::~TriggerWidget()
{
}
uint16_t TriggerWidget::getDeviceSerial() const
{
return deviceSerial;
}
uint16_t TriggerWidget::getTriggerNumber() const
{
return triggerNumber;
}
void TriggerWidget::onInputToggled(bool checked)
{
updateTriggerState();
}
void TriggerWidget::onLevelToggled(bool checked)
{
updateTriggerState();
}
void TriggerWidget::updateTriggerState()
{
trigger_state_t state;
if(inputCheckbox.isChecked())
{
levelCheckbox.blockSignals(true);
levelCheckbox.setChecked(false);
levelCheckbox.setEnabled(false);
levelCheckbox.blockSignals(false);
}
else
{
levelCheckbox.setEnabled(true);
state = levelCheckbox.isChecked() ? TRIGGER_HIGH : TRIGGER_LOW;
}
if (eismultiplexer_set_trigger_state(multiplexer.get(), triggerNumber, state) < 0) {
QMessageBox::warning(this, tr("Trigger Configuration Failed"),
tr("Failed to set trigger %1 on device %2").arg(triggerNumber).arg(deviceSerial));
qWarning() << "Failed to set trigger" << triggerNumber << "on device" << deviceSerial;
}
}