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 )