diff --git a/src/ars_wireworks/ui/main_window.py b/src/ars_wireworks/ui/main_window.py index efb5de4..8faba7a 100644 --- a/src/ars_wireworks/ui/main_window.py +++ b/src/ars_wireworks/ui/main_window.py @@ -149,6 +149,13 @@ {"dipole", "inverted_v", "ocfd", "random_wire", "vertical"} ) +#: Shown in the Sweep tab in Basic Mode, where the sweep controls are hidden — +#: the frequency sweep is an Advanced-Mode feature (spec §8). +_SWEEP_BASIC_PROMPT = ( + "The frequency sweep is an Advanced-Mode feature.\n" + "Use View → Promote to Advanced Mode to run one." +) + #: QSettings key for the persisted window geometry (spec §10). _GEOMETRY_KEY = "window/geometry" @@ -539,6 +546,8 @@ def _promote_to_advanced(self) -> None: self._advanced_radials_box.setVisible(True) self._advanced_yagi_box.setVisible(True) self._advanced_path_box.setVisible(True) + # The sweep controls are now available — drop the Basic-Mode hint. + self._sweep_view.clear() centre = self._frequency.value() self._sweep_start.setValue(centre * 0.95) self._sweep_stop.setValue(centre * 1.05) @@ -1435,6 +1444,10 @@ def _build_central_widget(self) -> QWidget: self._buildsheet_view = BuildSheetView() self._path_view = PathView() self._sweep_view = SweepView() + if not self._advanced: + # The sweep controls are Advanced-only, so point Basic-Mode users + # to them instead of an empty "run a sweep" prompt with no button. + self._sweep_view.clear(_SWEEP_BASIC_PROMPT) results_tabs = QTabWidget() results_tabs.addTab(self._output, "Summary") results_tabs.addTab(self._pattern_view, "Radiation pattern") @@ -1772,6 +1785,8 @@ def _silently_promote_to_advanced(self) -> None: self._advanced_radials_box.setVisible(True) self._advanced_yagi_box.setVisible(True) self._advanced_path_box.setVisible(True) + # The sweep controls are now available — drop the Basic-Mode hint. + self._sweep_view.clear() def _reset_loaded_components( self, diff --git a/src/ars_wireworks/ui/sweep_view.py b/src/ars_wireworks/ui/sweep_view.py index 37a784a..2fe5757 100644 --- a/src/ars_wireworks/ui/sweep_view.py +++ b/src/ars_wireworks/ui/sweep_view.py @@ -34,7 +34,7 @@ def show_sweep(self, sweep: SweepResults) -> None: draw_sweep_plot(self._figure, sweep) self._canvas.draw_idle() - def clear(self) -> None: - """Show the placeholder — no sweep has run yet.""" - draw_placeholder(self._figure, _PROMPT) + def clear(self, message: str = _PROMPT) -> None: + """Show a placeholder message — the pre-run (or unavailable) state.""" + draw_placeholder(self._figure, message) self._canvas.draw_idle() diff --git a/tests/test_sweep.py b/tests/test_sweep.py index 134f048..64fa764 100644 --- a/tests/test_sweep.py +++ b/tests/test_sweep.py @@ -47,3 +47,27 @@ def test_main_window_runs_a_sweep(qapp) -> None: window._sweep_steps.setValue(3) window._on_run_sweep() assert window._sweep_view._figure.axes[0].lines + + +def _placeholder_text(window) -> str: + texts = window._sweep_view._figure.axes[0].texts + return texts[0].get_text() if texts else "" + + +def test_basic_mode_sweep_tab_points_to_advanced(qapp) -> None: + from ars_wireworks.ui.main_window import MainWindow + + window = MainWindow() + # Basic Mode by default: the Sweep tab explains the controls are Advanced. + assert not window._advanced + assert "Advanced Mode" in _placeholder_text(window) + + +def test_promoting_drops_the_basic_sweep_hint(qapp) -> None: + from ars_wireworks.ui.main_window import MainWindow + + window = MainWindow() + window._silently_promote_to_advanced() + # After promotion the hint is gone — the ready-to-run prompt shows instead. + assert "Advanced Mode" not in _placeholder_text(window) + assert "sweep" in _placeholder_text(window).lower()