mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Add a message for when a node is highlighted
This is sort of different from selected. Selected is when someone mashes the enter button or clicks on a node. Highlighted is when the cursor moves into a new node. See #1400.
This commit is contained in:
@@ -365,6 +365,13 @@ class Tree(Generic[TreeDataType], ScrollView, can_focus=True):
|
|||||||
TreeNode[EventTreeDataType]: The node that was collapsed.
|
TreeNode[EventTreeDataType]: The node that was collapsed.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
class NodeHighlighted(NodeMessage[EventTreeDataType]):
|
||||||
|
"""Event sent when a node is highlighted.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
TreeNode[EventTreeDataType]: The node that was collapsed.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
label: TextType,
|
label: TextType,
|
||||||
@@ -573,6 +580,8 @@ class Tree(Generic[TreeDataType], ScrollView, can_focus=True):
|
|||||||
self._refresh_node(node)
|
self._refresh_node(node)
|
||||||
node._selected = True
|
node._selected = True
|
||||||
self._cursor_node = node
|
self._cursor_node = node
|
||||||
|
if previous_node != node:
|
||||||
|
self.post_message_no_wait(self.NodeHighlighted(self, node))
|
||||||
|
|
||||||
def watch_guide_depth(self, guide_depth: int) -> None:
|
def watch_guide_depth(self, guide_depth: int) -> None:
|
||||||
self._invalidate()
|
self._invalidate()
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ class TreeApp(App[None]):
|
|||||||
def on_tree_node_collapsed(self, event: Tree.NodeCollapsed[None]) -> None:
|
def on_tree_node_collapsed(self, event: Tree.NodeCollapsed[None]) -> None:
|
||||||
self.record(event)
|
self.record(event)
|
||||||
|
|
||||||
|
def on_tree_node_highlighted(self, event: Tree.NodeHighlighted[None]) -> None:
|
||||||
|
self.record(event)
|
||||||
|
|
||||||
|
|
||||||
async def test_tree_node_selected_message() -> None:
|
async def test_tree_node_selected_message() -> None:
|
||||||
"""Selecting a node should result in a selected message being emitted."""
|
"""Selecting a node should result in a selected message being emitted."""
|
||||||
@@ -57,3 +60,10 @@ async def test_tree_node_collapsed_message() -> None:
|
|||||||
"NodeCollapsed",
|
"NodeCollapsed",
|
||||||
"NodeSelected",
|
"NodeSelected",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
async def test_tree_node_highlighted_message() -> None:
|
||||||
|
"""Highlighting a node should result in a highlighted message being emitted."""
|
||||||
|
async with TreeApp().run_test() as pilot:
|
||||||
|
await pilot.press("enter", "down")
|
||||||
|
assert pilot.app.messages == ["NodeExpanded", "NodeSelected", "NodeHighlighted"]
|
||||||
|
|||||||
Reference in New Issue
Block a user