use Tk; use Tk::ColumnView; use Data::Dumper; use lib "."; use strict; use warnings; my $mw = new MainWindow; $mw->optionAdd('*BorderWidth' => 1); #my $l1 = $pw->Label(-text => "This is the\nleft side", -background => 'yellow'); #my $l2 = $pw->Label(-text => "This is the\nright side", -background =>'cyan'); #my $l3 = $pw->Label(-text => "This is the\nright side", -background =>'cyan'); my $columnView = $mw->ColumnView( # -left_right_nav => sub {print "Hej\n"}, # -columns => 1, # -scrollbars => 'osoe', -left_right_nav_post => \&left_right_navigation_post, -up_down_nav => \&up_down_navigation, -browsecmd => \&row_selected, -column_in_focus => \&column_in_focus, -left_mouse_button => \&left_mouse_button, -width => 400, -height => 300, )->pack(-expand => 1, -fill => 'both'); #$columnView->setOverRideLeftRightNavigation(1); my $root = "E:/"; #$columnView->addColumn("Title", "./*"); $columnView->addColumn("Root", ["."]); $columnView->addColumn("Files/Dirs", "./*"); #$columnView->modifyColumn("Title", "./*"); #$columnView->addColumn(); $columnView->setFocusOnColunmNamed("Root"); $mw->MainLoop; sub left_mouse_button { my $name = shift; my $path = shift; my $last = shift; print "[left_mouse_button] name: $name\n"; print "[left_mouse_button] path: $path\n"; print "[left_mouse_button] last : $last\n"; my @paths = split(/,/, $path); if ($columnView->getColumnInFocus() == ($columnView->getAmountOfColumns() - 1)) { if ($columnView->addColumn($paths[@paths - 2])) { print "ADDED: " . $paths[@paths - 2] . "\n"; } else { print "FAILED TO ADD: " . $paths[@paths - 2] . "\n"; } } } sub column_in_focus { my $at = shift; my $path = shift; my $last = shift; if ($at >= $columnView->getAmountOfColumns()) { my @paths = split(/,/, $path); my $last_one = $paths[@paths-1]; #print "LAST: $last_one\n"; #$columnView->addColumn($last_one); #$columnView->setFocusOnColunmNamed($last_one); } elsif ($at == ($columnView->getAmountOfColumns() - 2)) { #$columnView->delLastColumn(); } #print "AT: " . $at . "\n"; #print $path . "\n"; } sub left_right_navigation_post { my $nav = shift; my $old_path = shift; my $new_path = shift; my $old_single_one = shift; my $last_one = shift; #print "[left_right_navigation] $old_path $new_path $last $single_one\n"; if ($nav eq "left") { if ($columnView->getAmountOfColumns() > 2) { $columnView->delLastColumn(); if (! $columnView->columnExistsNamed("Files/Dirs")) { # Should not be needed! $columnView->renameLastColumnTo("Files/Dirs"); } } } elsif ($nav eq "right") { #print $columnView->getColumnInFocus() . "\n"; if ( ($columnView->getAmountOfColumns() - $columnView->getColumnInFocus() ) == 2) { if ($columnView->columnExistsNamed("Files/Dirs")) { $columnView->renameColumnNamed("Files/Dirs", $old_path); # if () $columnView->addColumn("Files/Dirs"); } #print "ADDED: $single_one\n"; #$columnView->addColumn("Artists", [ "Enigma", "Ace da Brain" ] ); #$columnView->addColumn("Artists", [ "Unhugnu", "Forever Dasa"] ); #$columnView->addColumn("./" . $selected . "/*"); #$columnView->addColumn("./*"); } } } sub up_down_navigation { my $nav = shift; my $selected = shift; my $single_one = shift; return if (!defined($single_one)); } sub row_selected { my $name = shift; my $path = shift; my $at = shift; #print "[row_selected] name: $name\n"; #print "[row_selected] path: $path\n"; $path =~ s/,/\//g; #my @paths = split(/,/, $path); #my $last_one = $paths[@paths-1]; #print "[row_selected] last_one: $last_one\n"; print "path: " . $path . " at: $at\n"; if ($columnView->columnExistsNamed("Files/Dirs")) { $columnView->modifyColumn("Files/Dirs", $path . "/*"); } }