# A few routines for asking the user questions. Used in --configure # and also by Makefile.PL, so this file should not depend on any # nonstandard libraries. # package XMLTV::ProgressBar; use strict; use XMLTV::GUI; # Use Log::TraceMessages if installed. BEGIN { eval { require Log::TraceMessages }; if ($@) { *t = sub {}; *d = sub { '' }; } else { *t = \&Log::TraceMessages::t; *d = \&Log::TraceMessages::d; } } my $real_class = 'XMLTV::ProgressBar::None'; my $bar; # Must be called before we use this module if we want to use a gui. sub init( $ ) { my $opt_gui = shift; # Ask the XMLTV::GUI module for the graphics type we will use my $gui_type = XMLTV::GUI::get_gui_type($opt_gui); if ($gui_type eq 'term') { $real_class = 'XMLTV::ProgressBar::None'; } elsif ($gui_type eq 'term+progressbar') { $real_class = 'XMLTV::ProgressBar::Term'; } elsif ($gui_type eq 'tk') { $real_class = 'XMLTV::ProgressBar::Tk'; } else { die "Unknown gui type: '$gui_type'."; } } # Create and return a new progress bar. # Parameters: # text to display # maximum value # Or the syntax for Term::ProgressBar may be used, but much of it will be # ignored in some of the implementations. sub new { my $class = shift; ((my $real_class_path = $real_class.".pm") =~ s/::/\//g); require $real_class_path; import $real_class_path; $bar = $real_class->new(@_); my $self = {}; return bless $self, $class; } # Alter the value displayed in this progress bar # Parameters: # the value to change this bar to display (optional) # If no value is given, the value will be incremented by 1. sub update { my $self = shift; return $bar->update( @_ ); } # Close the progress bar. sub finish { # Only does anything for the GUI ones. if ($real_class eq 'XMLTV::ProgressBar::Tk') { return $bar->finish(); } } 1;