mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Merge pull request #2536 from davep/expand-tree-expand-messages
Ensure that `TreeNode` messages are posted when via-API changes are made
This commit is contained in:
@@ -15,6 +15,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
### Fixed
|
||||
|
||||
- Fixed `ZeroDivisionError` in `resolve_fraction_unit` https://github.com/Textualize/textual/issues/2502
|
||||
- Fixed `TreeNode.expand` and `TreeNode.expand_all` not posting a `Tree.NodeExpanded` message https://github.com/Textualize/textual/issues/2535
|
||||
- Fixed `TreeNode.collapse` and `TreeNode.collapse_all` not posting a `Tree.NodeCollapsed` message https://github.com/Textualize/textual/issues/2535
|
||||
- Fixed `TreeNode.toggle` and `TreeNode.toggle_all` not posting a `Tree.NodeExpanded` or `Tree.NodeCollapsed` message https://github.com/Textualize/textual/issues/2535
|
||||
|
||||
## [0.24.1] - 2023-05-08
|
||||
|
||||
|
||||
@@ -207,6 +207,7 @@ class TreeNode(Generic[TreeDataType]):
|
||||
"""
|
||||
self._expanded = True
|
||||
self._updates += 1
|
||||
self._tree.post_message(Tree.NodeExpanded(self._tree, self))
|
||||
if expand_all:
|
||||
for child in self.children:
|
||||
child._expand(expand_all)
|
||||
@@ -239,6 +240,7 @@ class TreeNode(Generic[TreeDataType]):
|
||||
"""
|
||||
self._expanded = False
|
||||
self._updates += 1
|
||||
self._tree.post_message(Tree.NodeCollapsed(self._tree, self))
|
||||
if collapse_all:
|
||||
for child in self.children:
|
||||
child._collapse(collapse_all)
|
||||
@@ -1157,10 +1159,8 @@ class Tree(Generic[TreeDataType], ScrollView, can_focus=True):
|
||||
return
|
||||
if node.is_expanded:
|
||||
node.collapse()
|
||||
self.post_message(self.NodeCollapsed(self, node))
|
||||
else:
|
||||
node.expand()
|
||||
self.post_message(self.NodeExpanded(self, node))
|
||||
|
||||
async def _on_click(self, event: events.Click) -> None:
|
||||
meta = event.style.meta
|
||||
|
||||
@@ -78,6 +78,20 @@ async def test_tree_node_expanded_message() -> None:
|
||||
assert pilot.app.messages == [("NodeExpanded", "test-tree")]
|
||||
|
||||
|
||||
async def tree_node_expanded_by_code_message() -> None:
|
||||
"""Expanding a node via the API should result in an expanded message being posted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].expand()
|
||||
assert pilot.app.messages == [("NodeExpanded", "test-tree")]
|
||||
|
||||
|
||||
async def tree_node_all_expanded_by_code_message() -> None:
|
||||
"""Expanding all nodes via the API should result in expanded messages being posted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].expand_all()
|
||||
assert pilot.app.messages == [("NodeExpanded", "test-tree")]
|
||||
|
||||
|
||||
async def test_tree_node_collapsed_message() -> None:
|
||||
"""Collapsing a node should result in a collapsed message being emitted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
@@ -89,6 +103,46 @@ async def test_tree_node_collapsed_message() -> None:
|
||||
]
|
||||
|
||||
|
||||
async def tree_node_collapsed_by_code_message() -> None:
|
||||
"""Collapsing a node via the API should result in a collapsed message being posted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].expand().collapse()
|
||||
assert pilot.app.messages == [
|
||||
("NodeExpanded", "test-tree"),
|
||||
("NodeCollapsed", "test-tree"),
|
||||
]
|
||||
|
||||
|
||||
async def tree_node_all_collapsed_by_code_message() -> None:
|
||||
"""Collapsing all nodes via the API should result in collapsed messages being posted."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].expand_all().collapse_all()
|
||||
assert pilot.app.messages == [
|
||||
("NodeExpanded", "test-tree"),
|
||||
("NodeCollapsed", "test-tree"),
|
||||
]
|
||||
|
||||
|
||||
async def tree_node_toggled_by_code_message() -> None:
|
||||
"""Toggling a node twice via the API should result in expanded and collapsed messages."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].toggle().toggle()
|
||||
assert pilot.app.messages == [
|
||||
("NodeExpanded", "test-tree"),
|
||||
("NodeCollapsed", "test-tree"),
|
||||
]
|
||||
|
||||
|
||||
async def tree_node_all_toggled_by_code_message() -> None:
|
||||
"""Toggling all nodes twice via the API should result in expanded and collapsed messages."""
|
||||
async with TreeApp().run_test() as pilot:
|
||||
pilot.app.query_one(Tree).root.children[0].toggle_all().toggle_all()
|
||||
assert pilot.app.messages == [
|
||||
("NodeExpanded", "test-tree"),
|
||||
("NodeCollapsed", "test-tree"),
|
||||
]
|
||||
|
||||
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user