pull/35003/head
Cameron Clough 1 week ago
parent ff1fc61d78
commit e5850df37b
  1. 21
      system/ui/lib/wrapper.py

@ -1,21 +1,32 @@
import threading import threading
import time import time
from abc import ABC, abstractmethod
from typing import Generic, TypeVar
from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.application import gui_app
class Wrapper: class Renderer(ABC):
def __init__(self, title: str, renderer_cls, *args): @abstractmethod
def render(self) -> None:
pass
T = TypeVar("T", bound=Renderer)
class Wrapper(Generic[T]):
def __init__(self, title: str, renderer_cls: type[T], *args):
self._title = title self._title = title
self._renderer_class = renderer_cls self._renderer_class = renderer_cls
self._args = args self._renderer_args = args
self._renderer = None self._renderer: T | None = None
self._stop_event = threading.Event() self._stop_event = threading.Event()
self._thread = threading.Thread(target=self._run, args=(self._stop_event,), daemon=True) self._thread = threading.Thread(target=self._run, args=(self._stop_event,), daemon=True)
self._thread.start() self._thread.start()
def _run(self, stop_event: threading.Event): def _run(self, stop_event: threading.Event):
gui_app.init_window(self._title) gui_app.init_window(self._title)
self._renderer = self._renderer_class(*self._args) self._renderer = self._renderer_class(*self._renderer_args)
try: try:
for _ in gui_app.render(): for _ in gui_app.render():
if stop_event.is_set(): if stop_event.is_set():

Loading…
Cancel
Save