Padre::Wx::Progress - Tell the user that we're doing something


Padre documentation Contained in the Padre distribution.

Index


Code Index:

NAME

Top

Padre::Wx::Progress - Tell the user that we're doing something

SYNOPSIS

Top

  my $object = Padre::Wx::Progress->new($title, $max_count,
               modal => 1,
               lazy  => 1,
               );

  $object->Update($done_count, $current_work_text);

DESCRIPTION

Top

Shows a progress bar dialog to tell the user that we're doing something.

METHODS

Top

new

  my $object = Padre::Wx::Progress->new($title, $max_count,
               message => $default_message # optional
               modal => 1, # optional
               lazy  => 1, # optional
               );

The new constructor lets you create a new Padre::Wx::Progress object.

$title is the title of the new box.

$max_count contains the highest item-number being processed.

Options:

A default message could be set (in case update should be called without text) with the message key. This is overridden by the newest update text. Default is an empty message.

Set modal to true to lock other application windows while the progress box is displayed. Default is 0 (non-modal).

Set lazy to true to show the progress dialog only if the whole process takes long enough that the progress box makes sense. Default if 1 (lazy-mode).

All options are optional, Padre will use fixed defaults if they're missing.

Returns a new Padre::Wx::Progress or dies on error.

update

  $progress->update($value,$text);

Updates the progress bar with a new value and optional with a new text message.

The last message will stay if no new text is specified.

COPYRIGHT & LICENSE

Top


Padre documentation Contained in the Padre distribution.
package Padre::Wx::Progress;

use 5.008;
use strict;
use warnings;
use Padre::Wx ();

our $VERSION = '0.86';

sub new {
	my $class = shift;

	my $main  = shift;
	my $title = shift;
	my $max   = shift;

	my $self = bless { max => $max, title => $title, main => $main, start => time, @_ }, $class;

	$self->{title}   ||= Wx::gettext('Please wait...');
	$self->{message} ||= '';

	# Lazy mode means: Create the progress bar only when it makes sense. If this is requested,
	# don't create it here:
	$self->_create_progress if !$self->{lazy};

	return $self;
}

sub _create_progress {
	my $self = shift;

	# Add some default flags:
	my $flags = Wx::wxPD_ELAPSED_TIME | Wx::wxPD_ESTIMATED_TIME | Wx::wxPD_REMAINING_TIME | Wx::wxPD_AUTO_HIDE;
	$flags |= Wx::wxPD_APP_MODAL if $self->{modal};

	# Create the progress bar dialog:
	$self->{dialog} = Wx::ProgressDialog->new(
		$self->{title}, $self->{message},
		$self->{max}, $self->{main}, $flags
	);
}

sub update {
	my $self  = shift;
	my $value = shift;
	my $text  = shift;

	if ( !defined( $self->{dialog} ) ) {

		# Lazy mode: Don't waste CPU time for a box which is destroyed immed.
		return 1 if $self->{start} >= ( time - 1 );
		$self->_create_progress;
	}

	$self->{dialog}->Update( $value, $text );

	return 1;
}

sub Destroy {

	# Simulate Wx's ->Destroy function
	shift->DESTROY;
}

sub DESTROY {
	my $self = shift;

	# Destroy (and hide )the dialog if it's still defined
	$self->{dialog}->Destroy if defined( $self->{dialog} );
}

1;

# Copyright 2008-2011 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.