gimp/plug-ins/perl/UI/basewidget.pm

107 lines
2.1 KiB
Perl

package Gimp::basewidget; # pragma
use Gtk;
use Gimp;
$VERSION = 1.21;
=head1 NAME
Gimp::basewidget - pragma to declare the superclass of a gtk widget
=head1 SYNOPSIS
use Gimp::basewidget 'superclass';
e.g.
use Gimp::basewidget Gtk::Button;
=head1 DESCRIPTION
This pragma can (but does not need to) be used to declare the current
package as a childclass of an existing Gtk widget class. The only "import
tag" must be the name of the existing superclass.
The module automatically registers a subtype, calls a special callback
at gtk initialization time and provides default implementations for some
common methods (the list might grow in the future to enhance settor/gettor
functionality).
The following methods are provided. All of them can be overriden in your
package.
=over 4
=item new
A simple generic new constructor is provided. It will simply call
C<Gtk::Object::new> with all the provided arguments.
=item GTK_INIT
This callback is called as early as possible I<after> gtk was initialized,
but not before. This can be used to register additional subtypes, argument
types etc. It is similar to GTK_CLASS_INIT.
=item GTK_CLASS_INIT
Unlike the standard Gtk-callback of the same name, this method can be
omitted in your package (while still being a valid Widget).
=item GTK_OBJECT_INIT
This callback can also be omitted, but this rarely makes sense ;)
=back
=cut
# a generic perl widget helper class, or something that
# was a pain to implement "right". :(
sub GTK_INIT {
# dummy function, maybe even totally superfluous
}
sub GTK_CLASS_INIT {
# dummy function
}
sub GTK_OBJECT_INIT {
# dummy function, should be overriden
}
sub DESTROY {
# dummy function, very necessary
}
*new = \&Gtk::Object::new;
sub import {
my $self = shift;
my $super = shift;
my $class = caller;
push @{$class."::ISA"}, $self, $super;
Gimp::gtk_init_hook {
$class->GTK_INIT;
Gtk::Object::register_subtype($super,$class);
};
}
1;
=head1 BUGS
This was a pain to implement, you will not believe this when looking at
the code, though.
=head1 AUTHOR
Marc Lehmann <pcg@goof.com>.
=head1 SEE ALSO
perl(1), L<Gimp>, L<Gimp::UI>, L<Gtk>.