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 )