22
33use Terminal::Widgets::Simple;
44use Terminal::Widgets::Events;
5+ use Terminal::Widgets::SpanStyle;
56use 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