Prima
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
Prima/sys/win32/FileDialog.pm view on Meta::CPAN
sub pathMustExist
{
return $_[0]->{flags}->{PATHMUSTEXIST} unless $#_;
$_[0]->{flags}->{PATHMUSTEXIST} = $_[1];
}
sub fileMustExist
{
return $_[0]->{flags}->{FILEMUSTEXIST} unless $#_;
$_[0]->{flags}->{FILEMUSTEXIST} = $_[1];
}
sub showHelp
{
return $_[0]->{flags}->{SHOWHELP} unless $#_;
$_[0]->{flags}->{SHOWHELP} = $_[1];
}
sub fileName
{
unless ( $#_) {
return $_[0]->{fileName} unless $_[0]->multiSelect;
my @s = quoted_split( $_[0]-> {fileName});
return $s[0] unless wantarray;
return @s;
}
$_[0]->{fileName} = $_[1];
}
sub defaultExt
{
return $_[0]->{defaultExt} unless $#_;
$_[0]->{defaultExt} = $_[1];
}
sub openMode
{
return $_[0]->{openMode} unless $#_;
$_[0]->{openMode} = $_[1];
}
sub text
{
return $_[0]->{text} unless $#_;
$_[0]->{text} = $_[1];
}
# dummies
sub sorted { 1 }
sub showDotFiles { 1 }
# mere callbacks if someone wants these to inherit
sub ok {}
sub cancel {}
sub _set
{
my @cmd = @_;
for my $c ( @cmd ) {
unless ( Encode::is_utf8($c)) {
my $v = Prima::Utils::local2sv($c);
$c = $v if defined $v;
}
$c = Encode::encode('utf-8', $c);
}
my $cmd = shift @cmd;
Prima::Application-> sys_action( "win32.OpenFile.$cmd=".join('', @cmd));
}
sub _get
{
my $cmd = shift;
$cmd = Prima::Application-> sys_action( "win32.OpenFile.$cmd");
return Encode::decode('utf-8', $cmd);
}
sub execute
{
my $self = $_[0];
_set( flags => join(',', grep { $self->{flags}->{$_}} keys %{$self->{flags}}));
_set( filters => join("\0", map { "$$_[0] ($$_[1])\0$$_[1]" } @{$self->{filter}}) . "\0");
_set( filterindex => ($self->{filterIndex}+1));
my $dir = $self->{directory};
$dir =~ s/\//\\/g;
_set( directory => $dir);
_set( defext => $self->{defaultExt});
_set( title => $self->{text} // 'NULL');
my $ret = _get($self->{openMode} ? 'open' : 'save');
if ( !defined $ret) {
$self-> cancel;
return wantarray ? () : undef;
}
$self-> {directory} = $ret;
$self-> {directory} =~ s/(\\|\/)[^\\\/]+$//;
$self-> {directory} =~ s/\\/\//g;
$self-> {directory} =~ s/\s+$//;
$self-> {directory} .= '/' unless $self-> {directory} =~ /\/$/;
$self-> {fileName} = $ret;
if ( $self-> multiSelect) {
$self-> {fileName} = join( ' ', map {
s/\\/\//g;
$_ = $self->{directory} . $_ unless m/^\w\:/; # win32 absolute path, if any
s/([\\\s])/\\$1/g;
$_;
} quoted_split($self-> {fileName}));
} else {
$self-> {fileName} =~ s/\\/\//g;
}
$self-> {filterIndex} = _get('filterindex')-1;
$self-> ok;
return $self-> fileName;
}
package Prima::sys::win32::OpenDialog;
use vars qw(@ISA);
@ISA = qw(Prima::sys::win32::FileDialog);
package Prima::sys::win32::SaveDialog;
use vars qw(@ISA);
@ISA = qw(Prima::sys::win32::FileDialog);
sub profile_default
{
return { %{$_[ 0]-> SUPER::profile_default},
openMode => 0,
fileMustExist => 0,
}
}
1;
=head1 NAME
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.826 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )