Gtk3-Ex-DBI
view release on metacpan or search on metacpan
lib/Gtk3/Ex/DBI/Datasheet.pm view on Meta::CPAN
}
sub undo {
# undo and revert are synonyms of each other
my $self = shift;
$self->query( undef, TRUE );
return TRUE;
}
sub revert {
# undo and revert are synonyms of each other
my $self = shift;
$self->query( undef, TRUE );
return TRUE;
}
sub changed {
my ( $self, $liststore, $treepath, $iter ) = @_;
my $model = $self->{treeview}->get_model;
# Only change the record status if it's currently unchanged
if ( ! $model->get( $iter, STATUS_COLUMN ) ) {
$model->signal_handler_block( $self->{changed_signal} );
$model->set( $iter, STATUS_COLUMN, CHANGED );
$model->signal_handler_unblock( $self->{changed_signal} );
}
# Execute user-defined functions
if ( $self->{on_changed} ) {
$self->{on_changed}(
{
treepath => $treepath,
iter => $iter
}
);
}
if ( $self->{footer} ) {
$self->update_footer;
}
return FALSE;
}
sub update_footer {
my $self = shift;
my @model_row;
foreach my $field ( @{$self->{fields}} ) {
if ( $field->{footer_function} eq "sum" ) {
push @model_row, $field->{column}, $self->sum_column( $field->{column} );
} elsif ( $field->{footer_function} eq "max" ) {
push @model_row, $field->{column}, $self->max_column( $field->{column} );
} elsif ( $field->{footer_function} eq "average" ) {
push @model_row, $field->{column}, $self->average_column( $field->{column} );
} elsif ( $field->{footer_text} ) {
push @model_row, $field->{column}, $field->{footer_text};
} else {
push @model_row, $field->{column}, undef;
}
}
$self->{footer_model}->set(
$self->{footer_model}->get_iter_first,
@model_row
);
}
sub apply {
my $self = shift;
my ( @iters_to_remove );
if ( $self->{read_only} ) {
$self->dialog(
{
title => "Read Only!",
type => "warning",
text => "Datasheet is open in read-only mode!"
}
);
return FALSE;
}
my $model = $self->{treeview}->get_model;
my $iter = $model->get_iter_first;
while ( $iter ) {
my $status = $model->get( $iter, STATUS_COLUMN );
# Decide what to do based on status
if ( $status == UNCHANGED || $status == LOCKED ) {
if ( ! $model->iter_next( $iter ) ) {
last;
} else {
next;
}
}
# Now assemble a hash of primary key items and values
( run in 2.655 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )