Re: Value Display add-on for Tk::ProgressBar.pm

Slaven Rezic <[email protected]> 11 Jul 2007 01:12:31 +0200
Newsgroups gmane.comp.lang.perl.tk
Message-ID <[email protected]>
"Michael Krause" <[email protected]> writes:

> Hi Slaven,
> 
> First of all thank you for picking the ball and bringing Perl-Tk to a new release.
> I discussed 3 years ago with Nick-Ing about my add-on for the progressbar that would add an (optional) percentage/value display. For some time reasons it did not made it into the 804.027 release, but he promised to put this in a future release, which up to today has not become reality :-|
> Therefore I kindly ask you to consider to put it into your upcoming release. I made a diff to your *500 ProgressBar.pm and attach this diff below.
> 

I think the -valuecolor and -valuecolors options could be combined
into one? There are some minor glitches (indentation level is 8, not 4
like the rest of the file; "-colors" instead of "-valuecolors" in the
Pod), but I think I'll accept the patch.

Regards,
        Slaven

> Many thanks in advance,
> 
> Br.  Michael Krause.
> -- 
> Psssst! Schon vom neuen GMX MultiMessenger gehört?
> Der kanns mit allen: http://www.gmx.net/de/go/multimessenger
> 
> --- ProgressBar_804.027_500.pm	2007-05-11 12:12:42.953311000 +0200
> +++ ./ProgressBar.pm	2007-05-11 12:44:26.256274000 +0200
> @@ -45,6 +45,12 @@
>  		  => [SELF => 'highlightThickness','HighlightThickness',0],
>  	-troughcolor
>  		  => [PASSIVE => 'troughColor', 'Background', 'grey55'],
> +	# Add-On for Value-Display (percentage as text)
> + 	-showvalue      => [PASSIVE => undef, undef, 0],
> + 	-valueformat    => [PASSIVE => undef, undef, '%s%%'],
> + 	-valuecolor     => [PASSIVE => undef, undef, 'white'],
> + 	-font           => [PASSIVE => 'font', 'Font', undef],
> +	-valuecolors    => [PASSIVE => undef, undef, undef],
>      );
>      _layoutRequest($c,1);
>      $c->OnDestroy(['Destroyed' => $c]);
> @@ -84,6 +90,8 @@
>      my $x = abs(int($c->{Configure}{'-padx'})) + $bw;
>      my $y = abs(int($c->{Configure}{'-pady'})) + $bw;
>      my $value = $c->value;
> +	my $realvalue = $value;
> +
>      my $from = $c->{Configure}{'-from'};
>      my $to   = $c->{Configure}{'-to'};
>      my $horz = $c->{Configure}{'-anchor'} =~ /[ew]/i ? 1 : 0;
> @@ -144,6 +152,25 @@
>  		-width => 0,
>  		-outline => undef);
>  
> +	# Add-On for Value-Display (percentage as text)
> +	if ($c->cget('-showvalue')) {
> +		my $text = sprintf($c->cget('-valueformat'), $value);
> +		my @font; @font = (-font => $c->cget('-font') ) if defined $c->cget('-font');
> +		my ($xpos, $ypos) = ($x+$w/2, $y+$h/2);
> +		$c->createText($xpos, $ypos,
> +			-text => $text,
> +			-tags => 'percentage',
> +			-fill => $c->cget('-valuecolor'),
> +			@font,
> +		);
> +		$c->createText(++$xpos, ++$ypos,
> +			-text => $text,
> +			-tags => 'percentage_tr',
> +			-fill => $c->{Configure}{'-troughcolor'},
> +			@font,
> +		);
> +	}
> +
>  	my($x0,$y0,$x1,$y1);
>  
>  	if($horz) {
> @@ -170,6 +197,8 @@
>  	my $color = $c->cget('-foreground');
>  	my $pos   = 0;
>  	my $val   = $minv;
> +	# Add-On for Value-Display (percentage-related color)
> +	my $valuecolor = $c->cget('-valuecolor');
>  
>  	while($val < $maxv) {
>  	    my($bw,$nval);
> @@ -277,6 +306,38 @@
>  	$c->raise($cover);
>  	$c->coords($cover,$x0,$y0,$x1,$y1);
>      }
> +
> +    # Add-On for Value-Display (percentage as text)
> +    if ($c->cget('-showvalue')) {
> +        my ($min, $max);
> +        if ($c->{Configure}{'-to'} > $c->{Configure}{'-from'}) {
> +            $min = $c->{Configure}{'-from'};
> +            $max = $c->{Configure}{'-to'};
> +        }
> +        else {
> +            $min = $c->{Configure}{'-to'};
> +            $max = $c->{Configure}{'-from'};
> +        }
> +        $realvalue = $min if $realvalue < $min;
> +        $realvalue = $max if $realvalue > $max;
> +
> +        # Support for relative Value Colors
> +        my (%valuecolors, $valuecolors, $valuecolor, $pos);
> +        $valuecolors = $c->{Configure}{'-valuecolors'} || [0, $c->cget('-valuecolor')];
> +        %valuecolors = @$valuecolors;
> +        foreach $pos ( sort keys %valuecolors) {
> +            $valuecolor = $valuecolors{$pos} if $realvalue >= $pos;
> +        }
> +        $c->itemconfigure('percentage', -fill => $valuecolor);
> +        my $text = sprintf($c->cget('-valueformat'), $realvalue);
> +        $c->dchars('percentage_tr', 0, 'end');
> +        $c->insert('percentage_tr', 0, $text); 
> +        $c->raise('percentage_tr');
> +        #---------------------------------
> +        $c->dchars('percentage', 0, 'end');
> +        $c->insert('percentage', 0, $text); 
> +        $c->raise('percentage');
> +    }
>  }
>  
>  sub value {
> @@ -342,6 +403,11 @@
>  	-blocks => 10,
>  	-colors => [0, 'green', 50, 'yellow' , 80, 'red'],
>  	-variable => \$percent_done
> +	# New Options
> +	-showvalue => '1',
> +	-valuecolor => 'black',
> +	-font => '9x15',
> +	-valueformat => '<%s %%>',
>      );
>  
>      $progress->value($position);
> @@ -468,6 +534,38 @@
>  bars this is the ProgressBars height.  The default width is derived
>  from the values of C<-borderwidth> and C<-pady> and C<-highlightthickness>.
>  
> +
> +=item B<-showvalue>
> +
> +This enables the current (percentage) value to be displayed.
> +
> +
> +=item B<-valueformat>
> +
> +Specifies the desired text mask for the current value value
> +to be displayed. Defaults to '%s%%'
> +
> +
> +=item B<-valuecolor>
> +
> +Specifies the desired text color for the  current (percentage)
> +value to be displayed.
> +
> +
> +=item B<-valuecolors>
> +
> +Controls the colors to be used for value visualization of the progress bar.
> +The colors should be supplied as a reference to an array containing pairs
> +of positions and colors.
> +
> +  -colors => [ 0, 'black', 50, 'red' ]
> +
> +
> +=item B<-font>
> +
> +Specifies the desired text font for the  current (percentage)
> +value to be displayed.
> +
>  =back
>  
>  =head1 WIDGET METHODS
> @@ -493,6 +591,8 @@
>  This program is free software; you can redistribute it and/or modify it
>  under the same terms as Perl itself.
>  
> +ValueText-Add-On 02.2004 - 2007 by M. Krause, E<lt>F<KrauseM_AT_gmx_DOT_net>E<gt>
> +
>  =cut
>  
>  

-- 
Slaven Rezic - slaven <at> rezic <dot> de

    tknotes - A knotes clone, written in Perl/Tk.
    http://ptktools.sourceforge.net/#tknotes
--++**==--++**==--++**==--++**==--++**==--++**==--++**==
ptk mailing list
[email protected]
https://mailman.stanford.edu/mailman/listinfo/ptk