Fix trigger state handling
This commit is contained in:
parent
c11630e50a
commit
fd85e5b648
|
@ -3,11 +3,11 @@
|
|||
#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):
|
||||
QWidget(parent),
|
||||
deviceSerial(deviceSerial),
|
||||
triggerNumber(triggerNumber),
|
||||
|
@ -20,6 +20,9 @@ TriggerWidget::TriggerWidget(uint16_t deviceSerial, uint16_t triggerNumber,
|
|||
hlayout.addLayout(&labellayout);
|
||||
vlayout.addLayout(&hlayout);
|
||||
|
||||
inputCheckbox.setChecked(true);
|
||||
levelCheckbox.setEnabled(false);
|
||||
|
||||
labellayout.addWidget(&devicelabel);
|
||||
labellayout.addWidget(&triggerlabel);
|
||||
|
||||
|
@ -59,41 +62,28 @@ uint16_t TriggerWidget::getTriggerNumber() const
|
|||
|
||||
void TriggerWidget::onInputToggled(bool checked)
|
||||
{
|
||||
if (checked) {
|
||||
// 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
|
||||
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 {
|
||||
// Update the trigger state based on level checkbox
|
||||
updateTriggerState();
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerWidget::onLevelToggled(bool checked)
|
||||
{
|
||||
if (!inputCheckbox.isChecked()) {
|
||||
// Only update if not in input mode
|
||||
updateTriggerState();
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerWidget::updateTriggerState()
|
||||
{
|
||||
trigger_state_t state = TRIGGER_LOW;
|
||||
if (!inputCheckbox.isChecked() && levelCheckbox.isChecked()) {
|
||||
state = TRIGGER_HIGH;
|
||||
else
|
||||
{
|
||||
levelCheckbox.setEnabled(true);
|
||||
state = levelCheckbox.isChecked() ? TRIGGER_HIGH : TRIGGER_LOW;
|
||||
}
|
||||
|
||||
if (eismultiplexer_set_trigger_state(multiplexer.get(), triggerNumber, state) < 0) {
|
||||
|
|
Loading…
Reference in a new issue