As a start, you can look at Tk::DirTree.
#!/usr/bin/perl use strict; use Tk; require Tk::DirTree; #### DEBUG #### $main::DEBUG = 1; # The initial directory my $initial_dir = '/'; # The main window... my $main_window = new MainWindow( -title => 'one test' ); # A scrolled directory tree my $tree = $main_window->Scrolled( 'DirTree', -width => 35, -height => 25, -scrollbars => 'osoe', -background => 'White', -selectmode => 'single', -selectbackground => 'DarkBlue', -selectforeground => 'White', -showhidden => 1, -directory => $initial_dir ); $tree->pack( -expand => 'yes', -fill => 'both', -padx => 2, -pady => 2, -side => 'left' ); # create the menu to be used for poping up my $menu = $main_window->Menu( -tearoff => 0, -menuitems => [ [ 'Button' => 'What?', -command => sub { print STDERR "Item is '", ( $tree->selectionGet() )[0] +, "'\n"; } ] ] ); # Create the binding for the right mouse button $tree->bind( '<Button-3>' => [ sub { my $widget = shift; my $y = shift; my $current_item = $widget->nearest($y); my $previous_item = ( $widget->selectionGet() )[0]; $main::DEBUG and print STDERR "old :", $previous_item, +"\n"; $main::DEBUG and print STDERR "current:", $current_item, +"\n"; # Clear selection and then set it to the new item $widget->selectionClear(); $widget->selectionSet($current_item); ### $$$$ Doesn't work: &destructor never called $menu->OnDestroy( [ \&destructor, $widget, $previous_item +] ); # Displaying the menu... # $menu->Popup( # -popover => 'cursor', # -popanchor => 'nw' # ); $menu->post($widget->pointerxy); destructor($widget, $previous_item); }, Ev('y') ] ); sub destructor { my $widget = shift; my $item = shift; $main::DEBUG and print STDERR "in destructor, item:", $item, "\n"; # Set selection to a particular item... $widget->selectionClear(); $widget->selectionSet($item); } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +- - - - $tree->waitVisibility(); $tree->selectionSet($initial_dir); MainLoop(); #### program sends above ####################
Finally, I will mention that you are probably trying to do something in Perl which is better suited for C. Perl will be slower than alot of the currently available file manager/browsers like midnight commander, and the slew of new ones that can be found on freshmeat.net. So it will be a very educational experience for you, but may not fill any need, that already isn't already being done by c-based apps. Plus alot of the functionality you are musing about, falls under the realm of Desktop Manager, and you might consider approaching this from the viewpoint of managing the Desktop, like perlbox or perltop
In reply to Re: MacOS Finder (Column view) in Tk.
by zentara
in thread MacOSX Finder (Column view) in Tk.
by Ace128
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |