L3-Bataille-Navale/source/gui/widget/Checkbox.py

73 lines
1.7 KiB
Python

from typing import TYPE_CHECKING
import pyglet.image
from source.gui.sprite import Sprite
from source.gui.widget.abc import BoxWidget
from source.type import Distance
if TYPE_CHECKING:
from source.gui.scene.abc import Scene
class Checkbox(BoxWidget):
def __init__(self, scene: "Scene",
texture_disabled: pyglet.image.AbstractImage,
texture_enabled: pyglet.image.AbstractImage,
x: Distance = 0,
y: Distance = 0,
width: Distance = None,
height: Distance = None,
state: bool = False,
**kwargs):
super().__init__(scene, x, y, width, height)
self._texture_disabled = texture_disabled
self._texture_enabled = texture_enabled
self.tick = Sprite(img=self._texture_disabled, **kwargs)
self.state = state
self._refresh_size()
# refreshing
@property
def tick_texture(self):
return self._texture_enabled if self.state else self._texture_disabled
def _refresh_tick(self):
self.tick.image = self.tick_texture
def _refresh_size(self):
self.tick.x, self.tick.y = self.x, self.y
self.tick.width, self.tick.height = self.width, self.height
# property
@property
def state(self):
return self._state
@state.setter
def state(self, state: bool):
self._state = state
self._refresh_tick()
# event
def on_resize(self, width: int, height: int):
self._refresh_size()
def on_release(self, rel_x: int, rel_y: int, button: int, modifiers: int):
# lorsque le bouton est enclenché, inverse son état
self.state = not self.state
def draw(self):
self.tick.draw()