Gtk2-GladeXML-Simple-0.32/0000755000764100001440000000000010270361115014567 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/examples/0000755000764100001440000000000010270361115016405 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/examples/sample/0000755000764100001440000000000010270361115017666 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/examples/sample/sample.glade0000644000764100001440000001006110261573563022157 0ustar amnesiacusers True window1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False 0 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True True False True GTK_JUSTIFY_LEFT GTK_WRAP_NONE True 0 0 0 0 0 0 0 True True True GTK_BUTTONBOX_DEFAULT_STYLE 0 True True True button1 True GTK_RELIEF_NORMAL True True True True button2 True GTK_RELIEF_NORMAL True 0 False False Gtk2-GladeXML-Simple-0.32/examples/sample/sample.gladep0000644000764100001440000000042110261573563022336 0ustar amnesiacusers Sample sample FALSE Gtk2-GladeXML-Simple-0.32/examples/sample/Sample.pl0000644000764100001440000000102210267653151021451 0ustar amnesiacuserspackage Sample; use strict; use warnings; use Gtk2 '-init'; use Gtk2::GladeXML::Simple; use base qw( Gtk2::GladeXML::Simple ); sub new { my $class = shift; my $self = $class->SUPER::new( 'sample.glade' ); return $self; } sub on_button1_clicked { my $self = shift; my $buffer = $self->{textview1}->get_buffer; print $buffer->get_text( $buffer->get_start_iter, $buffer->get_end_iter, 0 ); } sub on_button2_clicked { my $self = shift; Gtk2->main_quit; } 1; package main; Sample->new->run; 1; Gtk2-GladeXML-Simple-0.32/examples/mozembed/0000755000764100001440000000000010270361115020207 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/examples/mozembed/MozEmbed.pl0000644000764100001440000000135510267653130022261 0ustar amnesiacuserspackage MozEmbed; use strict; use warnings; use Gtk2 '-init'; use Gtk2::GladeXML::Simple; use Gtk2::MozEmbed; use base qw( Gtk2::GladeXML::Simple ); sub new { shift->SUPER::new( 'mozembed.glade' ) } sub on_back_clicked { shift->{mozembed}->go_back } sub on_forward_clicked { shift->{mozembed}->go_forward } sub on_url_entry_activate { $_[0]->{mozembed}->load_url( $_[0]->{url_entry}->get_text ) } sub on_mozembed_location { $_[0]->{url_entry}->set_text( $_[0]->{mozembed}->get_location ) } sub gtk_main_quit { Gtk2->main_quit } sub gtk_mozembed_new { my $self = shift; my $mozembed = Gtk2::MozEmbed->new; $mozembed->show_all; return $mozembed; } 1; package main; MozEmbed->new->run; 1; Gtk2-GladeXML-Simple-0.32/examples/mozembed/mozembed.glade0000644000764100001440000001111610261573563023023 0ustar amnesiacusers 640 480 True window1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 3 True False 4 True False 5 True GTK_BUTTONBOX_DEFAULT_STYLE 0 True True True gtk-go-back True GTK_RELIEF_NORMAL True True True True gtk-media-forward True GTK_RELIEF_NORMAL True 0 False True True True True True 0 True * False 0 True True 0 False True True gtk_mozembed_new 0 0 Tue, 21 Jun 2005 22:35:30 GMT 0 True True Gtk2-GladeXML-Simple-0.32/examples/mozembed/mozembed.gladep0000644000764100001440000000042510261573563023204 0ustar amnesiacusers Mozembed mozembed FALSE Gtk2-GladeXML-Simple-0.32/examples/yahoo/0000755000764100001440000000000010270361115017524 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/examples/yahoo/yahoo.gladep0000644000764100001440000000042210261573563022033 0ustar amnesiacusers YahooApp yahoo FALSE Gtk2-GladeXML-Simple-0.32/examples/yahoo/YahooApp.pl0000644000764100001440000000442610267653173021625 0ustar amnesiacuserspackage YahooApp; use strict; use warnings; use Gtk2 '-init'; use Gtk2::Html2; use Gtk2::GladeXML::Simple; use WWW::Search; use base qw( Gtk2::GladeXML::Simple ); my $header =<
Yahoo Gtk2 App

Found:

