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 )