App-PLab

 view release on metacpan or  search on metacpan

lib/App/PLab/ImageApp.pm  view on Meta::CPAN

   $w-> {keyMappings} = { map { $_ => Prima::AbstractMenu-> translate_shortcut( eval($i-> {$_})); } 
       grep { m/^Key_/  } keys %$i };
   $i->{"Color_$_"} = eval( $i->{"Color_$_"}) for keys %$colors;
   my @rc = split ' ', $i->{WindowRect};
   my @ac = $::application-> rect;
   $ac[3] -= $::application-> get_system_value( sv::YMenu) * 3 + $::application-> get_system_value( sv::YTitleBar);
   $rc[0] = 0 if $rc[0] >= $ac[2];
   $rc[1] = 0 if $rc[1] >= $ac[3];
   $rc[3] = $ac[3] if $rc[3] >= $ac[3];
   $w-> rect(@rc);
   $w-> {cypherMask} = ( lc $w->{ini}->{SerType} eq 'long') ? 3 : 2;
   -d $w-> {ini}-> {path} or $w-> {ini}-> {path} = '.';
   $w-> {ini}-> {path} = eval {&Cwd::abs_path($w-> {ini}-> {path})};
   $w-> {ini}-> {path} = '.' if $@;
   $w-> {ini}-> {path} = '' unless -d $w-> {ini}-> {path};

   $w-> maximize if $i->{MaxState};
   $w-> insert( Popup =>
      auto     => 0,
      selected => 0,
      name     => 'LoadSeriesPopup',
      items    => [['' => '']],
   );
   $::application-> showHint( $w-> {ini}-> {showHint});
   $w-> winmenu_updatemappings;
}

sub on_destroy
{
   my ($w,$i) = ($_[0],$_[0]->{ini});
   $i->{MaxState}   = $w-> windowState == ws::Maximized;
   $w-> windowState(ws::Normal) if $i->{MaxState};
   my @rc = $w-> rect;
   $i->{WindowRect} = "@rc";
   $i->{SerType}    = ( $w->{cypherMask} == 2) ? 'Short' : 'Long';
   $i-> {$_} = Prima::KeySelector::shortcut( $w-> {keyMappings}->{$_})
      for keys %{$w->{keyMappings}};
   my $optColors = $w-> opt_colors;   
   $i-> {"Color_$_"} = $w-> ini_makecolor( $i-> {"Color_$_"}) for keys %$optColors;
   $::application-> close;
}

sub on_close
{
   my ($w,$i) = ($_[0],$_[0]->{ini});
   $w-> clear_event unless $w-> win_closefile;
}


sub win_inidefaults
{
   my $w = $_[0];
   my @rc = $w-> rect;
   return (
      path         => '.',
      WindowRect   => "@rc",
      MaxState     => 0,
      SerType      => 'Short',
      extSaveDir   => '',
      silentExtDir => 0,
      dirTimeout   => 120,
      statusDelay  => 5,
      showHint     => 1,
   );
}

sub win_extname
{
   my ($w, $extname) = @_;
   my $ext = $w-> {dataExt};
   $extname =~ /([^\\\/]*)$/;
   $extname = $1;
   if ( $extname =~ /\.[^.]*$/) {
      $extname =~ s/\.[^.]*$/\.$ext/
   } else {
      $extname .= ".$ext";
   }
   my $extsave = length($w-> {ini}-> {extSaveDir}) ? $w-> {ini}-> {extSaveDir} : $w-> {ini}-> {path};
   return "$extsave/$extname";
}

sub win_extwarn
{
   my $w = $_[0];
   return unless length $w->{ini}->{extSaveDir};
   return if $w->{ini}->{silentExtDir};
   my $ret = Prima::MsgBox::message_box( $::application-> name, ".".$w-> {dataExt}." save path is ".
      $w->{ini}->{extSaveDir}.".\nDo you want to set it to the current directory, as default?",
      mb::YesNo | mb::Abort | mb::Warning, {
      buttons => { mb::Abort, { text => 'Ne~ver' }},
    });
   if ( $ret == mb::Yes) {
      $w->{ini}->{extSaveDir} = '';
      $w-> win_extpathchanged;
   } elsif ( $ret == mb::Abort) {
      Prima::MsgBox::message("You will be never asked again, until you manually re-set the save path to the default", mb::Information);
      $w->{ini}->{silentExtDir} = 1;
   }
}