HEADER my $footer =< FOOTER sub new { my $class = shift; my $self = $class->SUPER::new( 'yahoo.glade' ); $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{

} . $rv->title; $buf .= qq{

} . $rv->description; $buf .= qq{

} . $rv->url . q{


}; } $buf .= $footer; $self->{buf} = $buf; } sub on_Clear_clicked { my $self = shift; my $html = $self->{custom1}; $html->{document}->clear; my $statusbar = $self->{statusbar1}; $statusbar->pop( $statusbar->get_context_id( "Yahoo" ) ); } sub on_Search_clicked { my $self = shift; my $text_entry = $self->{entry1}; my $text = $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; } 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 } 1; package main; YahooApp->new->run; 1; Gtk2-GladeXML-Simple-0.32/examples/yahoo/yahoo.glade0000644000764100001440000001427510261573563021666 0ustar amnesiacusers 640 500 True YahooApp GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False True True True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST 3 250 True False 0 True False 5 True Search for: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 0 False False 300 True True True True 100 True * False 0 True True True GTK_BUTTONBOX_DEFAULT_STYLE 3 True True True gtk-find True GTK_RELIEF_NORMAL True True True True gtk-clear True GTK_RELIEF_NORMAL True 0 False False 0 False False 1 250 True True GTK_POLICY_AUTOMATIC GTK_POLICY_AUTOMATIC GTK_SHADOW_ETCHED_IN GTK_CORNER_TOP_LEFT 500 True create_htmlview 0 0 Wed, 15 Jun 2005 01:27:11 GMT 0 True True True True 0 False False Gtk2-GladeXML-Simple-0.32/Changes0000644000764100001440000000217610270360377016101 0ustar amnesiacusersRevision history for Perl extension Gtk2::GladeXML::Simple. 0.032 Sat Jul 23 01:16:49 CDT 2005 - Added gpsketcher V0.4 0.031 Thu Jul 21 02:03:12 2005 - gpsketcher is now installed with the module, under perl's binary directory - Added _peek() to gpsketcher, this methods examines the last value in the stack. - Examples updated to the latest module API - Added _get_widgets() private method - fixed get_wigets() method - gpsketcher version 0.3, fixes some creation functions issues when generating code 0.03 Mon Jul 18 10:35:40 CDT 2005 - More POD fixes - Added get_widgets() method - run() method is now part of the module - Added gpsketcher, a simple glade-perl code sketcher 0.022 Wed Jun 22 12:48:12 CDT 2005 - Fixed POD errors and added some comments to the code. 0.02 Mon Jun 20 02:20:24 CDT 2005 - Replaced signal_autoconnect_from_package with a custom autoconnect helper method and g_signal_connect()/g_signal_connect_after() from glib's API. - No longer use for AUTOLOAD. 0.01 Mon Jun 13 01:32:12 CDT 2005 Gtk2::Glade::XML was born. Gtk2-GladeXML-Simple-0.32/lib/0000755000764100001440000000000010270361115015335 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/lib/Gtk2/0000755000764100001440000000000010270361115016144 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/lib/Gtk2/GladeXML/0000755000764100001440000000000010270361115017541 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/lib/Gtk2/GladeXML/Simple.pm0000644000764100001440000002100010270360724021326 0ustar amnesiacuserspackage Gtk2::GladeXML::Simple; use 5.008; use strict; use warnings; use Carp; use Gtk2; use Gtk2::GladeXML; our $VERSION = '0.32'; sub new { my ( $caller, $gladefile, $root, $domain ) = @_; croak "You need to specify a glade file first" unless $gladefile; my $self = bless {}, ref( $caller ) || $caller; Gtk2::Glade->set_custom_handler( sub{ $self->_custom_handler( @_ ) } ); $self->{xml} = Gtk2::GladeXML->new( $gladefile, $root, $domain ); $self->_signal_autoconnect_simple; $self->_get_widgets; return $self; } sub glade_object { my ( $self ) = @_; return $self->{xml}; } sub get_widget { my ( $self, $widget ) = @_; return $self->{$widget}; } sub get_widgets { my ( $self ) = @_; return $self->glade_object->get_widget_prefix( '' ); } sub run { my ( $self ) = @_; Gtk2->main; } sub _get_widgets { my ( $self ) = @_; $self->{ $_->get_widget_name } = $_ foreach $self->get_widgets; } sub _custom_handler { my ( $self, $xml, $func_name, $name, $str1, $str2, $int1, $int2 ) = @_; $self->$func_name( $str1, $str2, $int1, $int2 ); } sub _signal_autoconnect_simple { my ( $self ) = @_; $self->glade_object->signal_autoconnect( \&_autoconnect_helper, $self ); } sub _autoconnect_helper { my ( $handler_name, $object, $signal_name, $signal_data, $connect_object, $is_after, $self ) = @_; my $connect_func = $is_after ? 'signal_connect_after' : 'signal_connect'; $object->$connect_func( $signal_name, sub { $self->$handler_name( @_ ) }, $signal_data ); } 1; __END__ =head1 NAME Gtk2::GladeXML::Simple - A clean object-oriented interface to Gtk2::GladeXML =head1 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 # or using $self->get_widget( widget_name ) my $button = $self->{button1}; } =head1 DESCRIPTION Gtk2::GladeXML::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 C call C, and the module will do the tedious and dirty work for you. Gtk2::GladeXML::Simple offers: =over =item * 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 } =item * Autoconnection of signal handlers. =item * Autocalling of creation functions for custom widgets. =item * Access to the widgets as instance attributes. my $btn = $self->{button1}; # fetch widgets as instance attributes by their names my $window = $self->{main_window}; my $custom = $self->{custom_widget}; =back =head1 METHODS This class provides the following public methods: =over =item new( $gladefile I<[, $root, $domain ]> ); This method creates a new object of your subclass of Gtk2::GladeXML::Simple. The C<$gladefile> parameter is the name of the file created by the Glade Visual Editor. The C<$root> is an optional parameter that tells C the name of the widget to start building from. The optional C<$domain> parameter that specifies the translation domain for the glade xml file ( undef by default ). =item glade_object This method returns the Gtk2::GladeXML object in play. =item get_widget( $widget_name ) Returns the widget with given name. Same as calling $self->{$widget_name}. =item get_widgets Returns a list with all the widgets in the glade file. =item run Call this method in order to run your application. If you need another event loop rather than the Gtk one, override I in your class with your event loop (for example the GStreamer event loop). =back =head1 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 core widgets use Gtk2::GladeXML::Simple; use WWW::Search; use base qw( Gtk2::GladeXML::Simple ); my $header =<
Yahoo Gtk2 App

