form can no longer be submitted if they contain invalid elements

This commit is contained in:
Faraphel 2023-03-09 00:06:54 +01:00
parent fce1ed0abf
commit 9388c0eedb
4 changed files with 20 additions and 3 deletions

View file

@ -10,9 +10,7 @@ A faire :
- Voir les TODOs - Voir les TODOs
3. Bug : 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 : 4. Vérification :
- Tester sur Linux - Tester sur Linux

View file

@ -257,6 +257,8 @@ class RoomCreate(Scene):
self.start.add_listener("on_click_release", lambda *_: self.confirm()) self.start.add_listener("on_click_release", lambda *_: self.confirm())
def confirm(self): def confirm(self):
if not self.valid: return # si tous les formulaires ne sont pas correctement remplis, ignore
port = int(self.input_port.text) port = int(self.input_port.text)
settings = PacketSettings( settings = PacketSettings(

View file

@ -93,6 +93,8 @@ class RoomJoin(Scene):
self.thread: Optional[network.Client] = None self.thread: Optional[network.Client] = None
def button_connect(self, widget, *_): 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.text = "Connexion..."
self.status.label.color = (255, 255, 255, 255) # blanc self.status.label.color = (255, 255, 255, 255) # blanc
widget.remove_listener("on_click_release", self.button_connect) widget.remove_listener("on_click_release", self.button_connect)

View file

@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Type
import pyglet import pyglet
from source.gui.event import EventPropagationMixin from source.gui.event import EventPropagationMixin
from source.gui.widget import Input
if TYPE_CHECKING: if TYPE_CHECKING:
from source.gui.window import Window from source.gui.window import Window
@ -60,6 +61,20 @@ class Scene(ABC, EventPropagationMixin):
self._widgets.clear() 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 # event
def on_draw(self) -> None: def on_draw(self) -> None: