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)