Devel-Animator
view release on metacpan or search on metacpan
Animator.pm view on Meta::CPAN
$self->set( '_saved_mod_end_seq', $self->{_mw}->{_mod_end_seq}->get() );
$self->set( '_saved_mod_start_seq', $self->{_mw}->{_mod_start_seq}->get() );
exit(0) if -e '_exit_for_test';
}
sub set_started_state {
#
# gathers program changes and processes them
#
my $self = shift;
# init status bar
$self->set('_meta_data_start', $self->{_mw}->{_mod_start_seq}->get());
$self->set('_meta_data_start_display', sprintf( "%8d", $self->{_mw}->{_mod_start_seq}->get() ));
$self->set('_meta_data_end', $self->{_mw}->{_mod_end_seq}->get() );
$self->set('_meta_data_end_display', sprintf( "%8d", $self->{_mw}->{_mod_end_seq}->get() ));
$self->set( '_status','RUNNING');
$self->set( '_msg' ,'Animation in Progress');
if ($self->{_mw}->{_mod_start_seq}->get() < 1 ) {
$self->{_mw}->messageBox(-title => "Error setting new start sequence", -type => "Ok", -message => "edit start sequence to be a integer greater then 0");
return(0);
}
if ($self->{_mw}->{_mod_start_seq}->get() >= $self->{_mw}->{_mod_end_seq}->get() ) {
$self->{_mw}->messageBox(-title => "Error setting new start sequence", -type => "Ok", -message => "edit start sequence to be less then end sequence");
return(0);
}
if ( $self->{_mw}->{_mod_end_seq}->get() > $self->{_meta_data_end} ) {
$self->{_mw}->messageBox(-title => "Error setting new end sequence", -type => "Ok", -message => "edit end sequence to be less then end record of meta-data");
return(0);
}
if ( $self->{_saved_mod_start_seq} != $self->{_mw}->{_mod_start_seq}->get() ) {
$self->set( '_index', $self->{_mw}->{_mod_start_seq}->get());
}
elsif ( $self->{_saved_mod_start_seq} == $self->{_mw}->{_mod_start_seq}->get() ) {
$self->set( '_index', $self->{_index});
}
}
sub set_init_state {
#
# sets the defaults for the program when an initial state is requested
# and is generally called after a change to the meta data is requested
#
my $self = shift;
$self->set_stopped_state();
$self->set( '_direction' ,'FWD');
# init status bar
$self->set('_meta_data_start', 1);
$self->set('_meta_data_start_display', 1);
$self->set('_meta_data_end', scalar(@{$self->{_meta_ref}}) );
$self->set('_meta_data_end_display', sprintf( "%8d", scalar(@{$self->{_meta_ref}}) ) );
$self->set( '_index', $self->{_mw}->{_mod_start_seq}->get());
$self->set_started_state();
}
sub update_delay {
my $self = shift;
my $delay = shift;
return if ( ! defined($self->{_timer_id}));
$self->set( '_delay', $delay);
$self->set( '_delay_msg', $self->{_delay} . ' ms');
$self->{_timer_id}->cancel;
$self->{_timer_id} = $self->{_table}->repeat($self->{_delay}, sub { $self->update_table }, $self->{_table});
}
sub format_table {
my $self = shift;
my $table = shift;
my ($row, $col);
$table->configure( -rows => $self->{_frame_window}, -bg => 'white' );
$table->configure( -fixedrows => 0 );
for $row (1..$self->{_frame_window}) {
$self->{_label_hash_ref}->{"${row}_1"} = $table->Label(-text => '', -width => 6, -relief => 'flat', -background => 'white', -anchor => 'w');
$table->put($row,1,$self->{_label_hash_ref}->{"${row}_1"});
$self->{_label_hash_ref}->{"${row}_2"} = $table->Label(-text => '', -width => 6, -relief => 'flat', -background => 'white', -anchor => 'w');
$table->put($row,2,$self->{_label_hash_ref}->{"${row}_2"});
$self->{_label_hash_ref}->{"${row}_3"} = $table->Label(-text => '', -width => 150, -relief => 'flat', -background => 'white', -anchor => 'w');
$table->put($row,3,$self->{_label_hash_ref}->{"${row}_3"});
}
$table->pack(-expand => 0 ,-fill => 'both');
}
sub calculate_pct {
my $self = shift;
my $start = shift;
my $end = shift;
my $row = shift;
my $total_executions = abs($start-$end)+1;
my $executions_done = abs($start-$row);
return(0) if ($total_executions == 0);
my $pct = int((($executions_done/$total_executions)*100)+.1);
return( $pct);
}
sub load_file_cache {
my $self = shift;
my %unique_files;
my @cache = ();
foreach my $data (@{$self->{_meta_ref}}) {
my $file = substr $data, 6, 128;
$file = $self->good_filename( $file ); # if a filename cannot be parsed
next if ! defined($file); # or name be parsed skip it
if (! -e $file) {
print STDERR "file $file not found!","\n";
Animator.pm view on Meta::CPAN
#---
#
# get executions
#
#---
my $exec_line = $table->get($line-$self->{_offset}+1, 1);
$exec_line->configure(-background => 'pink') if (defined($exec_line));
my $executions = $exec_line->cget('-text');
#---
#
# get line number for source file
#
#---
my $line_no = $table->get($line-$self->{_offset}+1, 2);
$line_no->configure(-background => 'pink') if (defined($line_no));
my $line_number = $line_no->cget('-text');
if ( ! defined($self->{_executions_ref}->{$self->{ '_loaded_file' } . $line_number }) ) {
$self->{_executions_ref}->{$self->{ '_loaded_file' } . $line_number }= 1;
}
else {
$self->{_executions_ref}->{$self->{ '_loaded_file' } . $line_number }++;
}
# update executions
$exec_line->configure(-text => $self->{_executions_ref}->{$self->{ '_loaded_file' } . $line_number });
my $code = $table->get($line-$self->{_offset}+1, 3);
$code->configure(-background => 'pink') if (defined($code));
$table->see($line-$self->{_offset}+1, 1);
}
sub good_filename {
my $self = shift;
my $file = shift;
# attempts to recover distorted filenames
# should go here
#
if (($^O eq 'MSWin32') and ( $file =~ m{(\w{1}:([\\/]\w+)+(.pm|.pl)*|\w+.pl)}g )) {
return(undef) unless defined($1);
if ( -e $1) {
return($1);
}
}
if (($^O ne 'MSWin32') and ( $file =~ m{(([\\/]\w+)+(.pm|.pl)*|\w+.pl)}g )) {
return(undef) unless defined($1);
if ( -e $1) {
return($1);
}
}
return(undef)
}
sub update_table {
my $self = shift;
my $table = shift;
$self->{_mw}->update;
return if ($self->{_status} eq 'STOPPED');
return if ($self->{_status} eq 'INIT');
return if (! $self->done_loading_meta_data());
return unless $self->retreiving_data();
$self->set( '_sequence', $self->trim( substr $self->{'_meta_ref'}[ $self->{'_index'}], 0, 6) );
$self->set( '_file', substr $self->{'_meta_ref'}[ $self->{'_index'}], 6, 128);
$self->set( '_line', $self->trim( substr $self->{'_meta_ref'}[ $self->{'_index'}], 134, 6) );
$self->set( '_code', substr $self->{'_meta_ref'}[ $self->{'_index'}], 140, 80);
$self->set( '_cur_srce_line', $self->{_line} );
$self->set( '_cur_exec_line', $self->{_sequence} );
my $dir_offset;
if ( $self->{_direction} eq 'FWD' ) { $dir_offset = 2; }
else { $dir_offset = 1; }
$self->set( '_pct_complete', $self->calculate_pct( $self->{_mw}->{_mod_start_seq}->get(), $self->{_mw}->{_mod_end_seq}->get(), $self->{'_index'}+$dir_offset) . ' %');
$self->{_file} = $self->good_filename( $self->{_file} );
return if ! defined($self->{_file});
# ways for a new file to be loaded
# 1. the display widget is currently empty and we have read the first meta record
# 2. the current meta record has a different file then is presently loaded in the display
# how to load a new file
# 1. if the file is smaller then the frame_window then the entire file is loaded
# into the display.
# 2. if the file is larger then the frame_window the take the line_number
# - frame_window/2 and line_number + frame_window/2 from the file and
# load that to the display
if ( ! defined($self->{_loaded_file}) or ($self->{_file} ne $self->{_loaded_file} ) or ($self->{_status} eq 'INIT')) {
$self->set( '_loaded_file', $self->{_file});
my $file_splice_ref = $self->get_file_splice( $self->{_file}, $self->{_line});
$self->set( '_file_splice_ref', $file_splice_ref );
$self->load_display( $self->{_file_splice_ref}, $self->{_line}, $self->{_offset}, $self->{_table});
$self->set( '_screen_mode', 'load');
$self->set( '_status', 'RUNNING');
}
# if it is not an initial file or new file, ccheck if the window parameters on
# the file have changed ot normal SOP
elsif ( $self->changed_window() ) {
$self->set( '_file_splice_ref', $self->get_file_splice( $self->{_file}, $self->{_line}) );
$self->load_display( $self->{_file_splice_ref}, $self->{_line}, $self->{_offset}, $self->{_table});
$self->set( '_screen_mode', 'update');
}
$self->highlight($self->{_line}, $self->{_last_line}, $self->{_start_sequence}, $self->{_end_sequence}, $self->{_table});
$self->set( '_last_line', $self->{_line});
$self->set( '_screen_mode', 'static');
if ( defined($ENV{ANI_DEBUG}) and $ENV{ANI_DEBUG} == 1 ) { $self->dump_self(),"\n"; }
}
} # end of Devel
( run in 0.572 second using v1.01-cache-2.11-cpan-d8267643d1d )