Fix trigger state handling
This commit is contained in:
parent
c11630e50a
commit
fd85e5b648
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue