diff --git a/python_payload/st3m/run.py b/python_payload/st3m/run.py index fb953514920daabe0a10e2e33a8bb96dc0b620e4..ae95af878e7c75c2230e780b6ba68307883dc988 100644 --- a/python_payload/st3m/run.py +++ b/python_payload/st3m/run.py @@ -56,11 +56,11 @@ def _make_bundle_menu(bundles: List[BundleMetadata], kind: str) -> SimpleMenu: return SimpleMenu(entries) -def _make_compositor(reactor: Reactor, r: Responder) -> overlays.Compositor: +def _make_compositor(reactor: Reactor, vm: ViewManager) -> overlays.Compositor: """ Set up top-level compositor (for combining viewmanager with overlays). """ - compositor = overlays.Compositor(r) + compositor = overlays.Compositor(vm) volume = overlays.OverlayVolume() compositor.add_overlay(volume) diff --git a/python_payload/st3m/ui/elements/overlays.py b/python_payload/st3m/ui/elements/overlays.py index a5db8189e87b8110332b8fb72e5788022c151023..83f9780b1cbf356002ffde874f6bd0a3c6b0a733 100644 --- a/python_payload/st3m/ui/elements/overlays.py +++ b/python_payload/st3m/ui/elements/overlays.py @@ -9,6 +9,7 @@ etc. from st3m import Responder, InputState, Reactor from st3m.goose import Dict, Enum, List, ABCBase, abstractmethod, Optional from st3m.utils import tau +from st3m.ui.view import ViewManager from ctx import Context import math @@ -43,11 +44,11 @@ class Overlay(Responder): class Compositor(Responder): """ - A Compositor blends together some main Responder (usually a ViewManager) - alongside with active Overlays. Overlays can be enabled/disabled by kind. + A Compositor blends together some ViewManager alongside with active + Overlays. Overlays can be enabled/disabled by kind. """ - def __init__(self, main: Responder): + def __init__(self, main: ViewManager): self.main = main self.overlays: Dict[OverlayKind, List[Responder]] = {} self.enabled: Dict[OverlayKind, bool] = { @@ -61,6 +62,8 @@ class Compositor(Responder): for kind in _all_kinds: if not self.enabled.get(kind, False): continue + if kind == OverlayKind.Indicators and not self.main.wants_icons(): + continue for overlay in self.overlays.get(kind, []): res.append(overlay) return res diff --git a/python_payload/st3m/ui/menu.py b/python_payload/st3m/ui/menu.py index 66c82ca9db515cdc2ace886b42cbdd94ec285093..efcc8c59207115210d1e6b826dad8839b2d8f63d 100644 --- a/python_payload/st3m/ui/menu.py +++ b/python_payload/st3m/ui/menu.py @@ -211,3 +211,6 @@ class MenuController(BaseView): Automatically called on canonical user input. """ self._items[self._scroll_controller.target_position()].press(self.vm) + + def show_icons(self) -> bool: + return True diff --git a/python_payload/st3m/ui/view.py b/python_payload/st3m/ui/view.py index b3d8ba013a94d279779bb2580e9f34aa9f53981c..90aef9e57492e998a05d4510f10ce39410cd4f17 100644 --- a/python_payload/st3m/ui/view.py +++ b/python_payload/st3m/ui/view.py @@ -25,6 +25,13 @@ class View(Responder): """ pass + def show_icons(self) -> bool: + """ + View should return True if it accepts having system icons drawn on top + if it. + """ + return False + class BaseView(View): """ @@ -229,3 +236,12 @@ class ViewManager(Responder): return r = self._history.pop() self.replace(r, override_vt) + + def wants_icons(self) -> bool: + """ + Returns true if the current active view wants icon to be drawn on top of it. + """ + if self._incoming is not None: + return self._incoming.show_icons() + else: + return True