NAME
Tk::Calculator::RPN::HP - Hewlett-Packard RPN calculators
SYNOPSIS
use Tk::Calculator::RPN::HP;
$mw->Calculator(
    -type => '21' | '16c' 
)->pack;
DESCRIPTION
Tk::Calculator::RPN::HP is the OO base class and Exporter module for Perl/Tk Hewlett-Packard Reverse Polish Notation (RPN) calculators. As a base class it provides methods common to all calculators; for instance, stack manipulation, function evaluation, and instance creation activities. As an exporter of data, it provides global variables and function subroutine definitions.
Tk::Calculator::RPN::HP provides a single constructor, Calculator, as shown in the SYNOPSIS section.
Tk::Calculator::RPN::HP provides a Populate method implicity used by all calculator subclasses. The only option that Populate requires is -type, the type of calculator. Given -type, Populate loads the appropriate module, performs common instance pre-initialization, and then calls out to the subclass' Populate method to create the actual calculator.
Subclasses of Tk::Calculator::RPN::HP have this basic structure:
 $Tk::Calculator::RPN::HP_21::VERSION = '1.2';
 package Tk::Calculator::RPN::HP_21;
 use Tk::widgets qw/SlideSwitch/;
 use Tk::Calculator::RPN::HP;
 use base qw/Tk::Calculator::RPN::HP/;
 use strict;
 our $HELP;
 sub ClassInit {
     my ($class, $mw) = @_;
     $HELP = $class->build_help_window($mw);
     $class->SUPER::ClassInit($mw);
 } # end ClassInit
 sub Populate {
     my ($self, $args) = @_;
 ...
    $self->build_help_button($frame1, $HELP)->pack(qw/-side left/);
 
 ...
 } # end Populate
 # Function key processors.
 sub clxclr {
     my ($self) = @_;
     return unless $self->{ONOFF};
     if ($self->{G_PRESSED}) {	# clr
	 $self->clr;
     } else {			# clx
 	$self->clx;
     }
 } # end clxclr
 1;
As you can see, the module is simply a standard Perl/Tk mega-widget.
You are required to invoke two methods, build_help_window and build_help_button. build_help_window creates a Toplevel that's exposed when the ? Button is pressed. build_help_button builds the ? Button proper. Because the Toplevel help window is used by all class instances, it's typically created in ClassInit. You call build_help_button when and where you want the ? packed.
Although most calculator functions are provided by the base class, you may find it necessary to write your own function key processors.
OPTIONS
The following option/value pairs are supported:
- -type
 - 
The type of HP RPN calculator. Currently 21 and 16c are legal values. There is no default, this option is required.
 - -progressbar
 - 
An optional reference to a Tk::ProgressBar::Mac widget. If specified, you are to update it periodically as the calculator takes shape.
 
METHODS
$HELP = $class->build_help_window($mw);
Build a standard calculator help window and return a reference to the Toplevel. You must provide an image "images/hp_" concat lc(-type) concat "-back.gif" (e.g. images/hp_21-back.gif) of the back of the calculator, since there might be useful data. ClassInit is a good place to do this.
$self->build_help_button($parent, $HELP);
Build the ? Button that displays the Toplevel window created by build_help_window. $parent is the Button's parent widget.
ADVERTISED WIDGETS
Component subwidgets can be accessed via the Subwidget method. This mega widget has no advertised subwidgets.
EXAMPLE
This complete example incorprates a splashscreen with a progressbar.
 use Tk;
 use Tk::Calculator::RPN::HP;
 use Tk::ProgressBar::Mac;
 use Tk::Splashscreen;
 use subs qw/main/;
 use strict;
 main;
 sub main {
     my $type = $OPT{type};
     my $mw = MainWindow->new;
     $mw->withdraw;
     $mw->title('Hewlett-Packard ' . $type . ' Calculator');
     $mw->iconname('HP ' . $type);
     my $splash = $mw->Splashscreen;
     $splash->Label(
        -text       => 'Building your HP ' . $type . ' ...',
     )->pack(qw/-fill both -expand 1/);
     my $pb = $splash->ProgressBar(-width => 300);
     $pb->pack(qw/-fill both -expand 1/);
     $splash->Label(
         -image => $mw->Photo(
	     -file => Tk->findINC('Calculator/RPN/images/hp_' . $type . '-splash.gif')
         ),
     )->pack;
     $splash->Splash;
     $mw->Calculator(
         -type        => $type, 
         -progressbar => $pb,
     )->pack;
     $splash->Destroy;
     $mw->deiconify;
    
     MainLoop;
 } # end main
AUTHOR
sol0@Lehigh.EDU
Copyright (C) 2001 - 2007, Steve Lidie. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
KEYWORDS
calculator, HP, RPN