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 )