#############################################################################
## Name: lib/Wx/DemoModules/wxProgressDialog.pm
## Purpose: wxPerl demo helper for Wx::ProgressDialog
## Author: Mattia Barbon
## Modified by:
## Created: 28/08/2002
## RCS-ID: $Id: wxProgressDialog.pm 2189 2007-08-21 18:15:31Z mbarbon $
## Copyright: (c) 2002, 2005-2006 Mattia Barbon
## Licence: This program is free software; you can redistribute it and/or
## modify it under the same terms as Perl itself
#############################################################################
package Wx::DemoModules::wxProgressDialog;
use strict;
use base qw(Wx::Panel Class::Accessor::Fast);
use Wx qw(:progressdialog);
use Wx::Event qw(EVT_BUTTON);
__PACKAGE__->mk_ro_accessors( qw(max_progress) );
sub new {
my( $class, $parent ) = @_;
my $self = $class->SUPER::new( $parent );
my $progress = Wx::Button->new( $self, -1, 'Progress dialog',
[ 100, 10 ] );
$self->{max_progress} = Wx::TextCtrl->new( $self, -1, 20, [10, 10] );
EVT_BUTTON( $self, $progress, \&on_progress );
return $self;
}
sub on_progress {
my( $self, $event ) = @_;
my( $max ) = $self->max_progress->GetValue;
my $dialog = Wx::ProgressDialog->new( 'Progress dialog example',
'An informative message',
$max, $self,
wxPD_CAN_ABORT|wxPD_AUTO_HIDE|
wxPD_APP_MODAL|wxPD_ELAPSED_TIME|
wxPD_ESTIMATED_TIME|
wxPD_REMAINING_TIME );
my $continue;
foreach my $i ( 1 .. $max ) {
sleep 1;
if( $i == $max ) {
$continue = $dialog->Update( $i, "That's all, folks!" );
} elsif( $i == int( $max / 2 ) ) {
$continue = $dialog->Update( $i, "Only a half left" );
} else {
$continue = $dialog->Update( $i );
}
last unless $continue;
}
Wx::LogMessage( $continue ? "Countdown from $max finished" :
"Progress dialog aborted" );
$dialog->Destroy;
}
sub add_to_tags { qw(dialogs) }
sub title { 'wxProgressDialog' }
1;