Skip to content

Commit b85534b

Browse files
committed
Fix clicking on Viewer::Tree nodes
1 parent 678d3c9 commit b85534b

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

lib/Terminal/Widgets/Viewer/Tree.rakumod

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class Terminal::Widgets::Viewer::Tree
6666
$!display-root = DisplayParent.new(data => $!root, depth => 0);
6767
}
6868

69+
#| Provide a span line chunk for SpanBuffer display
6970
method span-line-chunk(UInt:D $start, UInt:D $wanted) {
7071
my @lines = self.node-lines($!display-root);
7172
my $count = @lines.elems;
@@ -79,7 +80,7 @@ class Terminal::Widgets::Viewer::Tree
7980

8081
#| Displayable lines for a given node
8182
method node-lines($node) {
82-
my $is-parent = $node ~~ DisplayParent;
83+
my $is-parent = $node ~~ DisplayParent && $node.expanded;
8384
my $first-line = [ self.prefix-string($node),
8485
self.node-content($node) ];
8586

@@ -88,6 +89,13 @@ class Terminal::Widgets::Viewer::Tree
8889
!! ($first-line, )
8990
}
9091

92+
#| Flat list of displayable nodes starting at a given node
93+
method flattened-nodes($node) {
94+
my $is-parent = $node ~~ DisplayParent && $node.expanded;
95+
$is-parent ?? ($node, |$node.children.map({ self.flattened-nodes($_).Slip }))
96+
!! ($node, )
97+
}
98+
9199
#| Prefix for first line of a given node
92100
method prefix-string($node) {
93101
span('', ' ' x $node.depth
@@ -111,8 +119,7 @@ class Terminal::Widgets::Viewer::Tree
111119
}
112120

113121
method line-to-display-node($line) {
114-
# XXXX: TEMP HACK
115-
$.display-root
122+
self.flattened-nodes($.display-root)[$line]
116123
}
117124

118125
multi method handle-event(Terminal::Widgets::Events::MouseEvent:D
@@ -134,7 +141,9 @@ class Terminal::Widgets::Viewer::Tree
134141
self.refresh-for-scroll;
135142
}
136143

137-
$_($node) with &!process-click;
144+
if $node {
145+
$_($node) with &!process-click;
146+
}
138147
}
139148
}
140149

0 commit comments

Comments
 (0)