|
|
@ -260,15 +260,14 @@ class MultipleButtonAction(ItemAction): |
|
|
|
|
|
|
|
|
|
|
|
class ListItem(Widget): |
|
|
|
class ListItem(Widget): |
|
|
|
def __init__(self, title: str = "", icon: str | None = None, description: str | Callable[[], str] | None = None, |
|
|
|
def __init__(self, title: str = "", icon: str | None = None, description: str | Callable[[], str] | None = None, |
|
|
|
description_visible: bool = False, callback: Callable | None = None, description_opened_callback: Callable | None = None, |
|
|
|
description_visible: bool = False, callback: Callable | None = None, action_item: ItemAction | None = None): |
|
|
|
action_item: ItemAction | None = None): |
|
|
|
|
|
|
|
super().__init__() |
|
|
|
super().__init__() |
|
|
|
self.title = title |
|
|
|
self.title = title |
|
|
|
self.set_icon(icon) |
|
|
|
self.set_icon(icon) |
|
|
|
self._description = description |
|
|
|
self._description = description |
|
|
|
self.description_visible = description_visible |
|
|
|
self.description_visible = description_visible |
|
|
|
self.callback = callback |
|
|
|
self.callback = callback |
|
|
|
self.description_opened_callback = description_opened_callback |
|
|
|
self.description_opened_callback: Callable | None = None |
|
|
|
self.action_item = action_item |
|
|
|
self.action_item = action_item |
|
|
|
|
|
|
|
|
|
|
|
self.set_rect(rl.Rectangle(0, 0, ITEM_BASE_WIDTH, ITEM_BASE_HEIGHT)) |
|
|
|
self.set_rect(rl.Rectangle(0, 0, ITEM_BASE_WIDTH, ITEM_BASE_HEIGHT)) |
|
|
@ -281,6 +280,9 @@ class ListItem(Widget): |
|
|
|
# Cached properties for performance |
|
|
|
# Cached properties for performance |
|
|
|
self._prev_description: str | None = self.description |
|
|
|
self._prev_description: str | None = self.description |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_description_opened_callback(self, callback: Callable) -> None: |
|
|
|
|
|
|
|
self.description_opened_callback = callback |
|
|
|
|
|
|
|
|
|
|
|
def set_touch_valid_callback(self, touch_callback: Callable[[], bool]) -> None: |
|
|
|
def set_touch_valid_callback(self, touch_callback: Callable[[], bool]) -> None: |
|
|
|
super().set_touch_valid_callback(touch_callback) |
|
|
|
super().set_touch_valid_callback(touch_callback) |
|
|
|
if self.action_item: |
|
|
|
if self.action_item: |
|
|
@ -304,7 +306,7 @@ class ListItem(Widget): |
|
|
|
if self.description: |
|
|
|
if self.description: |
|
|
|
self.description_visible = not self.description_visible |
|
|
|
self.description_visible = not self.description_visible |
|
|
|
# do callback first in case consumer changes description |
|
|
|
# do callback first in case consumer changes description |
|
|
|
if self.description_visible and self.description_opened_callback: |
|
|
|
if self.description_visible and self.description_opened_callback is not None: |
|
|
|
self.description_opened_callback() |
|
|
|
self.description_opened_callback() |
|
|
|
|
|
|
|
|
|
|
|
content_width = int(self._rect.width - ITEM_PADDING * 2) |
|
|
|
content_width = int(self._rect.width - ITEM_PADDING * 2) |
|
|
@ -416,11 +418,9 @@ def toggle_item(title: str, description: str | Callable[[], str] | None = None, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def button_item(title: str, button_text: str | Callable[[], str], description: str | Callable[[], str] | None = None, |
|
|
|
def button_item(title: str, button_text: str | Callable[[], str], description: str | Callable[[], str] | None = None, |
|
|
|
callback: Callable | None = None, description_opened_callback: Callable | None = None, |
|
|
|
callback: Callable | None = None, enabled: bool | Callable[[], bool] = True) -> ListItem: |
|
|
|
enabled: bool | Callable[[], bool] = True) -> ListItem: |
|
|
|
|
|
|
|
action = ButtonAction(text=button_text, enabled=enabled) |
|
|
|
action = ButtonAction(text=button_text, enabled=enabled) |
|
|
|
return ListItem(title=title, description=description, action_item=action, callback=callback, |
|
|
|
return ListItem(title=title, description=description, action_item=action, callback=callback) |
|
|
|
description_opened_callback=description_opened_callback) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def text_item(title: str, value: str | Callable[[], str], description: str | Callable[[], str] | None = None, |
|
|
|
def text_item(title: str, value: str | Callable[[], str], description: str | Callable[[], str] | None = None, |
|
|
|