Polish GUI design
This commit is contained in:
@@ -26,6 +26,7 @@ from PyQt6.QtWidgets import (
|
||||
import numpy as np
|
||||
import pyqtgraph as pg
|
||||
|
||||
from python_app.gui.controllers.renderers.common import create_plot
|
||||
from python_app.models.gui_profile_schema import GuiPreprocessDialogStateModel
|
||||
from python_app.models.dataset_model import TraceData
|
||||
from python_app.orchestration.preprocess_assets import (
|
||||
@@ -113,7 +114,7 @@ class PreprocessDialog(QDialog):
|
||||
layout.addLayout(self._build_median_sweep_row(group))
|
||||
layout.addWidget(self._build_radar_config_group(group))
|
||||
|
||||
layout.addWidget(self._build_selector_group("S21", tuple(PREPROCESS_ASSET_NAMES), group))
|
||||
layout.addLayout(self._build_selectors(group))
|
||||
return group
|
||||
|
||||
def _build_median_sweep_row(self, parent: QGroupBox) -> QHBoxLayout:
|
||||
@@ -141,7 +142,7 @@ class PreprocessDialog(QDialog):
|
||||
self._radar_config_dir_input = QLineEdit(group)
|
||||
self._radar_config_dir_input.setPlaceholderText("Directory with radar JSON configs")
|
||||
self._radar_config_dir_input.editingFinished.connect(self.radar_config_dir_changed.emit)
|
||||
browse_button = QPushButton("Browse...", group)
|
||||
browse_button = QPushButton("Browse…", group)
|
||||
browse_button.clicked.connect(self._choose_radar_config_dir)
|
||||
dir_row.addWidget(QLabel("Directory"))
|
||||
dir_row.addWidget(self._radar_config_dir_input, stretch=1)
|
||||
@@ -160,14 +161,13 @@ class PreprocessDialog(QDialog):
|
||||
layout.addWidget(self._use_all_radar_configs_checkbox)
|
||||
return group
|
||||
|
||||
def _build_selector_group(self, title: str, keys: tuple[str, ...], parent: QGroupBox) -> QGroupBox:
|
||||
"""Build one selector subgroup for a channel family."""
|
||||
group = QGroupBox(title, parent)
|
||||
form = QFormLayout(group)
|
||||
def _build_selectors(self, parent: QGroupBox) -> QFormLayout:
|
||||
"""Build the S21 set selectors in capture order."""
|
||||
form = QFormLayout()
|
||||
form.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow)
|
||||
|
||||
for key in keys:
|
||||
combo = QComboBox(group)
|
||||
for key in PREPROCESS_ASSET_NAMES:
|
||||
combo = QComboBox(parent)
|
||||
combo.setPlaceholderText("<not selected>")
|
||||
combo.setProperty("optional", key not in REQUIRED_PREPROCESS_ASSET_KEYS)
|
||||
self._set_combo_items(combo, [], "")
|
||||
@@ -175,7 +175,7 @@ class PreprocessDialog(QDialog):
|
||||
self._set_combos[key] = combo
|
||||
field = combo
|
||||
if key == "s21_object_calibration":
|
||||
field = QWidget(group)
|
||||
field = QWidget(parent)
|
||||
row = QHBoxLayout(field)
|
||||
row.setContentsMargins(0, 0, 0, 0)
|
||||
row.addWidget(combo, stretch=1)
|
||||
@@ -183,12 +183,12 @@ class PreprocessDialog(QDialog):
|
||||
self._create_object_calibration_button.setToolTip("Calculate a MIMO calibration from reflector measurements.")
|
||||
self._create_object_calibration_button.clicked.connect(self.create_object_calibration_requested.emit)
|
||||
row.addWidget(self._create_object_calibration_button)
|
||||
form.addRow(self._asset_row_label(key), field)
|
||||
return group
|
||||
form.addRow(preprocess_asset_display_name(key).capitalize(), field)
|
||||
return form
|
||||
|
||||
def _build_sequence_group(self) -> QGroupBox:
|
||||
"""Build sequential-capture controls and capture log."""
|
||||
group = QGroupBox("Sequential Capture (Fill Full N*M)", self)
|
||||
group = QGroupBox("Capture All Antenna Pairs", self)
|
||||
layout = QGridLayout(group)
|
||||
|
||||
self._active_kind_label = QLabel("<none>", group)
|
||||
@@ -239,6 +239,7 @@ class PreprocessDialog(QDialog):
|
||||
self._save_sequence_button.setEnabled(False)
|
||||
|
||||
self._abort_button = QPushButton("Abort Sequence", parent)
|
||||
self._abort_button.setProperty("role", "destructive")
|
||||
self._abort_button.clicked.connect(self.abort_sequence_requested.emit)
|
||||
self._abort_button.setEnabled(False)
|
||||
|
||||
@@ -270,7 +271,6 @@ class PreprocessDialog(QDialog):
|
||||
|
||||
placeholder = QLabel("Preview will appear after the first successful capture.", host)
|
||||
placeholder.setWordWrap(True)
|
||||
placeholder.setMinimumHeight(320)
|
||||
layout.addWidget(placeholder)
|
||||
|
||||
self._preview_host_layout = layout
|
||||
@@ -531,8 +531,7 @@ class PreprocessDialog(QDialog):
|
||||
@staticmethod
|
||||
def _build_preview_axis(left_label: str, left_units: str) -> "pg.PlotWidget":
|
||||
"""Return one PlotWidget configured with the project's preview style."""
|
||||
plot = pg.PlotWidget(background="#101418", enableMenu=False)
|
||||
plot.showGrid(x=True, y=True, alpha=0.2)
|
||||
plot = create_plot()
|
||||
plot.setLabel("bottom", "Frequency", units="Hz")
|
||||
plot.setLabel("left", left_label, units=left_units)
|
||||
plot.setMinimumHeight(320)
|
||||
@@ -554,11 +553,6 @@ class PreprocessDialog(QDialog):
|
||||
self._radar_config_dir_input.setText(selected_dir)
|
||||
self.radar_config_dir_changed.emit()
|
||||
|
||||
@staticmethod
|
||||
def _asset_row_label(key: str) -> str:
|
||||
"""Return short selector label for one preprocess asset."""
|
||||
return preprocess_asset_display_name(key)
|
||||
|
||||
@staticmethod
|
||||
def _set_combo_items(combo: QComboBox, names: list[str], current_text: str) -> None:
|
||||
"""Replace combo contents and keep previous value when still available."""
|
||||
|
||||
Reference in New Issue
Block a user