DBIx-Informix-Perform
view release on metacpan or search on metacpan
$row = $ROWS[$ROWNUM];
# display_row_fields($form, , $ROWNUM);
} else {
# Punt on the whole thing.
my $subform = $form->getSubform('DBForm');
clear_textfields($subform);
return;
}
}
}
else {
# we are marching forward through already-fetched rows...
$row = $ROWS[++$ROWNUM];
}
display_row_fields($form, $row, $msg ? undef : $ROWNUM);
}
# called from button_push with the top-level form.
sub do_prev
{
my $form = shift;
my $display_rownum = $ROWNUM;
$form->setField('DONTSWITCH', 1);
if ($ROWNUM <= 0) {
$APP->statusbar($NO_MORE_ROWS);
undef $display_rownum;
my $newbtn = @ROWS ? 1 : 0; # FIX_ME use constants
$form->getWidget('Buttons')->setField('VALUE', $newbtn);
}
else {
--$ROWNUM;
}
display_row_fields($form, $ROWS[$ROWNUM], $display_rownum);
}
# called from button_push with the top-level form.
sub addmode
{
my $form = shift;
my $subform = $form->getSubform('DBForm');
clear_textfields($subform);
# go ahead and switch to form.
my $to = $subform->getField('add_taborder');
$subform->setField('TABORDER', $to);
$subform->setField('FOCUSED', $to->[0]); # first field.
$subform->setField('editmode', 'add');
my $defs = $subform->getField('defaults');
foreach my $f (keys %{ $defs || {} }) {
my $v = $$defs{$f};
$v = POSIX::strftime("%Y-%m-%d", localtime())
if uc($v) eq 'TODAY';
$subform->getWidget($f)->setField('VALUE', $v);
}
$APP->statusbar("Enter row to add. ESC stores; DEL cancels the add.");
}
# called from button_push with the top-level form.
sub updatemode
{
my $form = shift;
return if check_rows_and_advise($form);
my $subform = $form->getSubform('DBForm');
my $fields = $subform->getField('fields');
my $row = $ROWS[$ROWNUM];
my $attrs = $subform->getField('attrs');
foreach my $f (@$fields) {
my $w = $subform->getWidget($f);
my $col = $attrs->{$f}[0][0][1];
$w->setField('savevalue', $row->{$col});
}
# go ahead and switch to form.
my $to = $subform->getField('update_taborder');
$subform->setField('TABORDER', $to);
$subform->setField('FOCUSED', $to->[0]); # first field.
$subform->setField('editmode', 'update');
$APP->statusbar("Update the row. ESC stores; DEL cancels the update.");
}
sub edit_control # Needs to be generalized to more events.
{
my $field = shift;
my $subform = shift;
my $when = lc(shift); # before or after
my $instrs = $APP->getField('instrs');
my $controls = $instrs->{'CONTROLS'};
my $attrs = $subform->getField('attrs');
my ($fldtblcols, $fldattrs) = @{$attrs->{$field}};
my @cols = map { $_->[1] } @$fldtblcols;
my $emode = $subform->getField('editmode');
my $event = "edit$emode";
my @actions = map {$controls->{$_}{$event}{$when}} @cols;
@actions = map {$_ ? @$_ : () } @actions; # spread the arrayrefs.
foreach my $ac (@actions) {
my ($ac, $field, $opd1, $op, $opd2) = @$ac;
if ($ac eq 'nextfield'){
if (grep { $field eq $_ } @{$subform->getField('TABORDER')}) {
$subform->setField('FOCUSED', $field);
}
}
elsif ($ac eq 'let') {
## FIX_ME *extremely* limited functionality here.
my $widget = $subform->getWidget($field);
$APP->statusbar("No field '$field' in control block."),
return ()
unless $widget;
$APP->statusbar("Unrecognized operator '$op' in control block."),
return()
unless $op =~ /^[-+*\/]$/;
my $val1 = field_value_or_require_quotes($opd1, $subform);
my $val2 = field_value_or_require_quotes($opd2, $subform);
my $result = eval "$val1 $op $val2";
if ($@) {
$APP->statusbar("In control block: $@");
return;
}
( run in 0.912 second using v1.01-cache-2.11-cpan-39bf76dae61 )