sub win_extpathchanged
{
}

sub win_newframe
{
   $_[0]-> modified( 0);
}


sub win_saveframe
{
   return 1;
}

sub win_closeframe
{
}

sub win_framechanged

lib/App/PLab/ImageApp.pm  view on Meta::CPAN

      Prima::MsgBox::message_box( $::application-> name, "Error loading file $file", mb::OK|mb::Error);
      return 0;
   }
   $w-> {preloadfile} = undef;

   $w-> win_closeextras;
   $w-> win_closeframe;
   $file =~ m{[/\\]([^/\\]*)$};
   $w-> text( $::application-> name . " - [$1]");
   $w-> {ini}-> {path} = $path;
   $w-> {file} = $file;
   $w-> IV-> image( $i);
   ($w-> {IVx}, $w->{IVy}) = $w-> IV-> image-> size;

   $w-> win_newframe;
   $w-> win_newextras;
   $w-> win_framechanged;
   $w-> win_extraschanged;

   $w-> IV-> repaint;

   $w-> sb_text( "$file loaded OK");
   $self-> pointer($self-> {savePointer});

   return 1;
}

sub win_closefile
{
   my $w = $_[0];
   return 1 unless defined $w->{file};
   return 0 if !$w-> win_saveframe;
   $w-> win_closeframe;
   $w-> win_closeextras;

   $w-> text( $::application-> name);
   $w-> {file} = undef;
   $w-> IV-> image( undef);
   $w-> {IVx} = $w-> {IVy} = 0;
   $w-> IV-> repaint;
   $w-> win_framechanged;
   $w-> win_extraschanged;
   return 1;
}


sub win_nextfile
{
   $_[0]-> win_loadfile( $_[0]-> {nextFile}) if defined $_[0]-> {nextFile};
}

sub win_getseriesrange
{
   my $w = $_[0];

   return (0,0) unless defined $w->{fileNum};
   my $path = $w-> {ini}-> {path};
   my @d;

   if ( exists $w-> {cachedDir} && ( $w-> {cachedDir} eq $path) &&
      (( time - $w-> {cachedDirTime}) < $w-> {ini}-> {dirTimeout})) {
      @d = @{$w-> {cachedDirContent}};
   } else {
      warn("Cannot read directory $path:$!"), return (0,0) unless opendir DIR, $path;
      @d = readdir DIR;
      closedir DIR;
      $w-> {cachedDir}        = $path;
      $w-> {cachedDirTime}    = time;
      $w-> {cachedDirContent} = \@d;
   }

   my ( $min, $max) = ( 0, 10 ** $w-> {cypherMask} - 1);
   my ( $fmin, $fmax, $i) = ( $w->{fileNum}, $w->{fileNum});
   my @bix = ();
   my $num = $w->{cypherMask};
   my $fbeg = $w->{fileBeg};
   $fbeg =~ s{.*[/\\]([^/\\]*)$}{$1};

   for (@d) {
      next unless /(.*)(\d{$num})(\.(?:tif|gif|jpg|bmp|pcx|png))$/i;
      next unless $1 eq $fbeg and $3 eq $w->{fileEnd};
      $bix[ $2] = 1;
   }

   for ( $i = $w->{fileNum}; $i >= $min; $i--) {
       last unless $bix[ $i];
       $fmin = $i;
   }

   for ( $i = $w->{fileNum}; $i <= $max; $i++) {
       last unless $bix[ $i];
       $fmax = $i;
   }

   return $fmin, $fmax;
}

sub win_formfilename
{
   my ( $w, $fnum) = @_;
   my $num = $w-> {cypherMask};
   return sprintf("%s%0${num}d%s",$w->{fileBeg}, $fnum, $w->{fileEnd});
}

sub win_next5file
{
   my $w = $_[0];
   return unless defined $w-> {nextFile};
   my ( $min, $max) = $w-> win_getseriesrange;
   $w-> win_loadfile( $w-> win_formfilename(( $w-> {fileNum} + 5 > $max) ? $max : ( $w-> {fileNum} + 5)));
}

sub win_lastfile
{
   my $w = $_[0];
   return unless defined $w-> {nextFile};
   my ( $min, $max) = $w-> win_getseriesrange;
   $w-> win_loadfile( $w-> win_formfilename( $max));
}

sub win_prevfile



( run in 1.207 second using v1.01-cache-2.11-cpan-df04353d9ac )