Orac-alpha
view release on metacpan or search on metacpan
Tk/MonitorBar.pm view on Meta::CPAN
package Tk::MonitorBar;
use Tk;
use Tk::ProgressBar;
use Carp;
use strict;
use base qw(Tk::Derived Tk::ProgressBar);
Construct Tk::Widget 'MonitorBar';
sub _arrange {
my $c = shift;
my $checker = Tk::Exists($c);
unless ($checker)
{
return;
}
my $why = $c->{'layout_pending'};
$c->{'layout_pending'} = 0;
my $w = $c->Width;
my $h = $c->Height;
my $bw = $c->cget('-borderwidth') + $c->cget('-highlightthickness');
my $x = abs(int($c->{Configure}{'-padx'})) + $bw;
my $y = abs(int($c->{Configure}{'-pady'})) + $bw;
my $value = $c->value;
my $from = $c->{Configure}{'-from'};
my $to = $c->{Configure}{'-to'};
my $horz = $c->{Configure}{'-anchor'} =~ /[ew]/i ? 1 : 0;
my $dir = $c->{Configure}{'-anchor'} =~ /[nw]/i ? -1 : 1;
my($minv,$maxv) = $from < $to ? ($from,$to) : ($to,$from);
if($w == 1 && $h == 1) {
my $bw = $c->cget('-borderwidth');
my $defw = 10 + $y*2 + $bw *2;
my $defl = ($maxv - $minv) + $x*2 + $bw*2;
$h = $c->{Configure}{'-length'} || $defw;
$w = $c->{Configure}{'-width'} || $defl;
($w,$h) = ($h,$w) unless $horz;
$c->GeometryRequest($w,$h);
$c->parent->update;
$c->update;
$w = $c->Width;
$h = $c->Height;
}
$w -= $x*2;
$h -= $y*2;
my $length = $horz ? $w : $h;
my $width = $horz ? $h : $w;
my $blocks = int($c->{Configure}{'-blocks'});
my $gap = int($c->{Configure}{'-gap'});
$blocks = 1 if $blocks < 1;
my $gwidth = $gap * ( $blocks - 1);
my $bwidth = ($length - $gwidth) / $blocks;
( run in 0.413 second using v1.01-cache-2.11-cpan-a1f116cd669 )