@@ -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