The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#############################################################################
## 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;