Tk-AppWindow
view release on metacpan or search on metacpan
lib/Tk/AppWindow/CookBook.pod view on Meta::CPAN
=head1 NAME
Tk::AppWindow::CookBook - Some recipies
=head1 OTHER RECIPIES
=over 4
=item L<Tk::AppWindow::CookBook::Extension>
=item L<Tk::AppWindow::CookBook::Plugin>
=item L<Tk::AppWindow::CookBook::ContentManager>
=back
=head1 A SIMPLE IMAGE VIEWER
#!/usr/bin/perl
use strict;
use warnings;
################################################################
# First define the content manager. a content manager handles #
# the basic tasks like loading, saving, displaying and #
# modifying files. The content manager does the actual work. #
################################################################
package ImageManager;
use base qw(Tk::Derived Tk::AppWindow::BaseClasses::ContentManager);
Construct Tk::Widget 'ImageManager';
require Tk::Pane;
require Tk::Photo;
use Tk::PNG;
use File::Basename;
use MIME::Base64;
use Imager;
#Determining which image types we can use;
my %photoext = ();
my @types = keys %Imager::formats;
for (@types) {
$photoext{'.jpg'} = 1 if $_ eq 'jpeg';
$photoext{".$_"} = 1;
}
sub Populate {
my ($self, $args) = @_;
$self->SUPER::Populate($args);
#We create a scrolled pane as main viewer.
#In it we pack a label with the image.
my $pn = $self->Scrolled('Pane',
-scrollbars => 'osoe',
)->pack(-expand => 1, -fill => 'both');
$self->CWidg($pn);
$self->{FILE} = '';
$self->{IMAGE} = undef;
$self->ConfigSpecs(
-zoomto => ['PASSIVE', undef, undef, 'fit'],
DEFAULT => [$pn],
);
}
#overwritten method
sub doClear {
my $self = shift;
$self->{FILE} = '';
$self->ViewerClear;
$self->{IMAGE} = undef;
}
#overwritten method
sub doLoad {
my ($self, $file) = @_;
$self->{FILE} = $file;
if (-e $file) {
my ($name,$path,$suffix) = fileparse(lc($file), keys %photoext);
if (exists $photoext{lc($suffix)}) {
my $img = Imager->new;
$img->read(file=>$file) or warn "Cannot read: ", $img->errstr;
$self->{IMAGE} = $img if defined $img;
} else {
warn "Not an image $file"
}
} else {
warn "$file does not exist";
}
$self->after(100, ['ZoomDefault', $self]);
return 1
( run in 0.673 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )