PPresenter

 view release on metacpan or  search on metacpan

PPresenter/tkTimerLabel.pm  view on Meta::CPAN

# Copyright (C) 2000-2002, Free Software Foundation FSF.

package PPresenter::tkTimerLabel;

use strict;
use Tk::Derived;
use Tk::Label;
use base qw(Tk::Derived Tk::Label);

Construct Tk::Widget 'TimerLabel';

sub Populate
{   my ($w, $args) = @_;

    $w->SUPER::Populate($args);

    $w->ConfigSpecs
    ( -maxValue   => [ qw/PASSIVE maxValue MaxValue/,       300 ]
    , -value      => [ qw/PASSIVE value Value/,               0 ]
    , -setValue   => [ qw/METHOD setValue SetValue/,          0 ]
    , -step       => [ qw/METHOD step Step/,                  0 ]
    , -colorScale => [ qw/PASSIVE colorScale ColorScale/, undef ]
            # [qw/white 0.8 green 1.2 red/]
    );
}

sub makeTime($)
{   my $secs = int $_[1];
    my $mins = int($secs/60);
    sprintf '%3d:%02d', $mins, $secs-60*$mins;
}

sub makeColor($$)
{   my ($w, $value, $max) = @_;

    my $colors = $w->cget(-colorScale);
    return 'white' unless defined $colors;
    return $colors->[0] unless defined $max && $max != 0;

    my $percentage = $value/$max;

    @_ = @$colors;
    shift, shift until(!defined $_[1] || $_[1] > $percentage);
    return $_[0];
}

sub step($)
{   my ($w, $step) = @_;
    my $value = $w->cget('-value') || 0;
    $w->setValue($value+$step);
}

sub setValue($)
{   my ($w, $value) = @_;

    $w->configure
    ( -text       => $w->makeTime($value),
    , -background => $w->makeColor($value, $w->cget('-maxValue'))
    , -value      => $value
    );
}



( run in 0.793 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )