Re: subclass, custom widget
- From: "Ross McFarland" <rwmcfa1 neces com>
- To: "Jim Donoghue" <jim smithy com>
- Cc: gtk-perl-list gnome org
- Subject: Re: subclass, custom widget
- Date: Thu, 4 Sep 2003 09:26:53 -0400 (EDT)
Jim Donoghue said:
How do I properly create a custom widget? What I need to do is create a
HBox with a label, an entry, and a button, that I can use like this:
use Things;
my $vbox = Gtk2::VBox->new(0,6);
my $thing = SomeThing->new();
$vbox->add($thing);
....
Where SomeThing is the custom widget.
How do I get SomeThing to inherit the properties necessary to treat it
as a container?
depending on what you're doing you probably don't need to use Glib::Subclass.
take a look at http://gtk2-perl.sourceforge.net/faq/#16
it should look something like: (note this isn't compiled/tested code, but it
should be close)
package Gtk2::Something;
use strict;
use warnings;
use Carp;
use Gtk2;
# this is the all important line
use base 'Gtk2::VBox';
sub new
{
my $class = shift;
# first to parmas to this function are the params for the vbox new call
my $self = Gtk2::Vbox->new(shift, shift);
# rebless it to an Gtk2::Something
bless $self, $class;
# use the third param as the label text
$self->{label} = Gtk2::Label->new(shift)
$self->{entry} = Gtk2::Entry->new;
# the fourth param will be put into the entry to start
$self->{entry}->set_text(shift);
# the fifth param will be the button label
$self->{button} = Gtk2::Button->new(shift);
# obviously pack them how you want
$self->pack_start($self->{label}, 0, 0, 0);
$self->pack_start($self->{entry}, 0, 0, 0);
$self->pack_start($self->{button}, 0, 0, 0);
return $self;
}
sub show
{
my $self = shift;
$self->{label}->show;
$self->{entry}->show;
$self->{button}->show;
$self->SUPER::show;
}
# there's probably a few more methods that you might want to override
then you would use it like:
my $vbox = Gtk2::VBox->new(0,6);
# you obviously need to change the way params work to suit your actual needs.
my $thing = Gtk2::SomeThing->new(0, 6, 'label txt', 'entry txt', 'button txt');
$vbox->pack_start($thing, 0, 0, 0);
$thing->{entry}->set_text('foo');
-rm
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]