Found:

HEADER my $footer =< FOOTER sub new { my $class = shift; #Calling our super class constructor 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{

} . $rv->title; $buf .= qq{

} . $rv->description; $buf .= qq{

} . $rv->url . q{


}; } $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 } 1; package main; YahooApp->new->run; #Go! 1; The I file needed for this example is in the I directory, along with other example programs. =head1 UTILITIES =head2 Rapid Application Development with I The Gtk2::GladeXML::Simple distribution includes I, a program that generates Perl code stubs from glade XML files. The code stubs include the basic framework for Gtk2::GladeXML::Simple interaction, method signatures, and everything that describes the application itself. Developers must fill in the code stubs to add the correct functionality to the application. =head1 SEE ALSO L, L, L The Libglade Reference Manual at L The gtk2 API Reference at L =head1 TODO Tests. More examples? Add Gtk2::GladeXML::Simple::new_from_buffer()? Support to I18N ( bindtextdomain ) =head1 AUTHOR Marco Antonio Manzo Special thanks in no order to Scott Arrington "muppet" who provided lots of great ideas to improve this module. Sandino "tigrux" Flores who is the author of SimpleGladeApp and the main source of this module's core idea. Sean M. Burke and Rocco Caputo for constantly helping me with ideas and cleaning my POD. =head1 COPYRIGHT AND 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. =cut Gtk2-GladeXML-Simple-0.32/MANIFEST0000644000764100001440000000067210270361113015723 0ustar amnesiacusersbin/gpsketcher Changes examples/mozembed/mozembed.glade examples/mozembed/mozembed.gladep examples/mozembed/MozEmbed.pl examples/sample/sample.glade examples/sample/sample.gladep examples/sample/Sample.pl examples/yahoo/yahoo.glade examples/yahoo/yahoo.gladep examples/yahoo/YahooApp.pl lib/Gtk2/GladeXML/Simple.pm Makefile.PL MANIFEST MANIFEST.SKIP README t/1.t META.yml Module meta-data (added by MakeMaker) Gtk2-GladeXML-Simple-0.32/bin/0000755000764100001440000000000010270361115015337 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/bin/gpsketcher0000755000764100001440000002310210270355521017426 0ustar amnesiacusers#!/usr/bin/perl # # gpsketcher # A Glade-perl code sketcher for Gtk2::GladeXML::Simple # Author: Marco Antonio Manzo # # Copyright (c) 2005, Marco Antonio Manzo # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation and/or # other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # package main; use strict; use warnings; use Getopt::Std; our $VERSION = '0.4'; my %opts; getopts( 'hvg:o:', \%opts ); sub help { print< EOH } help() and exit if $opts{h}; print "gpsketcher $VERSION\n" and exit if $opts{v}; die "You need to specify a glade file with the -g option" unless defined $opts{g}; my $parser = Parser->new( $opts{g} ); my $parser_factory = XML::SAX::ParserFactory->parser( Handler => $parser ); $parser_factory->parse_uri( $opts{g} ); my $codegen = CodeGen->new( $parser->get_data ); $codegen->build( $opts{o} ); $codegen->write_file; ############################################################ # # Class: Parser # # Description: # Builds up a data tree from a glade XML file using SAX # events. # ############################################################ package Parser; use XML::SAX; use base qw( XML::SAX::Base ); use constant TRUE => 1; use constant FALSE => !TRUE; sub new { my ( $class, $glade_file ) = @_; die "Invalid glade file filename" unless $glade_file =~ /\.glade$/; my $self = bless { } => $class; $self->{creation_function} = FALSE; # is it creation_function? $self->{requires_gnome} = FALSE; # is it a Gnome App? $self->{data} = {}; # data tree for CodeGen $self->{stack} = []; # widgets stack $self->{main_widget} = FALSE; # is main_widget set? $self->{data}{glade_file} = $glade_file; $self->{data}{date} = localtime( time ); $self->{data}{program_name} = ( split /\./, $glade_file )[0]; return $self; } sub get_data { shift->{data} } sub on_widget { my ( $self, $element ) = @_; my $widget = $element->{Attributes}{"{}id"}{Value}; unless ( @{ $self->{stack} } ) { if ( !$self->{main_widget } ) { $self->{data}{main_package} = { name => $widget }; } else { $self->{data}{packages}{$widget} = { name => $widget }; } $self->{top_widget} = $widget; } push @{ $self->{stack} }, $widget; } sub on_signal { my ( $self, $element ) = @_; my $widget = $self->_peek; my $handler = $element->{Attributes}{"{}handler"}{Value}; if ( $self->{main_widget} ) { my $node = $self->{data}{packages}{$self->{top_widget}}; push @{ $node->{callbacks} }, { widget_name => $widget, name => $handler }; } else { my $node = $self->{data}{main_package}; push @{ $node->{callbacks} }, { widget_name => $widget, name => $handler }; } } sub on_property { my ( $self, $element ) = @_; my $prop = $element->{Attributes}{"{}name"}{Value}; $self->{creation_function} = TRUE if $prop eq 'creation_function'; } sub on_widget_end { my ( $self, $element ) = @_; my $widget = pop @{ $self->{stack} }; $self->{main_widget} = TRUE if $widget eq $self->{top_widget}; } sub on_property_end { shift->{creation_function} = FALSE } sub on_requires { my ( $self, $element ) = @_; my $attr = $element->{Attributes}{'{}lib'}{Value}; $self->{data}{requires_gnome} = TRUE if $attr and $attr eq "gnome"; } sub on_creation_function_characters { my ( $self, $content ) = @_; my $widget = $self->_peek; if ( $self->{main_widget} ) { my $node = $self->{data}{packages}{$self->{top_widget}}; push @{ $node->{creation_functions} }, { widget_name => $widget, name => $content->{Data} } } else { my $node = $self->{data}{main_package}; push @{ $node->{creation_functions} }, { widget_name => $widget, name => $content->{Data} } } } sub start_element { my ( $self, $element ) = @_; my $method = "on_" . $element->{Name}; $self->$method( $element ) if $self->can( $method ); } sub end_element { my ( $self, $element ) = @_; my $method = "on_" . $element->{Name} . "_end"; $self->$method( $element ) if $self->can( $method ); } sub characters { my ( $self, $content ) = @_; my $method = $self->{creation_function} ? "on_creation_function_characters" : ''; $self->$method( $content ) if $self->can( $method ) } sub _peek { @{ $_[0]->{stack} }[-1] } ############################################################# # # Class: CodeGen # # Description: # Generates perl code stubs from the given data tree # returned from the Parser class. # ############################################################# package CodeGen; sub new { bless $_[1], $_[0] } sub build { my ( $self, $filename ) = @_; $self->{buffer} = ''; $filename ||= $self->{program_name}; $filename .= '.pl' unless $filename =~ /\.pl$/; $self->{filename} = $filename; $self->_header; $self->_main_package; $self->_user_methods; $self->_callbacks( $_ ) foreach @{ $self->{main_package}{callbacks} }; $self->_creation_funcs( $_ ) foreach @{ $self->{main_package}{creation_functions} }; foreach my $node ( keys %{ $self->{packages} } ) { my $cur_node = $self->{packages}{$node}; $self->_package( $cur_node ); $self->_callbacks( $_ ) foreach @{ $cur_node->{callbacks} }; $self->_creation_funcs( $_ ) foreach @{ $cur_node->{creation_functions} }; } $self->_caller; return $self->{buffer}; } sub write_file { my ( $self ) = @_; open my $file, '>', $self->{filename} or die "Coulnt' create ", $self->{filename}, ": $!"; print $file $self->{buffer}; return; } ### Code generation subroutines ### sub _header { my ( $self ) = @_; my $filename = $self->{filename}; my $date = $self->{date}; return $self->{buffer} .=<{glade_file}; my $gnome = $self->{requires_gnome} ? "use Gnome2;" : ''; my $program_name = $self->{program_name}; my $name = $self->{main_package}{name}; return $self->{buffer} .=<SUPER::new( '$glade_file', '$name', '$program_name' ); print "A new $name object has been created\\n"; return \$self; } MAIN } sub _package { my ( $self, $node ) = @_; my $name = $node->{name}; my $glade_file = $self->{glade_file}; my $program_name = $self->{program_name}; return $self->{buffer} .=<SUPER::new( '$glade_file', '$name', '$program_name' ); print "A new $name object has been created\\n"; return \$self; } PACKAGE } sub _user_methods { my ( $self ) = @_; return $self->{buffer} .=<{name}, $cb->{widget_name} ); return $self->{buffer} .=<get_name, "\\n"; } CALLBACK } sub _creation_funcs { my ( $self, $cf ) = @_; my ( $func, $widget ) = ( $cf->{name}, $cf->{widget_name} ); return $self->{buffer} .=<new( "custom widget" ); \$widget->show_all; return \$widget; } FUNC } sub _caller { my ( $self ) = @_; my $caller = $self->{main_package}{name}; my $gnome = $self->{requires_gnome} ? "Gnome2::Program->init( \$APPNAME, \$VERSION );" : ''; return $self->{buffer} .=<new(); \$app->run(); 1; CALLER } 1; Gtk2-GladeXML-Simple-0.32/MANIFEST.SKIP0000644000764100001440000000006510267030131016463 0ustar amnesiacusers^MANIFEST\.bak$ Makefile(\.old)?$ \.rej$ CVS blib ~ Gtk2-GladeXML-Simple-0.32/META.yml0000644000764100001440000000061610270361113016041 0ustar amnesiacusers# http://module-build.sourceforge.net/META-spec.html #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# name: Gtk2-GladeXML-Simple version: 0.32 version_from: lib/Gtk2/GladeXML/Simple.pm installdirs: site requires: Gtk2: 0 Gtk2::GladeXML: 0 distribution_type: module generated_by: ExtUtils::MakeMaker version 6.21 Gtk2-GladeXML-Simple-0.32/t/0000755000764100001440000000000010270361115015032 5ustar amnesiacusersGtk2-GladeXML-Simple-0.32/t/1.t0000644000764100001440000000014110261573563015367 0ustar amnesiacusers#!/usr/bin/perl use strict; use Test::More qw( no_plan ); use_ok( 'Gtk2::GladeXML::Simple' ); Gtk2-GladeXML-Simple-0.32/Makefile.PL0000644000764100001440000000066410270074152016551 0ustar amnesiacusersuse 5.008; use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Gtk2::GladeXML::Simple', VERSION_FROM => 'lib/Gtk2/GladeXML/Simple.pm', EXE_FILES => [ "bin/gpsketcher" ], PREREQ_PM => { Gtk2::GladeXML => 0, Gtk2 => 0 }, ($] >= 5.005 ? (ABSTRACT_FROM => 'lib/Gtk2/GladeXML/Simple.pm', AUTHOR => 'Marco Antonio Manzo ') : ()), ); Gtk2-GladeXML-Simple-0.32/README0000644000764100001440000000412110270076110015443 0ustar amnesiacusersNAME Gtk2::GladeXML::Simple - A clean object-oriented interface to Gtk2::GladeXML SYNOPSIS package MyApp; use Gtk2::GladeXML::Simple; 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 # or using $self->get_widget( widget_name ) 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 C call C, and the module will do the hard work for you. Gtk2::GladeXML::Simple offers: * Signal handlers callbacks as methods of your class. * Autoconnection of signal handlers. * Autocalling of creation functions for custom widgets. * Access to widgets as instance attributes. INSTALLATION To install this module type the following: perl Makefile.PL make make test make install DEPENDENCIES This module requires these other modules and libraries: Gtk2 Gtk2::GladeXML AUTHOR Marco Antonio Manzo Special thanks in no order to Scott Arrington "muppet" who provided lots of great ideas to improve this module. Sandino "tigrux" Flores who is the author of SimpleGladeApp which is the main source of this module's core idea. Sean M. Burke and Rocco Caputo for constantly helping me with ideas and cleaning my POD. COPYRIGHT AND LICENCE 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.