added more comment for basic GUI class

This commit is contained in:
Faraphel 2023-03-14 19:23:38 +01:00
parent f6f2e1ed52
commit 89c6b81ba9
6 changed files with 34 additions and 13 deletions

View file

@ -4,5 +4,9 @@ from source.gui.better_pyglet.abc import Element
class Label(Element, pyglet.text.Label): class Label(Element, pyglet.text.Label):
"""
Un label de base de pyglet, mais supportant les arguments par défaut
"""
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **(self.default_kwargs | kwargs)) super().__init__(*args, **(self.default_kwargs | kwargs))

View file

@ -5,7 +5,8 @@ from source.gui.better_pyglet.abc import Element
class Sprite(Element, pyglet.sprite.Sprite): class Sprite(Element, pyglet.sprite.Sprite):
""" """
Same as the pyglet sprite, but allow to set a width and height easier Similaire au Sprite de base de pyglet, mais permet de changer la hauteur et largeur plus simplement.
Supporte les arguments par défaut également
""" """
def __init__(self, width: int = None, height: int = None, *args, **kwargs): def __init__(self, width: int = None, height: int = None, *args, **kwargs):

View file

@ -3,7 +3,12 @@ from typing import Any
class Element(ABC): class Element(ABC):
"""
Un mixin pour les éléments de base de pyglet
"""
default_kwargs: dict[str, Any] default_kwargs: dict[str, Any]
def __init_subclass__(cls, **kwargs): def __init_subclass__(cls, **kwargs):
cls.default_kwargs = {} # all subclasses will have their own "default_kwargs" dict # toutes les sous-classes auront leur propre dictionnaire "default_kwargs"
cls.default_kwargs = {}

View file

@ -7,13 +7,17 @@ from source.gui.event import StopEvent
class EventPropagationMixin: class EventPropagationMixin:
""" """
This class can be subclassed to allow the subclass to propagate all the call to the method that start by Les classes héritant de cette classe peuvent propager tous les appels des méthodes qui commençent par "on_" aux
"on_" to the object in the "childs" property. objets présents dans la propriété "childs"
""" """
@property @property
@abstractmethod @abstractmethod
def childs(self): def childs(self) -> list:
"""
Renvoie la liste des objets auquel propagé les événements
:return: la liste des objets auquel propagé les événements
"""
pass pass
@lru_cache @lru_cache
@ -24,19 +28,19 @@ class EventPropagationMixin:
:return: une fonction appelant l'événement original ainsi que ceux des scènes. :return: une fonction appelant l'événement original ainsi que ceux des scènes.
""" """
# if the event is the drawing of the objects, reverse the order of the scenes # Si l'événement est à propos de dessiner les objets,
# so that the last drawn are the one on top # inverse l'ordre pour que les derniers objets dessinés soit au-dessus des autres.
child_transform = ( child_transform = (
(lambda child: reversed(child)) if item == "on_draw" else (lambda child: reversed(child)) if item == "on_draw" else
(lambda child: child) (lambda child: child)
) )
# try to get the original function # essaye de récupérer la fonction originale
func = None func = None
try: func = super().__getattribute__(item) try: func = super().__getattribute__(item)
except AttributeError: pass except AttributeError: pass
# try to get a function that would get executed after everything else # essaye de récupérer une fonction qui devrait s'exécuter après les autres
func_after = None func_after = None
try: func_after = super().__getattribute__(item + "_after") try: func_after = super().__getattribute__(item + "_after")
except AttributeError: pass except AttributeError: pass
@ -46,7 +50,7 @@ class EventPropagationMixin:
for child in child_transform(self.childs): for child in child_transform(self.childs):
try: getattr(child, item, lambda *_, **__: "pass")(*args, **kwargs) try: getattr(child, item, lambda *_, **__: "pass")(*args, **kwargs)
# si l'erreur StopEventScene est détecté, les autres scènes ne recevront pas l'event # si l'erreur StopEventScene est détecté, les autres scènes ne recevront pas l'événement
except StopEvent: break except StopEvent: break
if func_after is not None: func_after(*args, **kwargs) if func_after is not None: func_after(*args, **kwargs)
@ -55,9 +59,9 @@ class EventPropagationMixin:
def __getattribute__(self, item: str) -> Any: def __getattribute__(self, item: str) -> Any:
""" """
Fonction appelée dès que l'on essaye d'accéder à l'un des attributs de l'objet. Fonction appelée dès que l'on essaye d'accéder à l'un des attributs de l'objet
:param item: nom de l'attribut recherché :param item: nom de l'attribut recherché
:return: l'attribut de l'objet correspondant. :return: l'attribut de l'objet correspondant
""" """
# si l'attribut est un événement (commence par "on_"), alors renvoie le dans un wrapper # si l'attribut est un événement (commence par "on_"), alors renvoie le dans un wrapper

View file

@ -1,5 +1,5 @@
class StopEvent(Exception): class StopEvent(Exception):
""" """
This error can be raised to prevent an event to propagate to further element. Cette erreur peut être levée pour arrêter la propagation de l'événement aux autres éléments
""" """
pass pass

View file

@ -2,6 +2,13 @@ from math import inf
def number(min_length: int = 0, max_length: int = inf) -> str: def number(min_length: int = 0, max_length: int = inf) -> str:
"""
Renvoie le regex correspondant à une suite de nombre.
:param min_length: la longueur minimum du nombre
:param max_length: la longueur maximum du nombre
:return: le regex correspondant
"""
return r"\d{%s,%s}" % (min_length, max_length if max_length < inf else "") return r"\d{%s,%s}" % (min_length, max_length if max_length < inf else "")