Gtk2-Ex-DbLinker
view release on metacpan or search on metacpan
lib/Gtk2/Ex/DbLinker/Datasheet.pm view on Meta::CPAN
$tree_column->{render_value} =
$model->get( $iter, $renderer->{column} );
foreach my $render_function ( @{ $tree_column->{custom_render_functions} } ) {
&$render_function( $tree_column, $renderer, $model, $iter, @all_other_stuff );
}
return FALSE;
}
);
}
if ( $field->{renderer} eq "combo" ) {
$renderer->signal_connect(
"editing-started" => sub { $self->_start_editable(@_) },
$renderer
);
}
} # for $field ...
#add fields for the combodata if any
for my $v (@combodata) {
push @{ $self->{ $treeview_type . "_treestore_def" } }, $v;
}
# Turn on multi-select mode if requested
if ( $self->{multi_select} ) {
$self->{$treeview_type}->get_selection->set_mode("multiple");
}
} #setup_treeview
#the first field links the data from the table with a value in the list
#the remaining fields are displayed in the combo
# the type of the first field is in ->{fieldsType} the other(s) are supposed to be strings
sub _setup_combo {
my ( $self, $fieldname ) = @_;
my $fields = $self->{fields}[ $self->colnumber_from_name($fieldname) ];
my $col_ref = $self->{ds_helper}->init_combo_setup(name => $fieldname, fields => $fields);
my @liste_def = $self->{ds_helper}->get_liste_def(
fields =>$fields ,
renderer=> \%render,
default_renderer=>"Glib::String",
col_ref => $col_ref,
);
$self->{ds_helper}->setup_combo(
fields => $fields,
name => $fieldname,
col_ref => $col_ref,
model => Gtk2::ListStore->new(@liste_def)
);
}
sub update {
my ($self) = @_;
#my ($self, $data) = @_;
#keep the value of the hash ref by ->{data} unchanged if
# $data is undef
#$self->{data} = $data if ($data);
my $treeview_type = "treeview";
my $last = $self->{dman}->row_count;
$self->{log}->debug( "datasheet query: " . $last . " rows" );
#my $row_pos = 0;
my $liststore =
Gtk2::ListStore->new( @{ $self->{ $treeview_type . "_treestore_def" } } );
# foreach my $row (@{$self->{data}}){
for ( my $i = 0 ; $i < $last ; $i++ ) {
# $self->{log}->debug("Datasheet query set row pos " . $i);
$self->{dman}->set_row_pos($i);
my @combo_values;
my @model_row;
my $column = 0;
for my $field ( @{ $self->{fields} } ) {
if ( $column == 0 ) {
my $record_status = UNCHANGED;
# $self->{log}->debug("Col " . $column . " added");
push @model_row, $liststore->append, STATUS_COLUMN, $record_status;
} else {
my $x = "";
# if ( $field->{name} ~~ @{$self->{cols}}) {
if ( defined $self->{hcols}->{ $field->{name} } ) {
# $self->{log}->debug("query: " . $field->{name} . " row: " . $i );
$x = $self->{dman}->get_field( $field->{name} );
# $self->{log}->debug( $field->{name} . " " . (defined $x ? "x: " . $x : "x undefined"));
if ( defined $x ) {
# $self->{log}->debug( $field->{name} . " " . ( $x ne "" ? "x: " . $x : "x zls"));
$x = ( $x eq $self->{null_string} ? "" : $x );
}
} else {
$self->{log}->debug( "update: " . $field->{name} . " not found in " . join( " ", @{ $self->{cols} } ) );
}
# $self->{log}->debug("field: ". $field->{name} . " col.: " . $column . " value: " . (defined $x?$x:" undef "));
push @model_row, $column, $x;
#die unless defined($x);
if ( $field->{renderer} eq "combo" && defined $x && $x ne "" ) {
my @renderers = $field->{ $treeview_type . "_column" }->get_cell_renderers;
my $combomodel = $renderers[0]->get("model");
# $self->{log}->debug("data-t: " . $field->{ $treeview_type . "_column" }->{renderer}->{data_type});
my $value = $self->_combo_value( $combomodel, $x, $field->{ $treeview_type . "_column" }->{renderer}->{comp} );
# push @combo_values, $value;
push @model_row, $renderers[0]->{col_data}, $value;
}
} #else
( run in 1.472 second using v1.01-cache-2.11-cpan-39bf76dae61 )