Skip to content

Commit 70cc547

Browse files
committed
tree auto width
1 parent 6bc7e98 commit 70cc547

File tree

5 files changed

+29
-21
lines changed

5 files changed

+29
-21
lines changed

src/textual/app.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1080,9 +1080,9 @@ def _get_screen(self, screen: Screen | str) -> tuple[Screen, AwaitMount]:
10801080
_screen = self.get_screen(screen)
10811081
if not _screen.is_running:
10821082
widgets = self._register(self, _screen)
1083-
return (_screen, AwaitMount(widgets))
1083+
return (_screen, AwaitMount(_screen, widgets))
10841084
else:
1085-
return (_screen, AwaitMount([]))
1085+
return (_screen, AwaitMount(_screen, []))
10861086

10871087
def _replace_screen(self, screen: Screen) -> Screen:
10881088
"""Handle the replaced screen.
@@ -1128,7 +1128,7 @@ def switch_screen(self, screen: Screen | str) -> AwaitMount:
11281128
self.screen.post_message_no_wait(events.ScreenResume(self))
11291129
self.log.system(f"{self.screen} is current (SWITCHED)")
11301130
return await_mount
1131-
return AwaitMount([])
1131+
return AwaitMount(self.screen, [])
11321132

11331133
def install_screen(self, screen: Screen, name: str | None = None) -> AwaitMount:
11341134
"""Install a screen.
@@ -1563,7 +1563,6 @@ def _register(
15631563
if widget.children:
15641564
self._register(widget, *widget.children)
15651565
apply_stylesheet(widget)
1566-
15671566
return list(widgets)
15681567

15691568
def _unregister(self, widget: Widget) -> None:

src/textual/css/constants.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,21 @@
3636
VALID_TEXT_ALIGN: Final = {"start", "end", "left", "right", "center", "justify"}
3737
VALID_SCROLLBAR_GUTTER: Final = {"auto", "stable"}
3838
VALID_STYLE_FLAGS: Final = {
39-
"none",
40-
"not",
41-
"bold",
39+
"b",
4240
"blink",
41+
"bold",
42+
"dim",
43+
"i",
4344
"italic",
44-
"underline",
45+
"none",
46+
"not",
47+
"o",
4548
"overline",
49+
"reverse",
4650
"strike",
47-
"b",
48-
"i",
4951
"u",
52+
"underline",
5053
"uu",
51-
"o",
52-
"reverse",
5354
}
5455

5556
NULL_SPACING: Final = Spacing.all(0)

src/textual/dom.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,8 @@ def text_style(self) -> Style:
507507
@property
508508
def rich_style(self) -> Style:
509509
"""Get a Rich Style object for this DOMNode."""
510-
background = WHITE
511-
color = BLACK
510+
background = Color(0, 0, 0, 0)
511+
color = Color(255, 255, 255, 0)
512512
style = Style()
513513
for node in reversed(self.ancestors_with_self):
514514
styles = node.styles
@@ -520,7 +520,8 @@ def rich_style(self) -> Style:
520520
if styles.has_rule("auto_color") and styles.auto_color:
521521
color = background.get_contrast_text(color.a)
522522
style += Style.from_color(
523-
(background + color).rich_color, background.rich_color
523+
(background + color).rich_color if (background.a or color.a) else None,
524+
background.rich_color if background.a else None,
524525
)
525526
return style
526527

src/textual/widget.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ class AwaitMount:
8585
8686
"""
8787

88-
def __init__(self, widgets: Sequence[Widget]) -> None:
88+
def __init__(self, parent: Widget, widgets: Sequence[Widget]) -> None:
89+
self._parent = parent
8990
self._widgets = widgets
9091

9192
def __await__(self) -> Generator[None, None, None]:
@@ -97,6 +98,7 @@ async def await_mount() -> None:
9798
]
9899
if aws:
99100
await wait(aws)
101+
self._parent.refresh(layout=True)
100102

101103
return await_mount().__await__()
102104

@@ -595,12 +597,12 @@ def mount(
595597
else:
596598
parent = self
597599

598-
return AwaitMount(
599-
self.app._register(
600-
parent, *widgets, before=insert_before, after=insert_after
601-
)
600+
mounted = self.app._register(
601+
parent, *widgets, before=insert_before, after=insert_after
602602
)
603603

604+
return AwaitMount(self, mounted)
605+
604606
def move_child(
605607
self,
606608
child: int | Widget,

src/textual/widgets/_tree.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,11 @@ def _tree_lines(self) -> list[_TreeLine]:
614614
assert self._tree_lines_cached is not None
615615
return self._tree_lines_cached
616616

617+
def _on_idle(self) -> None:
618+
"""Check tree needs a rebuild on idle."""
619+
# Property calls build if required
620+
self._tree_lines
621+
617622
def _build(self) -> None:
618623
"""Builds the tree by traversing nodes, and creating tree lines."""
619624

@@ -805,7 +810,7 @@ async def _on_click(self, event: events.Click) -> None:
805810
cursor_line = meta["line"]
806811
if meta.get("toggle", False):
807812
node = self.get_node_at_line(cursor_line)
808-
if node is not None:
813+
if node is not None and self.auto_expand:
809814
self._toggle_node(node)
810815

811816
else:

0 commit comments

Comments
 (0)