DBIx-Informix-Perform

 view release on metacpan or  search on metacpan

Perform.pm  view on Meta::CPAN

		$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 )