Gtk2-GladeXML
view release on metacpan or search on metacpan
examples/fileman.pl view on Meta::CPAN
foreach my $file (@files) {
my ($s, $t) = (stat("$cwd/$file"))[7,9];
my $time = localtime($t);
my $type;
if ($file =~ m/.*\.(.*?)$/) {$type = $1}
else {$type = 'Unknown';}
$total_bytes += $s;
push @{$fileview->{data}}, [$fileicon, "$file", "$s", "$type", "$time"];
}
# set a decent default selection (makes keyboard nav easy)
$fileview->select(0);
# set up a 'refresh' timer to check for new files
Glib::Timeout->add(100,
sub {
my $context = $status->get_context_id('Main');
$status->push($context, "$file_count files with $total_bytes bytes");
0; # cancel timer
});
}
#----------------------------------------------------------------------
# Change to parent directory
#
sub up_dir {
my @dirs = File::Spec->splitdir ($cwd);
pop @dirs;
ch_dir(File::Spec->catdir(@dirs));
}
#----------------------------------------------------------------------
# Change the current working directory
# * Updates file-view, location, and selection
#
sub ch_dir {
my $newdir = File::Spec->canonpath (shift);
return 0 unless -d $newdir; # only if it exists
return 0 unless $newdir ne $cwd; # only on changes
$cwd = $newdir;
refresh_fileview();
$location->set_text($cwd);
1;
}
#----------------------------------------------------------------------
# Signal handlers to match signals defined using Glade-2
#----------------------------------------------------------------------
# Some very simple handlers
sub on_home_button_clicked {ch_dir($home);}
sub on_back_button_clicked {up_dir();}
sub on_location_go_button_clicked {ch_dir($location->get_text());}
sub on_refresh_button_clicked {refresh_fileview();}
sub on_quit_activate {Gtk2->main_quit;}
sub on_prefs_button_clicked {$preferences->show_all;}
sub on_preferences_activate {$preferences->show_all;}
sub on_about_activate {$about->show_all;}
sub on_main_delete_event {Gtk2->main_quit;}
sub on_prefs_cancelbutton_clicked {$preferences->hide;}
sub on_about_okbutton_clicked {$about->hide;}
#----------------------------------------------------------------------
# Handle dialog 'close' (window-decoration induced close)
# * Just hide the dialog, and tell Gtk not to do anything else
#
sub on_dialog_delete_event {
my $w = shift;
$w->hide;
1; # consume this event!
}
#----------------------------------------------------------------------
# Handle preferencess apply click
#
sub on_prefs_applybutton_clicked {
my $context = $status->get_context_id('Main');
$status->push($context, 'Preferences updated');
}
#----------------------------------------------------------------------
# Handle prefs ok click (apply/dismiss dialog)
#
sub on_prefs_okbutton_clicked {
on_prefs_applybutton_clicked();
$preferences->hide;
}
#----------------------------------------------------------------------
# Handle key presses in location text edit control
# * Translate a Return/Enter key into a 'Go' command
# * All other key presses left for GTK
#
sub on_location_entry_key_release_event {
my $widget = shift;
my $event = shift;
my $keypress = $event->keyval;
if ($keypress == $Gtk2::Gdk::Keysyms{KP_Enter} ||
$keypress == $Gtk2::Gdk::Keysyms{Return}) {
ch_dir($widget->get_text());
return 1; # consume keypress
}
return 0; # let gtk have the keypress
}
#----------------------------------------------------------------------
# Handle keypress in file-veiw
# * Translates backspace into a 'cd ..' command
# * All other key presses left for GTK
#
sub on_fileview_key_release_event {
my $widget = shift;
my $event = shift;
if ($event->keyval == $Gtk2::Gdk::Keysyms{BackSpace}) {
up_dir();
return 1; # eat keypress
}
return 0; # let gtk have keypress
}
#----------------------------------------------------------------------
# Handle double-click (or enter) on file-view
# * Translates into a 'cd <dir>' command
#
sub on_fileview_row_activated {
my $widget = shift;
my $index = ($widget->get_selected_indices())[0];
ch_dir($cwd . '/' . $widget->{data}[$index][1]);
return 1; # consume event
}
#----------------------------------------------------------------------
sub on_size_options_changed {
my $widget = shift;
render_icons($widget->get_history);
return 0 unless defined $fileview;
( run in 2.686 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )