The processor appended sweeps the GUI fed back to its own history, so its next replay published them twice and out of order, and the B-scan came out with rotated columns. Fed-back sweeps now stay out of that history, results are kept in timestamp order, picking the displayed combo only redraws and only new sweeps are recorded to disk.
73 lines
3.0 KiB
Python
73 lines
3.0 KiB
Python
"""Builder for switch timing and combo-selection settings section."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from PyQt6.QtWidgets import (
|
|
QButtonGroup,
|
|
QFormLayout,
|
|
QGroupBox,
|
|
QHBoxLayout,
|
|
QLabel,
|
|
QLineEdit,
|
|
QPushButton,
|
|
QVBoxLayout,
|
|
)
|
|
|
|
def build_switch_group(owner) -> QGroupBox:
|
|
"""Create switch timing field and two explicit combo-selection modes."""
|
|
group = QGroupBox("Switches")
|
|
layout = QVBoxLayout(group)
|
|
layout.setSpacing(8)
|
|
|
|
switch_defaults = owner._gui_defaults.switches
|
|
|
|
global_form = QFormLayout()
|
|
global_form.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow)
|
|
owner._settling_ms = QLineEdit(str(owner._defaults_config.runtime.settling_ms))
|
|
global_form.addRow("Settling ms", owner._settling_ms)
|
|
layout.addLayout(global_form)
|
|
|
|
owner._combos_text = QLineEdit(str(switch_defaults.combos_text))
|
|
owner._combos_text.setPlaceholderText("empty = full matrix, or input:output,input:output")
|
|
owner._run_combos_select_button = QPushButton("Select")
|
|
owner._run_combos_select_button.setCheckable(True)
|
|
|
|
combos_row = QHBoxLayout()
|
|
combos_row.setSpacing(8)
|
|
combos_row.addWidget(QLabel("Run combos"))
|
|
combos_row.addWidget(owner._combos_text, stretch=1)
|
|
combos_row.addWidget(owner._run_combos_select_button)
|
|
layout.addLayout(combos_row)
|
|
|
|
owner._single_combo_output = QLineEdit(str(switch_defaults.single_output))
|
|
owner._single_combo_output.setPlaceholderText("0")
|
|
owner._single_combo_input = QLineEdit(str(switch_defaults.single_input))
|
|
owner._single_combo_input.setPlaceholderText("0")
|
|
owner._single_combo_select_button = QPushButton("Select")
|
|
owner._single_combo_select_button.setCheckable(True)
|
|
|
|
single_row = QHBoxLayout()
|
|
single_row.setSpacing(8)
|
|
single_row.addWidget(QLabel("Single combo"))
|
|
single_row.addWidget(QLabel("Input"))
|
|
single_row.addWidget(owner._single_combo_input)
|
|
single_row.addWidget(QLabel("Output"))
|
|
single_row.addWidget(owner._single_combo_output)
|
|
single_row.addWidget(owner._single_combo_select_button)
|
|
layout.addLayout(single_row)
|
|
|
|
owner._combo_select_group = QButtonGroup(group)
|
|
owner._combo_select_group.setExclusive(True)
|
|
owner._combo_select_group.addButton(owner._run_combos_select_button)
|
|
owner._combo_select_group.addButton(owner._single_combo_select_button)
|
|
|
|
owner._run_combos_select_button.clicked.connect(lambda: owner._set_combo_selection_mode("text"))
|
|
owner._single_combo_select_button.clicked.connect(lambda: owner._set_combo_selection_mode("single"))
|
|
# The live processing config has no combo: picking another one only changes which
|
|
# B-scan is shown (and, outside matrix mode, the combo of the next run).
|
|
owner._single_combo_output.editingFinished.connect(owner._on_bscan_display_combo_changed)
|
|
owner._single_combo_input.editingFinished.connect(owner._on_bscan_display_combo_changed)
|
|
owner._set_combo_selection_mode(str(switch_defaults.combo_mode))
|
|
|
|
return group
|