NAME
Gtk2::GladeXML::Simple - A clean object-oriented interface to Gtk2::GladeXML
SYNOPSIS
package MyApp;
use base qw( Gtk2::GladeXML::Simple );
sub new {
my $class = shift;
my $self = $class->SUPER::new( $gladefile );
return $self;
}
...
# Signal handlers are methods of your class
sub on_button_clicked {
my $self = shift;
# You have access to your widgets directly
my $button = $self->{button1};
}
DESCRIPTION
Gtk2::Glade::XML::Simple is a module that provides a clean and easy interface for Gnome/Gtk2 and Glade applications using an object-oriented syntax. You just make Gtk2::GladeXML::Simple your application's base class, have your new
call SUPER::new
, and the module will do the hard work for you.
Gtk2::GladeXML::Simple offers:
Signal-handler callbacks as methods of your class.
sub on_button1_clicked { my $self = shift; # $self always received as first parameter ... # do anything you want in a OO fashioned way }
Autoconnection of signal handlers.
Autoconnection of custom widget-creation functions.
Access to the widgets as instance attributes.
my $btn = $self->{button1}; # fetch widgets as instance attributes by its name my $window = $self->{main_window}; my $custom = $self->{custom_widget};
METHODS
This class provides the following public methods:
- $app = SomeSubClass->new( $gladefile [, $root, $domain ] );
-
This method creates a new object of your subclass of Gtk2::GladeXML::Simple, representing an application main-window. The
$gladefile
parameter is the name of the file created by the Glade Visual Editor. The$root
is an optional parameter that tellslibglade
the name of the widget to start building from. The optional$domain
parameter that specifies the translation domain for the glade xml file ( undef by default ). - $app->glade_object()
-
This method returns the Gtk2::GladeXML object in play.
EXTENDED EXAMPLE
This example shows the usage of the module by creating a small Yahoo search engine using WWW::Search::Yahoo.
package YahooApp;
use strict;
use warnings;
use Gtk2 '-init';
use Gtk2::Html2; #not part of the Gtk2 default widgets
use Gtk2::GladeXML::Simple;
use WWW::Search;
use base qw( Gtk2::GladeXML::Simple );
my $header =<<HEADER;
<html>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
<header><title>Yahoo Gtk2 App</title>
<style type="text/css">
.title {font-family: Georgia; color: blue; font-size: 13px}
.description {padding-left: 3px; font-family: Georgia; font-size:10px}
.url {padding-left: 3px; font-family: Georgia; font-size:10px; color: green}
</style>
</head>
<body>
<h2 style="font-family: Georgia, Arial; font-weight: bold">
Found:
</h2>
HEADER
my $footer =<<FOOTER;
</body>
</html>
FOOTER
sub new {
my $class = shift;
#Calling Gtk2::GladeXML::Simple->new()
my $self = $class->SUPER::new( 'yahoo.glade' );
#Initialize the search engine
$self->{_yahoo} = WWW::Search->new( 'Yahoo' );
return $self;
}
sub do_search {
my $self = shift;
$self->{_yahoo}->native_query( shift );
my $buf = $header;
for( 1..10 ) {
my $rv = $self->{_yahoo}->next_result || last;
$buf .= qq{<p><div class="title">} . $rv->title;
$buf .= qq{</div><br /><div class="description">} . $rv->description;
$buf .= qq{</div><br /><div class="url">} . $rv->url . q{</div></p><br />};
}
$buf .= $footer;
$self->{buf} = $buf;
}
### Signal handlers, now they're methods of the class ###
sub on_Clear_clicked {
my $self = shift;
my $html = $self->{custom1}; #fetch widgets by their names
$html->{document}->clear;
my $statusbar = $self->{statusbar1}; #another widget
$statusbar->pop( $statusbar->get_context_id( "Yahoo" ) );
}
sub on_Search_clicked {
my $self = shift;
my $text = $self->{text_entry}->get_text;
return unless $text ne '';
my $statusbar = $self->{statusbar1};
$statusbar->push( $statusbar->get_context_id( "Yahoo" ), "Searching for: $text" );
$self->do_search( $text );
my $html = $self->{custom1};
$html->{document}->clear;
$html->{document}->open_stream( "text/html" );
$html->{document}->write_stream( $self->{buf} );
$html->{document}->close_stream;
}
### Creation function for the custom widget, method of the class as well ###
sub create_htmlview {
my $self = shift;
my $view = Gtk2::Html2::View->new;
my $document = Gtk2::Html2::Document->new;
$view->set_document( $document );
$view->{document} = $document;
$view->show_all;
return $view;
}
sub gtk_main_quit { Gtk2->main_quit }
sub run { Gtk2->main }
1;
package main;
YahooApp->new->run; #Go!
1;
The yahoo.glade file needed for this example is in the examples directory, along with other example programs.
SEE ALSO
The Libglade Reference Manual at http://developer.gnome.org/doc/API/2.0/libglade/
The gtk2 API Reference at http://developer.gnome.org/doc/API/2.0/gtk/index.html
TODO
Tests.
More examples?
Add Gtk2::GladeXML::Simple->new_from_buffer()?
AUTHOR
Marco Antonio Manzo <marcoam@perl.org.mx>
Special thanks in no order to Scott Arrington "muppet" <scott at asofyet dot org> who provided lots of great ideas to improve this module. Sandino "tigrux" Flores <tigrux at ximian dot com> who is the author of SimpleGladeApp which is the main source of this module's core idea. Sean M. Burke <sburke at cpan dot org> for constantly helping me with ideas and cleaning my POD.
LICENSE
Copyright (C) 2005 by Marco Antonio Manzo
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.