You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bingo-cli/BingoField.py

43 lines
1.3 KiB
Python

from textual.widgets import Static
from textual.message import Message
from textual.reactive import reactive
class BingoField(Static):
'''A Bingo field widget.'''
text = reactive('')
class Selected(Message):
'''Send message to the board containing clicked field info'''
def __init__(self, num: int, selected: bool) -> None:
self.num = num
self.selected = selected
super().__init__()
def __init__(self, num, text: str) -> None:
self.num = num
self.selected = False
self.highlighted = False
super().__init__()
self.text = text
def on_click(self) -> None:
self.selected = not self.selected
if self.selected:
self.add_class('field_selected')
else:
self.remove_class('field_selected')
# The post_message method sends an event to be handled in the DOM
self.post_message(self.Selected(self.num, self.selected))
def set_highlighted(self, new_highlight: bool) -> None:
self.highlighted = new_highlight
if self.highlighted:
self.add_class('field_highlighted')
else:
self.remove_class('field_highlighted')
def render(self) -> str:
return str(self.text)