Re: subclassing Gnome2::Canvas::Text objects
- From: James Muir <hemlock vtlink net>
- To: gtk-perl-list gnome org
- Subject: Re: subclassing Gnome2::Canvas::Text objects
- Date: Fri, 05 Aug 2005 13:37:25 -0400
muppet wrote:
James Muir said:
Hi Everybody,
I see in the FAQ that subclassing Gtk2 widgets is pretty straight
forward, but I want to subclass Gnome2::Canvas::Text. I've created a
subclass called EllipsisText that simply overrides the "text" method,
appending an ellipsis (...) to the text argument.
However when I try something like this:
local $ellipsisText = Gnome2::Canvas::Item->new($root, 'EllipsisText',
x=>10, y=>10, fill_color=>'black',
anchor=>'GTK_ANCHOR_NW', text=$text);
I am met with the following error:
"EllipsisText is not registered with gperl as an object type blah blah blah"
Is what I am trying to do possible?
You have to use Glib::Object::Subclass to do this type of subclassing, since
that registers a new GType. Gnome2::Canvas::Item::new() is a factory that
keys off of GTypes, so if you don't create a new GType, it doesn't know what
to do.
Also, there's no "text" method; it's handled purely as a property. We don't
support property overrides or redirects (at least, i've never tried), so your
best bet is to create a new property in your custom class, and implement your
custom stuff there:
package EllipsisText;
use Glib ':constants';
use Glib::Object::Subclass
Gnome2::Canvas::Text::,
properties => [
{
pspec => Glib::ParamSpec->string ('ellipsis-text',
'Ellipsis Text',
'Text, ellipsized as needed',
'',
G_PARAM_READWRITE),
# implement this property as preprocessing of the actual
# 'text' property of the parent class.
get => sub { $_[0]->get ('text') },
set => sub {
my ($object, $newval) = @_;
$object->set (text => ellipsize_text ($newval));
},
},
],
;
You could even have another property that specifies the maximum length, etc.
This is very slick. Thanks for pointing me in the right direction. -James
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]