Ante-Deluvian-Dialog
view release on metacpan or search on metacpan
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
$self->{'eoln'} = "";
$self->{'curpid'} = $$,
$self->{'getdrv'} = \&_procDfCmd,
$self->{'usable'} = 25;
$self->{'hcenter'} = 12;
$self->{'vcenter'} = 40;
$self->{'recary'} = [];
$self->{'parind'} = $param{parindent} || 2;
$self->{'title'} = $param{title} || undef;
$self->{'header'} = $param{header} || " ";
$self->{'prompt'} = $param{prompt} || ":";
$self->{'platform'} = $param{platform} || "UNIX";
$_isWin = $param{platform} eq "MSWIN";
$_doRec = $param{record} || FALSE;
$_fhInp = $param{inpfile} || undef;
if ((exists($param{replay})) && (-s $param{replay})) {
my $fi = IO::File->new("< $param{replay}");
@{$self->{'recary'}} = <$fi>;
$fi->close();
$_rplay = TRUE;
}
$self->_getWinSize();
$self->{'usable'} = $self->{'rows'};
if (defined($self->{'header'})) {
$self->{'usable'}--;
$self->{'stat'}++;
$self->{'from'}++;
}
if (defined($self->{'prompt'})) {
$self->{'usable'}--;
}
$self->{'hcenter'} = int ($self->{'cols'} / 2);
$self->{'vcenter'} = int (($self->{'usable'} - $self->{'from'}) / 2);
$self->{'lines'} = $self->_drawframe();
$self->{'usable'} -= 2;
return $self;
}
#------------------------------------------------------------------
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
}
#------------------------------------------------------------------
sub _drawframe {
#------------------------------------------------------------------
my $self = shift;
my $rows = $self->{'rows'} - 1;
my $cols = $self->{'cols'} - 2;
my ($line, @lines, $inp);
if (defined($self->{'prompt'})) {
$rows--;
}
for my $i (0 .. $rows) {
if (($i == 0) || ($i == $rows)) {
push @lines, "+" . "-" x $cols . "+";
}
else {
push @lines, "|" . " " x $cols . "|";
}
}
if (defined($self->{'title'})) {
_formatline(\$lines[0], $self->{'title'}, "C");
}
if (defined($self->{'prompt'})) {
push @lines, "$self->{'prompt'} ";
}
return [ @lines ];
}
#------------------------------------------------------------------
sub _doselection {
#
# This function is likely to be called recursively ...
#------------------------------------------------------------------
my $self = shift;
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
close(SYST);
if ($_isWin) {
foreach $drv (keys %windrv) {
if (-d "$drv/") {
push @drives, "$drv/";
push @drvlst, "$drv/ Local directory";
}
}
}
@drvlst = sort(@drvlst);
$drv = $self->listbox(\@drvlst, select => "atonce", prompt => "Please select a drive or partition:");
if ($_isWin && ($drv =~ /\A([A-Z]:\/)\s+/)) {
$drv = $1;
}
elsif ($drv =~ /\A(\/\S*)/) {
$drv = $1;
}
else {
$drv = undef;
}
# print "Selected drive: $drv ...\n";
return($drv);
}
#------------------------------------------------------------------
sub printscreen {
#------------------------------------------------------------------
my $self = shift;
my $rlines = shift;
my (@lines, $prompt);
if (defined($rlines)) {
@lines = @$rlines;
}
else {
@lines = @{$self->{'lines'}};
}
if (defined($self->{'prompt'})) {
$prompt = pop(@lines);
}
foreach my $line (@lines) {
print "$line" . $self->{'eoln'};
}
if (defined($prompt)) {
print "$prompt ";
}
}
#------------------------------------------------------------------
sub _getinput {
#------------------------------------------------------------------
my $self = shift;
my $rLines = shift;
$self->printscreen($rLines);
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
my $rLines = shift || undef;
my ($i, $beg, @lines,
);
if (defined($rLines)) {
@lines = @$rLines;
}
else {
@lines = @{$self->{'lines'}};
}
if (defined($self->{'prompt'})) {
$lines[-1] = $rAlert->[0];
}
$beg = $self->{'vcenter'} - int(($#$rAlert - 1) / 2);
for $i (1 .. $#$rAlert) {
_formatline(\$lines[$beg + $i - 1], $rAlert->[$i], "C");
}
$self->_getinput(\@lines);
}
#------------------------------------------------------------------
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
for $i (1 .. $nelm) {
$selary[$i] = 0;
}
}
if (defined($rLines)) {
@lines = @$rLines;
}
else {
@lines = @{$self->{'lines'}};
}
if ((exists($param{'prompt'})) && (defined($self->{'prompt'}))) {
$lines[-1] = $param{'prompt'};
}
$len = length($nelm);
$nopg = int($nelm / $self->{'usable'});
if ($nelm % $self->{'usable'} > 0) { $nopg++; };
print "List contains $nelm elements and will result in $nopg pages ...\n";
for $i (1 .. $nopg) {
$pages[$i] = [ @lines ];
_formatline(\$pages[$i]->[$self->{'stat'}], "Page $i from $nopg ...", "R");
}
$i = 0;
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
);
my (@files, $file, @flist, $inp, @lines, $stln,
);
if (defined($rLines)) {
@lines = @$rLines;
}
else {
@lines = @{$self->{'lines'}};
}
if (defined($self->{'prompt'})) {
$lines[-1] = $hmodes{$fmode}[1];
}
if ((!defined($start)) || ($start eq "")) {
$start = $self->_getDrives();
}
elsif ($start !~ /[\\\/]\z/) {
$start .= "/";
}
print "fselect(..., $start, ...)\n";
while (TRUE) {
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
Ante::Deluvian::Dialog - Perl extension for very old style user interaction
=head1 SYNOPSIS
use Ante::Deluvian::Dialog;
$d = Ante::Deluvian::Dialog->new(
platform => "MSWIN",
drawframe => 1,
title => "Title of Window",
prompt => "Please make your choice:",
# record => 1,
# replay => "C:/temp/addialog/<username>_<pid>.txt",
);
$fdir = $d->dselect();
print "You have selected directory $fdir ...\n";
$fname = $d->fselect($fdir);
print "You have selected file $fname ...\n";
lib/Ante/Deluvian/Dialog.pm view on Meta::CPAN
$d->textbox($inpf);
}
else {
$d->textbox($fname);
}
=head1 CONSTRUCTOR
=over 4
=item new (platform => "MSWIN", title => "Window's title", prompt => "What do you want");
There are two other options C<record>, which can be set to a boolean value, and C<replay>, which
expects to get some previously recorded input file. This is mainly for testing purposes, if you
don't like to repeat a special input sequence by hand... I'm sure you will find out if this is
interesting to you.
=back
=head1 DESCRIPTION
binmode(STDOUT, ":encoding(cp437)"); # für die korrekte Darstellung deutscher Umlaute
}
else {
$pltFrm = "UNIX";
}
my $ed = Ante::Deluvian::Dialog->new(
platform => $pltFrm,
drawframe => $TRUE,
title => "Fenster-Überschrift",
header => "Das ist der sog. Kopf",
prompt => "Bitte wählen Sie:",
# record => 1,
);
# print "Fenstergröße: $ed->{'cols'} Spalten und $ed->{'rows'} Zeilen ...\n";
$ed->_getinput();
# print Dumper $ed;
my $fdir = $ed->dselect();
print "Selektiert wurde das Verzeichnis $fdir ...\n";
# my $fname = $ed->fselect("E:/");
my $fname = $ed->fselect();
( run in 0.445 second using v1.01-cache-2.11-cpan-0b5f733616e )