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 )