Source code for gbvision.gui.window

import abc

from gbvision.utils.releasable import Releasable
from gbvision.models.system import EMPTY_PIPELINE
from gbvision.constants.types import Frame


[docs]class Window(Releasable, abc.ABC): """ An abstract window class :param window_name: The title of the new window :param drawing_pipeline: Optional. A pipeline that draws on each frame before displaying it """ def __init__(self, window_name: str, drawing_pipeline=EMPTY_PIPELINE): """ initializes the window """ self.window_name = window_name self._is_opened = False self.drawing_pipeline = drawing_pipeline @abc.abstractmethod def _show_frame(self, frame: Frame) -> bool: """ Shows the frame :param frame: the frame to show :return: False if the window should be closed, True otherwise """
[docs] def is_opened(self) -> bool: """ Checks if the window is opened :return: True is the window is opened, False otherwise """ return self._is_opened
[docs] def show_frame(self, frame: Frame) -> bool: """ Shows the frame on the window :param frame: the frame to show :return: false if the window was closed, true otherwise """ if not self.is_opened(): self.open() if self._show_frame(self.drawing_pipeline(frame)): return True self.release() return False
[docs] def show_and_return_frame(self, frame: Frame) -> Frame: """ Shows and returns the given frame :param frame: The frame to show :return: The given frame, or None if the window has closed """ return frame if self.show_frame(frame) else None
@abc.abstractmethod def _open(self) -> None: """ Unsafely opens the window Not to be used by the programmer, only by the function open """ @abc.abstractmethod def _release(self) -> None: """ Unsafely closes the window Not to be used by the programmer, only by the function close """
[docs] def open(self) -> None: """ Opens the window """ if not self.is_opened(): self._open() self._is_opened = True
[docs] def release(self) -> None: """ Closes the window """ if self.is_opened(): self._release() self._is_opened = False