"""Builder for switch timing and combo-selection settings section.""" from PyQt6.QtWidgets import ( QButtonGroup, QComboBox, QFormLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit, QPushButton, QVBoxLayout, ) 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.""" view = SectionView(QGroupBox("Switches")) group = view.group layout = QVBoxLayout(group) layout.setSpacing(8) switch_defaults = gui.switches global_form = QFormLayout() global_form.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow) settling_ms = view.add("_settling_ms", QLineEdit(str(config.runtime.settling_ms))) global_form.addRow("Settling (ms)", settling_ms) layout.addLayout(global_form) 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(combos_text, stretch=1) combos_row.addWidget(run_combos_select_button) layout.addLayout(combos_row) 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(single_combo_input) single_row.addWidget(QLabel("Output")) single_row.addWidget(single_combo_output) single_row.addWidget(single_combo_select_button) layout.addLayout(single_row) 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) 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 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)