diff --git a/NOTE.md b/NOTE.md index b414527..0c88d74 100644 --- a/NOTE.md +++ b/NOTE.md @@ -10,9 +10,7 @@ A faire : - Voir les TODOs 3. Bug : - - Si le port est déjà utilisé, le jeu n'indique par l'erreur à l'hôte - - Les champs invalides n'empêchent pas de faire l'action - - Si la fenêtre est fermée, l'erreur "delete_vao AttributeError: 'NoneType' object has no attribute 'current_context'" apparait parfois + - / 4. Vérification : - Tester sur Linux diff --git a/source/gui/scene/RoomCreate.py b/source/gui/scene/RoomCreate.py index b939fb7..ade9c11 100644 --- a/source/gui/scene/RoomCreate.py +++ b/source/gui/scene/RoomCreate.py @@ -257,6 +257,8 @@ class RoomCreate(Scene): self.start.add_listener("on_click_release", lambda *_: self.confirm()) def confirm(self): + if not self.valid: return # si tous les formulaires ne sont pas correctement remplis, ignore + port = int(self.input_port.text) settings = PacketSettings( diff --git a/source/gui/scene/RoomJoin.py b/source/gui/scene/RoomJoin.py index 7ab37d4..25341a5 100644 --- a/source/gui/scene/RoomJoin.py +++ b/source/gui/scene/RoomJoin.py @@ -93,6 +93,8 @@ class RoomJoin(Scene): self.thread: Optional[network.Client] = None def button_connect(self, widget, *_): + if not self.valid: return # si tous les formulaires ne sont pas correctement remplis, ignore + self.status.text = "Connexion..." self.status.label.color = (255, 255, 255, 255) # blanc widget.remove_listener("on_click_release", self.button_connect) diff --git a/source/gui/scene/abc/Scene.py b/source/gui/scene/abc/Scene.py index e8ff1e3..b505885 100644 --- a/source/gui/scene/abc/Scene.py +++ b/source/gui/scene/abc/Scene.py @@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Type import pyglet from source.gui.event import EventPropagationMixin +from source.gui.widget import Input if TYPE_CHECKING: from source.gui.window import Window @@ -60,6 +61,20 @@ class Scene(ABC, EventPropagationMixin): self._widgets.clear() + # shortcut + + @property + def valid(self) -> bool: + """ + Indique si la scène à tout ses éléments de formulaire valides + :return: True si tous les éléments (Input, ...) sont correctement rempli. + """ + + for widget in self._widgets: + if isinstance(widget, Input) and widget.invalid: return False + + return True + # event def on_draw(self) -> None: