|
|
|
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)
|