1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
#!/usr/bin/perl -w
# $Header: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/t/GtkCellRenderer.t,v 1.12 2005/11/12 21:08:00 kaffeetisch Exp $
use Gtk2::TestHelper tests => 9;
use strict;
package Mup::CellRendererPopup;
use Test::More;
use Glib::Object::Subclass
Gtk2::CellRendererText::,
;
my %hits;
sub INIT_INSTANCE { $hits{init}++; }
sub GET_SIZE { $hits{size}++; shift->SUPER::GET_SIZE (@_) }
sub RENDER { $hits{render}++; shift->SUPER::RENDER (@_) }
sub ACTIVATE { $hits{activate}++; shift->SUPER::ACTIVATE (@_) }
sub START_EDITING { $hits{edit}++; shift->SUPER::START_EDITING (@_) }
# do that again, in the style of 1.02x, to check for regressions of
# backward compatibility.
package Mup::CellRendererPopupCompat;
use Test::More;
use Glib::Object::Subclass
Gtk2::CellRendererText::,
;
__PACKAGE__->_install_overrides;
my %hits_compat;
sub INIT_INSTANCE { $hits_compat{init}++; }
sub on_get_size { $hits_compat{size}++; shift->parent_get_size (@_) }
sub on_render { $hits_compat{render}++; shift->parent_render (@_) }
sub on_activate { $hits_compat{activate}++; shift->parent_activate (@_) }
sub on_start_editing { $hits_compat{edit}++; shift->parent_start_editing (@_) }
##########################################################################
# driver code
package main;
my $window = Gtk2::Window->new;
$window->set_title ('cell renderer test');
$window->signal_connect (delete_event => sub { Gtk2->main_quit; 0; });
my $vbox = Gtk2::VBox->new;
$window->add ($vbox);
my $label = Gtk2::Label->new;
$label->set_markup ('<big>F-Words</big>');
$vbox->pack_start ($label, 0, 0, 0);
# create and load the model
my $model = Gtk2::ListStore->new ('Glib::String', 'Glib::Scalar', 'Glib::Int');
foreach (qw/foo fluffy flurble frob frobnitz ftang fire truck/) {
my $iter = $model->append;
$model->set ($iter, 0, $_);
}
# now a view
my $treeview = Gtk2::TreeView->new ($model);
#
# custom cell renderer
#
ok (my $renderer = Mup::CellRendererPopup->new, 'Mup::CellRendererPopup->new');
$renderer->set (mode => 'editable');
my $column = Gtk2::TreeViewColumn->new_with_attributes ('selector', $renderer,
text => 0,);
# this handler commits the user's selection to the model. compare with
# the one for the typical text renderer -- the only difference is a var name.
$renderer->signal_connect (edited => sub {
my ($cell, $text_path, $new_text, $model) = @_;
my $path = Gtk2::TreePath->new_from_string ($text_path);
my $iter = $model->get_iter ($path);
$model->set ($iter, 2, $new_text);
}, $model);
$treeview->append_column ($column);
#
# custom cell renderer
#
ok ($renderer = Mup::CellRendererPopupCompat->new, 'Mup::CellRendererPopupCompat->new');
$renderer->set (mode => 'editable');
$renderer->set (editable => 1);
my $column_compat = Gtk2::TreeViewColumn->new_with_attributes ('selector', $renderer,
text => 0,);
# this handler commits the user's selection to the model. compare with
# the one for the typical text renderer -- the only difference is a var name.
$renderer->signal_connect (edited => sub {
my ($cell, $text_path, $new_text, $model) = @_;
my $path = Gtk2::TreePath->new_from_string ($text_path);
my $iter = $model->get_iter ($path);
$model->set ($iter, 2, $new_text);
}, $model);
$treeview->append_column ($column_compat);
##########################################################################
$vbox->pack_start ($treeview, 1, 1, 0);
$window->show_all;
##########################################################################
isa_ok ($renderer, "Gtk2::CellRenderer");
my $rect = Gtk2::Gdk::Rectangle->new (5, 5, 10, 10);
my @size = $renderer->get_size ($treeview, $rect);
is (@size, 4);
my $event = Gtk2::Gdk::Event->new ("button-press");
$renderer->render ($window->window, $treeview, $rect, $rect, $rect, [qw(sorted prelit)]);
ok(!$renderer->activate ($event, $treeview, "0", $rect, $rect, qw(selected)));
isa_ok ($renderer->start_editing ($event, $treeview, "0", $rect, $rect, qw(selected)), "Gtk2::Entry");
$renderer->set_fixed_size (23, 42);
is_deeply([$renderer->get_fixed_size], [23, 42]);
SKIP: {
skip "editing_canceled is new in 2.4", 0
unless Gtk2->CHECK_VERSION (2, 4, 0);
$renderer->editing_canceled;
}
SKIP: {
skip "stop_editing is new in 2.6", 0
unless Gtk2->CHECK_VERSION (2, 6, 0);
$renderer->stop_editing (FALSE);
}
##########################################################################
run_main sub {
$treeview->set_cursor (Gtk2::TreePath->new_from_string ('0'),
$column, 1);
$treeview->set_cursor (Gtk2::TreePath->new_from_string ('0'),
$column_compat, 1);
};
is_deeply ([ sort keys %hits ], [ qw/edit init render size/ ], 'callbacks encountered');
is_deeply ([ sort keys %hits_compat ], [ qw/edit init render size/ ], 'callbacks encountered');
__END__
Copyright (C) 2003-2005 by the gtk2-perl team (see the file AUTHORS for the
full list). See LICENSE for more information.
|