Gtk3-Ex-DBI

 view release on metacpan or  search on metacpan

lib/Gtk3/Ex/DBI/Datasheet.pm  view on Meta::CPAN

        
        if ( ! $self->{sw_no_scroll} ) {
            $sw->set_policy( "automatic", "always" );
        } else {
            $sw->set_policy( "automatic", "never" );
        }
        
        $self->{vbox}->pack_start( $sw, TRUE, TRUE, 0 );
        $self->{treeview} = Gtk3::TreeView->new;
        
        eval { # This might fail, but if so, we don't care
            $self->{treeview}->set_grid_lines( "both" );
        };
        
        $self->{treeview}->set_rules_hint( TRUE );
        $sw->add( $self->{treeview} );
        $sw->show_all;
        
    } elsif ( $treeview_type eq "footer_treeview" && $self->{vbox} ) {
        
        my $hseparator = Gtk3::HSeparator->new;
        $self->{vbox}->pack_start( $hseparator, FALSE, TRUE, 0 );
        $hseparator->show;
        
        my $sw = Gtk3::ScrolledWindow->new;
        
        if ( ! $self->{sw_footer_no_scroll} ) {
            $sw->set_policy( "automatic", "always" );
        } else {
            $sw->set_policy( "automatic", "never" );
        }
        
        $self->{vbox}->pack_start( $sw, FALSE, TRUE, 0 );
        $self->{footer_treeview} = Gtk3::TreeView->new;
        $self->{footer_treeview}->set_headers_visible( FALSE );
        
        eval { # This might fail, but if so, we don't care
            $self->{footer_treeview}->set_grid_lines( "both" );
        };
        
        $self->{footer_treeview}->set_rules_hint( TRUE );
        $sw->set_size_request( 0, 25 ); # TODO How do we determine the row height?
        $sw->add( $self->{footer_treeview} );
        $sw->show_all;
        
    }

    # Connect signal for CTRL+c for copying
    # TODO: not working - need some way of finding the coordinates under the mouse at the time of the keypress event. Is it even possible?
#    if ( $treeview_type eq "treeview" ) {
#        $self->{treeview}->signal_connect( 'key_press_event'    => sub
#            {
#                my ( $window, $event ) = @_;
#                my $keyval = $event->keyval;
#                if ( $event->state =~ /control-mask/ ) { # CTRL key held down
#                    if ( $keyval == &Gtk3::Gdk::KEY_C || $keyval == &Gtk3::Gdk::KEY_c ) {
#                        my ( $x , $y ) = $event->get_coords;
#                        my ( $path, $column, $cell_x, $cell_y ) = $self->{treeview}->get_path_at_pos( $event->get_root_coords->{x}, $event->get_root_coords->{y} );
#                        my $column_name = $column->{definition}->{name};
#                        my $value = $self->get_colummn_value( $column_name );
#                        my $clipboard = Gtk3::Clipboard::get( Gtk3::Gdk::Atom::intern( 'CLIPBOARD', 0 ) );
#                        $clipboard->set_text( $value, length $value );
#                        return TRUE;
#                    }
#                }
#                return FALSE;
#            }
#        );
#    }

    # Set up icons for use in the record status column
    if ( $treeview_type eq "treeview" ) {
        $self->{icons}[UNCHANGED]   = $self->{treeview}->render_icon( "gtk-yes",                    "menu" );
        $self->{icons}[CHANGED]     = $self->{treeview}->render_icon( "gtk-refresh",                "menu" );
        $self->{icons}[INSERTED]    = $self->{treeview}->render_icon( "gtk-add",                    "menu" );
        $self->{icons}[DELETED]     = $self->{treeview}->render_icon( "gtk-delete",                 "menu" );
        $self->{icons}[LOCKED]      = $self->{treeview}->render_icon( "gtk-dialog-authentication",  "menu" );
        
        foreach my $icon ( @{$self->{icons}} ) {
            # Gtk3 is fucked :( Icon handling is broken now, with no default
            # icons, and sometimes the above ->render_icon() calls can return UNDEF!
            if ( $icon ) {
                my $icon_width = $icon->get_width;
                if ( $icon_width > $self->{status_icon_width} ) {
                    $self->{status_icon_width} = $icon_width;
                }
            }
        }
        
        # Icons don't seem to take up the entire cell, so we need some more room. This will do ...
        $self->{status_icon_width} += 10;
    }
    
    # Now set up the model and columns
    for my $field ( @{$self->{fields}} ) {
        
        my $renderer;
        
        # We try to default to a stock text renderer ( as it's the fastest ) where possible
        # We can't do that for combo cells, but otherwise if cells are read-only or hidden,
        # use the stock text renderer
        if (
               $field->{renderer} eq "text"
            || $field->{renderer} eq "hidden"
            || $field->{renderer} eq "number"
            || (
                ( $field->{read_only} || $self->{read_only} )
                    && $field->{renderer} !~ m/combo/
                    && $field->{renderer} ne "toggle"
                    && $field->{renderer} ne "progress"
                    && $field->{renderer} ne "status_column"
                    && $field->{renderer} ne "image"
                )
            || ( $self->{quick_renderers} && ! $field->{renderer} eq "status_column" )
        ) {
            
            if (
                $treeview_type eq "footer_treeview"
                || $field->{renderer} eq "hidden"
                || $field->{read_only}
                || $self->{read_only}
            ) {



( run in 1.999 second using v1.01-cache-2.11-cpan-2398b32b56e )