#!/usr/bin/perl -w use strict; use vars qw($VERSION $aboutWindow $mainWindow $camelanim); use Tk; $VERSION = "0.01"; # Make the main window, menu bar and Help menu. $mainWindow = new MainWindow (-title => "A program",); my $mb = $mainWindow->Frame(-relief => 'raised', -borderwidth => 2); $mb->pack( -fill => 'x', -expand => 'false', ); my $helpB = $mb->Menubutton( -text => 'Help', -underline => 0, ); $helpB->menu(-tearoff => 0); $helpB->pack(-side => 'right'); $helpB->command( -label => 'About...', -underline => 0, -command => \&aboutViewer, ); MainLoop; # Show module information. sub aboutViewer { require Tk::Animation; require Tk::ROText; if ($aboutWindow) { $aboutWindow->deiconify; $aboutWindow->focus; $camelanim->start_animation(200); } $aboutWindow = $mainWindow->Toplevel(-title => 'About Viewer'); my $top = $aboutWindow->Frame->pack(-fill => 'x', -expand => 'true',); my $right = $top->Frame->pack(-side => 'right'); my $left = $top->Frame->pack(-side => 'left'); $left->Message( -text => "Copyright (C) 2001 by Your Name Here", -relief => 'flat', -width => 400, )->pack(-fill => 'x', -expand => 'true',); $camelanim = $right->Animation( '-format' => 'gif', -file => Tk->findINC('anim.gif') ) unless $camelanim; $right->Label(-image => $camelanim)->pack; $camelanim->start_animation(200); my $aboutText = $aboutWindow->Scrolled( 'ROText', -scrollbars => 'oe', -wrap => 'word', -width => 40, -height => 20, )->pack( -fill => 'x', -expand => 'true', ); $aboutText->insert('end',"$0 $::VERSION\n") if defined($::VERSION); foreach (&moduleDump) { $aboutText->insert('end',$_); } $aboutWindow->Button(Name => 'okayButton', -text => 'Okay', -command => sub { $aboutWindow->withdraw; }, )->pack(-side => 'bottom'); $aboutWindow->bind( '', sub { undef($aboutWindow); $camelanim->stop_animation; } ); $aboutWindow->bind( '', sub { $camelanim->stop_animation; } ); } # Roll credits. sub moduleDump { my ($module, $line, @out, %package_stab, $package_version); foreach (sort(keys %INC)) { next unless /^[A-Z]/; $module = $_; $module =~ s/\.pm$//; $module =~ s/\//::/g; %package_stab = eval("%{*" . $module . "::}"); if (exists $package_stab{'VERSION'}) { $package_version = $package_stab{'VERSION'}; $package_version = $$package_version; if (defined($package_version)) { $line = $module . " version $package_version\n"; } else { $line = $module . ", no version\n"; } } else { $line = $module . ", no version\n"; } push @out, $line; } return @out; }