Rework radar system

This commit is contained in:
Ayzen
2026-10-06 12:32:26 +03:00
parent 552cdc688a
commit 5bb86b7165
299 changed files with 13537 additions and 27763 deletions
@@ -1,9 +1,8 @@
"""Builder for switch timing and combo-selection settings section."""
from __future__ import annotations
from PyQt6.QtWidgets import (
QButtonGroup,
QComboBox,
QFormLayout,
QGroupBox,
QHBoxLayout,
@@ -13,64 +12,71 @@ from PyQt6.QtWidgets import (
QVBoxLayout,
)
def build_switch_group(owner) -> QGroupBox:
from python_app.gui.controllers.sections.views import SwitchView, SectionView
from python_app.models.gui_profile_schema import GuiStateModel
from python_app.models.run_config_schema import RunConfigModel
def build_switch_group(config: RunConfigModel, gui: GuiStateModel) -> SwitchView:
"""Create switch timing field and two explicit combo-selection modes."""
group = QGroupBox("Switches")
view = SectionView(QGroupBox("Switches"))
group = view.group
layout = QVBoxLayout(group)
layout.setSpacing(8)
switch_defaults = owner._gui_defaults.switches
switch_defaults = gui.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)
settling_ms = view.add("_settling_ms", QLineEdit(str(config.runtime.settling_ms)))
global_form.addRow("Settling ms", 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_text = view.add("_combos_text", QLineEdit(str(switch_defaults.combos_text)))
combos_text.setPlaceholderText("empty = full matrix, or input:output,input:output")
run_combos_select_button = QPushButton("Select")
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)
combos_row.addWidget(combos_text, stretch=1)
combos_row.addWidget(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)
owner._next_combo_button = QPushButton("Next combination")
owner._next_combo_button.setToolTip("Advance through input/output pairs and redraw the selected B-scan.")
single_combo_output = view.add("_single_combo_output", QLineEdit(str(switch_defaults.single_output)))
single_combo_output.setPlaceholderText("0")
single_combo_input = view.add("_single_combo_input", QLineEdit(str(switch_defaults.single_input)))
single_combo_input.setPlaceholderText("0")
single_combo_select_button = QPushButton("Select")
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(single_combo_input)
single_row.addWidget(QLabel("Output"))
single_row.addWidget(owner._single_combo_output)
single_row.addWidget(owner._single_combo_select_button)
single_row.addWidget(owner._next_combo_button)
single_row.addWidget(single_combo_output)
single_row.addWidget(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)
combo_select_group = QButtonGroup(group)
combo_select_group.setExclusive(True)
combo_select_group.addButton(run_combos_select_button)
combo_select_group.addButton(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"))
owner._next_combo_button.clicked.connect(owner._select_next_combo)
# 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))
display_row = QHBoxLayout()
display_row.addWidget(QLabel("B-scan pair"))
display_combo = view.add("_display_combo", QComboBox())
display_combo.setEnabled(False)
display_row.addWidget(display_combo, stretch=1)
next_combo_button = QPushButton("Next combination")
next_combo_button.setEnabled(False)
display_row.addWidget(next_combo_button)
layout.addLayout(display_row)
return group
return SwitchView(group=group, fields=view.fields, select_text=run_combos_select_button,
select_single=single_combo_select_button, combos=combos_text,
single_input=single_combo_input, single_output=single_combo_output,
display_combo=display_combo, next_combo=next_combo_button)