Tk-RotatingGauge
view release on metacpan or search on metacpan
lib/Tk/RotatingGauge.pm view on Meta::CPAN
#
# This file is part of Tk-RotatingGauge
#
# This software is copyright (c) 2007 by Jerome Quelin.
#
# This is free software; you can redistribute it and/or modify it under
# the same terms as the Perl 5 programming language system itself.
#
use 5.008;
use warnings;
use strict;
package Tk::RotatingGauge;
our $VERSION = '1.100140';
# ABSTRACT: a rotating gauge for tk
use POSIX qw{ floor };
use Tk;
use Tk::Canvas;
use base qw{ Tk::Derived Tk::Canvas };
Construct Tk::Widget 'RotatingGauge';
# -- builders & initializers
#
# Populate - Tk internals
#
sub Populate {
my( $self, $args ) = @_;
# create the parent widget, specify our options.
$self->SUPER::Populate( $args );
$self->ConfigSpecs(
-box => [ 'PASSIVE', undef, undef, 'black' ],
-from => [ 'PASSIVE', undef, undef, 0 ],
-indicator => [ 'PASSIVE', undef, undef, 'red' ],
-labels => [ 'PASSIVE', undef, undef, undef ],
-orient => [ 'PASSIVE', undef, undef, 'horiz' ],
-policy => [ 'PASSIVE', undef, undef, 'rotate' ],
-to => [ 'PASSIVE', undef, undef, 100 ],
-visible => [ 'PASSIVE', undef, undef, 20 ],
-value => [ 'METHOD', undef, undef, undef ],
);
# store the initial value for after initialization.
my $val = exists $args->{-value} ? delete $args->{-value} : 50 ;
$self->{Configure}{-value} = $val;
# let's wait for canvas to be created before initializing the
# various canvas items that will compose the gauge.
$self->afterIdle( sub { $self->_draw_items } );
}
# -- public methods
sub value {
my ($self, $value) = @_;
my $is_strict = $self->{Configure}{-policy} eq 'strict';
my $from = $self->{Configure}{-from};
my $to = $self->{Configure}{-to};
# check out-of-bounds.
my $frac = $value - int($value);
$value = $is_strict ? $from : $value % ($to-$from) + $frac
if $value < $from;
$value = $is_strict ? $to : $value % ($to-$from) + $frac
if $value >= $to;
# move the canvas items around.
my $v = $self->{Configure}{-value};
my $d = ($v - $value) * $self->{Configure}{-step};
my @delta = $self->{Configure}{-is_horiz} ? ($d, 0) : (0, $d);
$self->move( 'grid', @delta );
$self->{Configure}{-value} = $value;
( run in 2.628 seconds using v1.01-cache-2.11-cpan-8dfa8b56332 )