Skip to content

Commit 3797e07

Browse files
committed
Add node details pane to dir-tree example
1 parent eb48b1d commit 3797e07

File tree

1 file changed

+39
-8
lines changed

1 file changed

+39
-8
lines changed

examples/dir-tree.raku

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use Terminal::Widgets::Simple;
44
use Terminal::Widgets::Events;
5+
use Terminal::Widgets::SpanStyle;
56
use Terminal::Widgets::Volatile::DirTree;
67

78
#| A top level UI container based on Terminal::Widgets::Simple::TopLevel
@@ -13,20 +14,50 @@ class DirTreeDemo is TopLevel {
1314
.button(label => 'Quit', process-input => { $.terminal.quit }),
1415
.divider(line-style => 'light1', style => %(set-h => 1)),
1516
.node(
16-
.with-scrollbars(
17-
.dir-tree-viewer(id => 'dir-tree', style => %(set-w => 15)),
17+
.with-scrollbars(style => %( :!minimize-w ),
18+
.dir-tree-viewer(id => 'dir-tree',
19+
process-click => -> $node {
20+
self.show-details($node)
21+
}),
22+
),
23+
.divider(line-style => 'light1', style => %(set-w => 1)),
24+
.with-scrollbars(style => %( :!minimize-w, share-w => 2 ),
25+
.log-viewer(id => 'details'),
1826
),
19-
.spacer(),
2027
),
21-
.divider(line-style => 'light1', style => %(set-h => 1)),
22-
.with-scrollbars(.log-viewer(id => 'click-log')),
2328
}
2429
}
2530

31+
method show-details($node) {
32+
my $data = $node.data;
33+
my $path = $data.path;
34+
35+
my $details = %.by-id<details>;
36+
$details.add-entry("\n") if $details.log;
37+
38+
my sub format-line(Str:D $label, Str:D() $value) {
39+
span-tree('', span('bold yellow', $label),
40+
span('', ' ' x 10 - $label.chars),
41+
span('', $value))
42+
}
43+
44+
$details.add-entry(format-line('Path', $path));
45+
$details.add-entry(format-line('Target', $path.readlink)) if $path.l;
46+
$details.add-entry(format-line('Mode', $path.mode));
47+
$details.add-entry(format-line('User', $path.user));
48+
$details.add-entry(format-line('Group', $path.group));
49+
$details.add-entry(format-line('Inode', $path.inode));
50+
$details.add-entry(format-line('Size', $path.s));
51+
$details.add-entry(format-line('Created', $path.created.DateTime));
52+
$details.add-entry(format-line('Changed', $path.changed.DateTime));
53+
$details.add-entry(format-line('Modified', $path.modified.DateTime));
54+
$details.add-entry(format-line('Accessed', $path.accessed.DateTime));
55+
56+
$details.refresh-for-scroll;
57+
}
58+
2659
multi method handle-event(Terminal::Widgets::Events::LayoutBuilt:D, BubbleUp) {
27-
%.by-id<dir-tree>.set-root(dir-tree-node('/'));
28-
%.by-id<dir-tree>.display-root.set-expanded(True);
29-
%.by-id<dir-tree>.display-root.children.first(*.data.short-name eq 'boot').set-expanded(True);
60+
%.by-id<dir-tree>.set-root(dir-tree-node($*HOME || '/'));
3061
}
3162
}
3263

0 commit comments

Comments
 (0)