the listener now give as a first argument the widget itself. Added some event to some widgets

This commit is contained in:
Faraphel 2023-02-23 19:53:52 +01:00
parent a096785c28
commit 14ebc82a72
8 changed files with 17 additions and 13 deletions

View file

@ -1,13 +1,13 @@
A faire :
- Ecran de configuration de la partie
- Nom dans les options
- Etat de la partie (en attente de l'autre joueur, ...)
- Faire une scène incluant par défaut les boutons "Retour" (?)
- Police d'écriture
- Voir si les event listener intégré à pyglet sont plus pratique que l'event propagation
- Documenter
- Ajouter plus d'event sur les widgets
- Ecran de victoire
- Faire marcher le tchat

View file

@ -34,4 +34,4 @@ class Listener:
:param kwargs: the kwargs of the callbacks
"""
for listener in self._events_listener.get(name, set()):
listener(*args, **kwargs)
listener(self, *args, **kwargs)

View file

@ -55,7 +55,7 @@ class Game(Scene):
bomb_batch=self.batch_grid_bomb
)
def board_ally_ready():
def board_ally_ready(widget):
self.boat_ready_ally = True
PacketBoatPlaced().send_connection(connection)
@ -78,7 +78,7 @@ class Game(Scene):
bomb_batch=self.batch_grid_bomb
)
def board_enemy_bomb(cell: Point2D):
def board_enemy_bomb(widget, cell: Point2D):
if not (self.boat_ready_ally and self.boat_ready_enemy): return
if not self.my_turn: return
PacketBombPlaced(position=cell).send_connection(connection)
@ -157,9 +157,9 @@ class Game(Scene):
label_batch=self.batch_label,
)
def send_chat():
text = self.chat_input.text
self.chat_input.text = ""
def send_chat(widget):
text = widget.text
widget.text = ""
self.chat_log.text += "\n" + text
self.chat_log.label.y = self.chat_log.y + self.chat_log.label.content_height

View file

@ -72,7 +72,7 @@ class RoomJoin(Scene):
self.connect.add_listener("on_click_release", self.button_connect)
def button_connect(self, *_):
def button_connect(self, widget, *_):
network.Client(
window=self.window,
ip_address=self.entry_ip.text,
@ -80,7 +80,7 @@ class RoomJoin(Scene):
username="Client"
).start()
def button_back_callback(self, *_):
def button_back_callback(self, widget, *_):
from source.gui.scene import MainMenu
self.window.set_scene(MainMenu)

View file

@ -63,6 +63,8 @@ class Checkbox(BoxWidget):
@state.setter
def state(self, state: bool):
self._state = state
self.trigger_event("on_state_change")
self.trigger_event("on_checked" if state else "on_unchecked")
self._refresh_tick()
def swap_state(self):

View file

@ -78,10 +78,9 @@ class GameGrid(BoxWidget):
**dict_filter_prefix("cursor_", kwargs)
)
self.add_listener("on_click_release", self.on_click_release)
self.add_listener("on_click_release", lambda _, *args: self.on_click_release(*args))
self.add_listener("on_hover_leave", lambda *_: self.hide_cursor())
self.add_listener("on_hover", self._refresh_cursor)
self.add_listener("on_hover", lambda _, *args: self._refresh_cursor(*args))
self._refresh_size()

View file

@ -114,6 +114,8 @@ class Input(BoxWidget):
def on_text(self, char: str):
if not self.activated: return # ignore si ce widget est désactivé / non sélectionné
if not self.label.multiline and char in "\r\n": return # si le texte est sur une ligne, ignore les retours
self.text += char # ajoute le caractère au label
if self.regex is not None: # si il y a un regex de validation, applique le pour vérifier le texte

View file

@ -57,7 +57,7 @@ class Scroller(BoxWidget):
**dict_filter_prefix("label_", kwargs)
)
self.add_listener("on_click_release", lambda rel_x, *_: self._refresh_cursor(rel_x))
self.add_listener("on_click_release", lambda _, rel_x, *__: self._refresh_cursor(rel_x))
self._from = from_
self._to = to
@ -100,6 +100,7 @@ class Scroller(BoxWidget):
def value(self, value: float):
if not self.from_ <= value <= self.to: raise ValueError(f"The value is not in range")
self._value = value
self.trigger_event("on_value_change")
self._refresh()
@property