|
|
|
@ -1,23 +1,14 @@ |
|
|
|
|
import threading |
|
|
|
|
import time |
|
|
|
|
import os |
|
|
|
|
from typing import Generic, Protocol, TypeVar |
|
|
|
|
|
|
|
|
|
from openpilot.system.ui.lib.application import gui_app |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RendererProtocol(Protocol): |
|
|
|
|
def render(self): |
|
|
|
|
... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R = TypeVar("R", bound=RendererProtocol) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BaseWindow(Generic[R]): |
|
|
|
|
class BaseWindow: |
|
|
|
|
def __init__(self, title: str): |
|
|
|
|
self._title = title |
|
|
|
|
self._renderer: R | None = None |
|
|
|
|
self._renderer = None |
|
|
|
|
self._stop_event = threading.Event() |
|
|
|
|
self._thread = threading.Thread(target=self._run) |
|
|
|
|
self._thread.start() |
|
|
|
@ -26,7 +17,7 @@ class BaseWindow(Generic[R]): |
|
|
|
|
while self._renderer is None and self._thread.is_alive(): |
|
|
|
|
time.sleep(0.01) |
|
|
|
|
|
|
|
|
|
def _create_renderer(self) -> R: |
|
|
|
|
def _create_renderer(self): |
|
|
|
|
raise NotImplementedError("Subclasses of BaseWindow must implement _create_renderer()") |
|
|
|
|
|
|
|
|
|
def _run(self): |
|
|
|
|