Fix trigger state handling

This commit is contained in:
Carl Philipp Klemm 2025-10-13 14:08:43 +02:00
parent c11630e50a
commit fd85e5b648

View file

@ -3,11 +3,11 @@
#include "triggerwidget.h" #include "triggerwidget.h"
#include <QDebug> #include <QDebug>
#include <QMessageBox> #include <QMessageBox>
#include <eismultiplexer.h>
TriggerWidget::TriggerWidget(uint16_t deviceSerial, uint16_t triggerNumber, TriggerWidget::TriggerWidget(uint16_t deviceSerial, uint16_t triggerNumber,
std::shared_ptr<struct eismultiplexer> multiplexer, std::shared_ptr<struct eismultiplexer> multiplexer,
QWidget *parent) QWidget *parent):
:
QWidget(parent), QWidget(parent),
deviceSerial(deviceSerial), deviceSerial(deviceSerial),
triggerNumber(triggerNumber), triggerNumber(triggerNumber),
@ -20,6 +20,9 @@ TriggerWidget::TriggerWidget(uint16_t deviceSerial, uint16_t triggerNumber,
hlayout.addLayout(&labellayout); hlayout.addLayout(&labellayout);
vlayout.addLayout(&hlayout); vlayout.addLayout(&hlayout);
inputCheckbox.setChecked(true);
levelCheckbox.setEnabled(false);
labellayout.addWidget(&devicelabel); labellayout.addWidget(&devicelabel);
labellayout.addWidget(&triggerlabel); labellayout.addWidget(&triggerlabel);
@ -59,41 +62,28 @@ uint16_t TriggerWidget::getTriggerNumber() const
void TriggerWidget::onInputToggled(bool checked) void TriggerWidget::onInputToggled(bool checked)
{ {
if (checked) { updateTriggerState();
// Set to input mode
if (eismultiplexer_set_trigger_state(multiplexer.get(), triggerNumber, TRIGGER_INPUT) < 0) {
QMessageBox::warning(this, tr("Trigger Configuration Failed"),
tr("Failed to set trigger %1 on device %2 to input mode").arg(triggerNumber).arg(deviceSerial));
qWarning() << "Failed to set trigger" << triggerNumber << "on device" << deviceSerial << "to input mode";
inputCheckbox.blockSignals(true);
inputCheckbox.setChecked(false);
inputCheckbox.blockSignals(false);
} else {
// When input is checked, level should be unchecked and disabled
levelCheckbox.blockSignals(true);
levelCheckbox.setChecked(false);
levelCheckbox.setEnabled(false);
levelCheckbox.blockSignals(false);
}
} else {
// Update the trigger state based on level checkbox
updateTriggerState();
}
} }
void TriggerWidget::onLevelToggled(bool checked) void TriggerWidget::onLevelToggled(bool checked)
{ {
if (!inputCheckbox.isChecked()) { updateTriggerState();
// Only update if not in input mode
updateTriggerState();
}
} }
void TriggerWidget::updateTriggerState() void TriggerWidget::updateTriggerState()
{ {
trigger_state_t state = TRIGGER_LOW; trigger_state_t state;
if (!inputCheckbox.isChecked() && levelCheckbox.isChecked()) { if(inputCheckbox.isChecked())
state = TRIGGER_HIGH; {
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) { if (eismultiplexer_set_trigger_state(multiplexer.get(), triggerNumber, state) < 0) {