Source code for src.data_acquisition.sequencers.text_screen_sequencer

from logging import Logger
from typing import Callable, Generic, Optional, Sequence, TypeVar

from ..event_manager import EventManager
from ..eventful_screen import EventfulScreen
from ..gui import Gui
from ..screens import TextScreen
from .errors import EmptyInitialScreenSequenceError, ScreenSequencerStopIteration
from .simple_screen_sequencer import SimpleScreenSequencer

T = TypeVar("T")


[docs] class TextScreenSequencer(SimpleScreenSequencer[T], Generic[T]): def __init__( self, *, gui: Gui, event_manager: EventManager[T], texts: Sequence[str], screen_show_callback: Callable[[str], None] = lambda _: None, logger: Optional[Logger] = None, ) -> None: if not texts: raise EmptyInitialScreenSequenceError("Text sequence is empty.") super().__init__( gui=gui, screen_show_callback=screen_show_callback, logger=logger ) self._event_manager = event_manager self._texts = texts self._idx = 0 def _get_next(self) -> EventfulScreen[T]: if self._idx >= len(self._texts): raise ScreenSequencerStopIteration text = self._texts[self._idx] screen = TextScreen(gui=self._gui, text=text) cloned_event_manager = self._event_manager.clone() result = EventfulScreen( screen=screen, event_manager=cloned_event_manager, screen_show_callback=lambda: self._screen_show_callback(text), ) self._idx += 1 return result