Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/ars_wireworks/ui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions src/ars_wireworks/ui/sweep_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
24 changes: 24 additions & 0 deletions tests/test_sweep.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Loading