mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Move reactives and messages to top of widget source.
This commit is contained in:
@@ -150,6 +150,15 @@ class Button(Static, can_focus=True):
|
||||
ACTIVE_EFFECT_DURATION = 0.3
|
||||
"""When buttons are clicked they get the `-active` class for this duration (in seconds)"""
|
||||
|
||||
label: Reactive[RenderableType] = Reactive("")
|
||||
"""The text label that appears within the button."""
|
||||
|
||||
variant = Reactive.init("default")
|
||||
"""The variant name for the button."""
|
||||
|
||||
disabled = Reactive(False)
|
||||
"""The disabled state of the button; `True` if disabled, `False` if not."""
|
||||
|
||||
class Pressed(Message, bubble=True):
|
||||
"""Event sent when a `Button` is pressed.
|
||||
|
||||
@@ -194,15 +203,6 @@ class Button(Static, can_focus=True):
|
||||
|
||||
self.variant = self.validate_variant(variant)
|
||||
|
||||
label: Reactive[RenderableType] = Reactive("")
|
||||
"""The text label that appears within the button."""
|
||||
|
||||
variant = Reactive.init("default")
|
||||
"""The variant name for the button."""
|
||||
|
||||
disabled = Reactive(False)
|
||||
"""The disabled state of the button; `True` if disabled, `False` if not."""
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield from super().__rich_repr__()
|
||||
yield "variant", self.variant, "default"
|
||||
|
||||
@@ -70,6 +70,25 @@ class Checkbox(Widget, can_focus=True):
|
||||
}
|
||||
"""
|
||||
|
||||
value = reactive(False, init=False)
|
||||
"""The value of the checkbox; `True` for on and `False` for off."""
|
||||
|
||||
slider_pos = reactive(0.0)
|
||||
"""The position of the slider."""
|
||||
|
||||
class Changed(Message, bubble=True):
|
||||
"""Checkbox was toggled.
|
||||
|
||||
Attributes:
|
||||
value: The value that the checkbox was changed to.
|
||||
input: The `Checkbox` widget that was changed.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Checkbox, value: bool) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: bool = value
|
||||
self.input: Checkbox = sender
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
value: bool = False,
|
||||
@@ -94,12 +113,6 @@ class Checkbox(Widget, can_focus=True):
|
||||
self._reactive_value = value
|
||||
self._should_animate = animate
|
||||
|
||||
value = reactive(False, init=False)
|
||||
"""The value of the checkbox; `True` for on and `False` for off."""
|
||||
|
||||
slider_pos = reactive(0.0)
|
||||
"""The position of the slider."""
|
||||
|
||||
def watch_value(self, value: bool) -> None:
|
||||
target_slider_pos = 1.0 if value else 0.0
|
||||
if self._should_animate:
|
||||
@@ -137,16 +150,3 @@ class Checkbox(Widget, can_focus=True):
|
||||
"""Toggle the checkbox value. As a result of the value changing,
|
||||
a Checkbox.Changed message will be emitted."""
|
||||
self.value = not self.value
|
||||
|
||||
class Changed(Message, bubble=True):
|
||||
"""Checkbox was toggled.
|
||||
|
||||
Attributes:
|
||||
value: The value that the checkbox was changed to.
|
||||
input: The `Checkbox` widget that was changed.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Checkbox, value: bool) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: bool = value
|
||||
self.input: Checkbox = sender
|
||||
|
||||
@@ -189,6 +189,125 @@ class DataTable(ScrollView, Generic[CellType], can_focus=True):
|
||||
)
|
||||
hover_cell: Reactive[Coordinate] = Reactive(Coordinate(0, 0), repaint=False)
|
||||
|
||||
class CellHighlighted(Message, bubble=True):
|
||||
"""Emitted when the cursor moves to highlight a new cell.
|
||||
It's only relevant when the `cursor_type` is `"cell"`.
|
||||
It's also emitted when the cell cursor is re-enabled (by setting `show_cursor=True`),
|
||||
and when the cursor type is changed to `"cell"`. Can be handled using
|
||||
`on_data_table_cell_highlighted` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
value: The value in the highlighted cell.
|
||||
coordinate: The coordinate of the highlighted cell.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, sender: DataTable, value: CellType, coordinate: Coordinate
|
||||
) -> None:
|
||||
self.value: CellType = value
|
||||
self.coordinate: Coordinate = coordinate
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "value", self.value
|
||||
yield "coordinate", self.coordinate
|
||||
|
||||
class CellSelected(Message, bubble=True):
|
||||
"""Emitted by the `DataTable` widget when a cell is selected.
|
||||
It's only relevant when the `cursor_type` is `"cell"`. Can be handled using
|
||||
`on_data_table_cell_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
value: The value in the cell that was selected.
|
||||
coordinate: The coordinate of the cell that was selected.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, sender: DataTable, value: CellType, coordinate: Coordinate
|
||||
) -> None:
|
||||
self.value: CellType = value
|
||||
self.coordinate: Coordinate = coordinate
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "value", self.value
|
||||
yield "coordinate", self.coordinate
|
||||
|
||||
class RowHighlighted(Message, bubble=True):
|
||||
"""Emitted when a row is highlighted. This message is only emitted when the
|
||||
`cursor_type` is set to `"row"`. Can be handled using `on_data_table_row_highlighted`
|
||||
in a subclass of `DataTable` or in a parent widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_row: The y-coordinate of the cursor that highlighted the row.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_row: int) -> None:
|
||||
self.cursor_row: int = cursor_row
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_row", self.cursor_row
|
||||
|
||||
class RowSelected(Message, bubble=True):
|
||||
"""Emitted when a row is selected. This message is only emitted when the
|
||||
`cursor_type` is set to `"row"`. Can be handled using
|
||||
`on_data_table_row_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_row: The y-coordinate of the cursor that made the selection.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_row: int) -> None:
|
||||
self.cursor_row: int = cursor_row
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_row", self.cursor_row
|
||||
|
||||
class ColumnHighlighted(Message, bubble=True):
|
||||
"""Emitted when a column is highlighted. This message is only emitted when the
|
||||
`cursor_type` is set to `"column"`. Can be handled using
|
||||
`on_data_table_column_highlighted` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_column: The x-coordinate of the column that was highlighted.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_column: int) -> None:
|
||||
self.cursor_column: int = cursor_column
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_column", self.cursor_column
|
||||
|
||||
class ColumnSelected(Message, bubble=True):
|
||||
"""Emitted when a column is selected. This message is only emitted when the
|
||||
`cursor_type` is set to `"column"`. Can be handled using
|
||||
`on_data_table_column_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_column: The x-coordinate of the column that was selected.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_column: int) -> None:
|
||||
self.cursor_column: int = cursor_column
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_column", self.cursor_column
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
@@ -989,122 +1108,3 @@ class DataTable(ScrollView, Generic[CellType], can_focus=True):
|
||||
elif cursor_type == "column":
|
||||
_, column = cursor_cell
|
||||
self.emit_no_wait(DataTable.ColumnSelected(self, column))
|
||||
|
||||
class CellHighlighted(Message, bubble=True):
|
||||
"""Emitted when the cursor moves to highlight a new cell.
|
||||
It's only relevant when the `cursor_type` is `"cell"`.
|
||||
It's also emitted when the cell cursor is re-enabled (by setting `show_cursor=True`),
|
||||
and when the cursor type is changed to `"cell"`. Can be handled using
|
||||
`on_data_table_cell_highlighted` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
value: The value in the highlighted cell.
|
||||
coordinate: The coordinate of the highlighted cell.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, sender: DataTable, value: CellType, coordinate: Coordinate
|
||||
) -> None:
|
||||
self.value: CellType = value
|
||||
self.coordinate: Coordinate = coordinate
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "value", self.value
|
||||
yield "coordinate", self.coordinate
|
||||
|
||||
class CellSelected(Message, bubble=True):
|
||||
"""Emitted by the `DataTable` widget when a cell is selected.
|
||||
It's only relevant when the `cursor_type` is `"cell"`. Can be handled using
|
||||
`on_data_table_cell_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
value: The value in the cell that was selected.
|
||||
coordinate: The coordinate of the cell that was selected.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, sender: DataTable, value: CellType, coordinate: Coordinate
|
||||
) -> None:
|
||||
self.value: CellType = value
|
||||
self.coordinate: Coordinate = coordinate
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "value", self.value
|
||||
yield "coordinate", self.coordinate
|
||||
|
||||
class RowHighlighted(Message, bubble=True):
|
||||
"""Emitted when a row is highlighted. This message is only emitted when the
|
||||
`cursor_type` is set to `"row"`. Can be handled using `on_data_table_row_highlighted`
|
||||
in a subclass of `DataTable` or in a parent widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_row: The y-coordinate of the cursor that highlighted the row.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_row: int) -> None:
|
||||
self.cursor_row: int = cursor_row
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_row", self.cursor_row
|
||||
|
||||
class RowSelected(Message, bubble=True):
|
||||
"""Emitted when a row is selected. This message is only emitted when the
|
||||
`cursor_type` is set to `"row"`. Can be handled using
|
||||
`on_data_table_row_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_row: The y-coordinate of the cursor that made the selection.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_row: int) -> None:
|
||||
self.cursor_row: int = cursor_row
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_row", self.cursor_row
|
||||
|
||||
class ColumnHighlighted(Message, bubble=True):
|
||||
"""Emitted when a column is highlighted. This message is only emitted when the
|
||||
`cursor_type` is set to `"column"`. Can be handled using
|
||||
`on_data_table_column_highlighted` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_column: The x-coordinate of the column that was highlighted.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_column: int) -> None:
|
||||
self.cursor_column: int = cursor_column
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_column", self.cursor_column
|
||||
|
||||
class ColumnSelected(Message, bubble=True):
|
||||
"""Emitted when a column is selected. This message is only emitted when the
|
||||
`cursor_type` is set to `"column"`. Can be handled using
|
||||
`on_data_table_column_selected` in a subclass of `DataTable` or in a parent
|
||||
widget in the DOM.
|
||||
|
||||
Attributes:
|
||||
cursor_column: The x-coordinate of the column that was selected.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: DataTable, cursor_column: int) -> None:
|
||||
self.cursor_column: int = cursor_column
|
||||
super().__init__(sender)
|
||||
|
||||
def __rich_repr__(self) -> rich.repr.Result:
|
||||
yield "sender", self.sender
|
||||
yield "cursor_column", self.cursor_column
|
||||
|
||||
@@ -53,13 +53,13 @@ class Footer(Widget):
|
||||
}
|
||||
"""
|
||||
|
||||
highlight_key: Reactive[str | None] = Reactive(None)
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self._key_text: Text | None = None
|
||||
self.auto_links = False
|
||||
|
||||
highlight_key: Reactive[str | None] = Reactive(None)
|
||||
|
||||
async def watch_highlight_key(self, value) -> None:
|
||||
"""If highlight key changes we need to regenerate the text."""
|
||||
self._key_text = None
|
||||
|
||||
@@ -100,10 +100,10 @@ class Header(Widget):
|
||||
}
|
||||
"""
|
||||
|
||||
tall = Reactive(False)
|
||||
|
||||
DEFAULT_CLASSES = ""
|
||||
|
||||
tall = Reactive(False)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
show_clock: bool = False,
|
||||
|
||||
@@ -121,6 +121,32 @@ class Input(Widget, can_focus=True):
|
||||
password = reactive(False)
|
||||
max_size: reactive[int | None] = reactive(None)
|
||||
|
||||
class Changed(Message, bubble=True):
|
||||
"""Value was changed.
|
||||
|
||||
Attributes:
|
||||
value: The value that the input was changed to.
|
||||
input: The `Input` widget that was changed.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Input, value: str) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: str = value
|
||||
self.input: Input = sender
|
||||
|
||||
class Submitted(Message, bubble=True):
|
||||
"""Sent when the enter key is pressed within an `Input`.
|
||||
|
||||
Attributes:
|
||||
value: The value of the `Input` being submitted..
|
||||
input: The `Input` widget that is being submitted.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Input, value: str) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: str = value
|
||||
self.input: Input = sender
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
value: str | None = None,
|
||||
@@ -346,29 +372,3 @@ class Input(Widget, can_focus=True):
|
||||
|
||||
async def action_submit(self) -> None:
|
||||
await self.emit(self.Submitted(self, self.value))
|
||||
|
||||
class Changed(Message, bubble=True):
|
||||
"""Value was changed.
|
||||
|
||||
Attributes:
|
||||
value: The value that the input was changed to.
|
||||
input: The `Input` widget that was changed.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Input, value: str) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: str = value
|
||||
self.input: Input = sender
|
||||
|
||||
class Submitted(Message, bubble=True):
|
||||
"""Sent when the enter key is pressed within an `Input`.
|
||||
|
||||
Attributes:
|
||||
value: The value of the `Input` being submitted..
|
||||
input: The `Input` widget that is being submitted.
|
||||
"""
|
||||
|
||||
def __init__(self, sender: Input, value: str) -> None:
|
||||
super().__init__(sender)
|
||||
self.value: str = value
|
||||
self.input: Input = sender
|
||||
|
||||
@@ -12,4 +12,3 @@ class Label(Static):
|
||||
height: auto;
|
||||
}
|
||||
"""
|
||||
"""str: The default styling of a `Label`."""
|
||||
|
||||
@@ -25,15 +25,16 @@ class ListItem(Widget, can_focus=False):
|
||||
height: auto;
|
||||
}
|
||||
"""
|
||||
|
||||
highlighted = reactive(False)
|
||||
|
||||
class _ChildClicked(Message):
|
||||
"""For informing with the parent ListView that we were clicked"""
|
||||
|
||||
pass
|
||||
|
||||
def on_click(self, event: events.Click) -> None:
|
||||
self.emit_no_wait(self._ChildClicked(self))
|
||||
|
||||
def watch_highlighted(self, value: bool) -> None:
|
||||
self.set_class(value, "--highlight")
|
||||
|
||||
class _ChildClicked(Message):
|
||||
"""For informing with the parent ListView that we were clicked"""
|
||||
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user