Gtk2-Ex-DateSpinner
view release on metacpan or search on metacpan
devel/cell.pl view on Meta::CPAN
my $toplevel = Gtk2::Window->new('toplevel');
$toplevel->signal_connect (destroy => sub { Gtk2->main_quit });
my $scrolled = Gtk2::ScrolledWindow->new;
$toplevel->add ($scrolled);
my $treeview = Gtk2::TreeView->new;
$treeview->set (model => $liststore,
reorderable => 1);
$scrolled->add ($treeview);
my $column = Gtk2::TreeViewColumn->new;
$treeview->append_column ($column);
{
my $cellrenderer = Gtk2::Ex::DateSpinner::CellRenderer->new
(editable => 1);
$column->pack_start ($cellrenderer, 0);
$column->add_attribute ($cellrenderer, text => 0);
renderer_edited_set_value ($cellrenderer, $column, 0);
$cellrenderer->signal_connect
(editing_started => sub {
print "$progname: renderer editing_started\n";
});
$cellrenderer->signal_connect
(editing_canceled => sub {
print "$progname: renderer editing_canceled\n";
});
$cellrenderer->signal_connect
(edited => sub {
print "$progname: renderer edited\n";
});
}
{
my $cellrenderer = Gtk2::CellRendererText->new;
$cellrenderer->set(editable => 1);
$column->pack_start ($cellrenderer, 0);
$column->add_attribute ($cellrenderer, text => 0);
renderer_edited_set_value ($cellrenderer, $column, 0);
}
{
my $cellrenderer = Gtk2::Ex::DateSpinner::CellRenderer->new
(editable => 1,
xalign => 0.8);
$column->pack_start ($cellrenderer, 0);
$column->add_attribute ($cellrenderer, text => 0);
renderer_edited_set_value ($cellrenderer, $column, 0);
}
$toplevel->show_all;
Gtk2->main;
exit 0;
sub renderer_edited_set_value {
my ($renderer, $dest, $col_num) = @_;
(defined $col_num) || croak 'No column number supplied';
my @userdata = ($dest, $col_num);
require Scalar::Util;
Scalar::Util::weaken ($userdata[0]);
$renderer->signal_connect (edited => \&_renderer_edited_set_value_handler,
\@userdata);
}
sub _renderer_edited_set_value_handler {
my ($renderer, $pathstr, $newtext, $userdata) = @_;
my ($dest, $col_num) = @$userdata;
if ($dest->can('get_tree_view')) {
# on Gtk2::TreeViewColumn go to the Gtk2::TreeView
$dest = $dest->get_tree_view || croak 'No viewer from get_tree_view';
}
if ($dest->can('get_model')) {
# on Gtk2::TreeView, or Gtk2::CellView, etc, go to the Gtk2::TreeModel
$dest = $dest->get_model || croak 'No model from get_model';
}
my $path = Gtk2::TreePath->new_from_string ($pathstr);
my $iter = $dest->get_iter ($path) || croak "Path $pathstr not found in model";
if (DEBUG) { print "edited_treecolumn_set_value(): set_value path=$pathstr col=$col_num\n"; }
$dest->set_value ($iter, $col_num, $newtext);
}
__END__
# if (DEBUG) {
# require Devel::FindBlessedRefs;
# my %selves;
# my %entries;
# Devel::FindBlessedRefs::find_refs_by_coderef
# (sub {
# my $obj = shift;
# my $class = Scalar::Util::blessed($obj) || return;
# if ($class eq 'Gtk2::Entry') {
# $entries{$obj+0} = $obj;
# } elsif ($class eq __PACKAGE__) {
# $selves{$obj+0} = $obj;
# }
# });
#
# local $,= ' ';
# print " entries ",values %entries,"\n";
# print " selves ",values %selves,"\n";
#
# # require Devel::FindRef;
# # print Devel::FindRef::track(values %selves);
# }
# require Gtk2::Ex::KeySnooper;
# $self->{'snooper'} = Gtk2::Ex::KeySnooper->new
# (\&_do_key_snooper, $ref_weak_self);
$accelgroup->connect (Gtk2::Gdk->keyval_from_name('Escape'), [], [],
sub {
my ($accelgroup, $widget, $keyval, $modifiers) = @_;
if (DEBUG) { print "accel tab\n"; }
my $self = $widget->get_toplevel;
print " focus ",$self->child_focus('tab-forward'),"\n";
( run in 0.572 second using v1.01-cache-2.11-cpan-5a3173703d6 )