package Botones;


use warnings;
use strict;
use utf8;
use encoding 'utf8';
use open 'utf8';

my $cursor_normal = Gtk2::Gdk::Cursor->new('left_ptr');
my $cursor_mano = Gtk2::Gdk::Cursor->new('hand1');

sub new {
    my $clase = shift;
    my $argumento = {@_};

    my $EVBOX = Gtk2::EventBox->new();

    my @argumentoes = ( $argumento->{ON}, $argumento->{OFF}, $argumento->{CLICK} );

    foreach my $img ( @argumentoes ) {
      warn "Error: no se encuentra $img" unless (-f $img);
      }


    my $BOTON = Gtk2::Image->new_from_file( $argumento->{OFF} );
    $EVBOX->add($BOTON);
    $EVBOX->signal_connect( 'event' => \&item_event, $argumento );

    bless $argumento, $clase;

    return $EVBOX;
  }



sub item_event {
    my ( $item, $event, $argumento ) = @_;
    my $tipo_event = $event -> type;
    my $boton = $item->get_child;

  if ( $tipo_event eq 'enter-notify' )
      {
      $item->window->set_cursor( $cursor_mano );
      $boton->set_from_file($argumento->{ON});
      return;
      }
  if ( $tipo_event eq 'leave-notify' )
      {
      $item->window->set_cursor( $cursor_normal );
      $boton->set_from_file($argumento->{OFF});
      return;
      }
  if ( $tipo_event eq 'button-press' )
      {
      $boton->set_from_file( $argumento->{CLICK} );
      return;
      }
  if ( $tipo_event eq 'button-release' )
      {
      $boton->set_from_file( $argumento->{ON} );
      $argumento->{SUB}();
      return;
      }
    return;
  }

1;

__END__



=head1 NAME

=encoding utf8

Botones - Botones interactivos en Perl Gtk2

=head1 SYNOPSIS

my $Gtk2Eventbox = Botones->new(

                              OFF => $img_off,
                              ON => $img_on,
                              CLICK => $img_click,
			      SUB = \&sub

                              );


=over

=item * $Gtk2Eventbox (Gtk2::EventBox)

=item * $img_off (ruta a una imagen)

=item * $img_on (ruta a una imagen)

=item * $img_click (ruta a una imagen)

=item * \&sub> (función)

=back

=head1 DESCRIPTION

  Este módulo implementa un modo sencillo de insertar imágenes que interactúan con los eventos del ratón

=over

=item * B<$img_off> (ruta a una imagen) es la ruta a la imagen que se mostrará cuando no se reciben eventos del ratón

=item * B<$img_on> (ruta a una imagen) es la ruta a la imagen que se mostrará cuando el puntero del ratón pase por encima

=item * B<$img_click> (ruta a una imagen) es la ruta a la imagen que se mostrará cuando se pulse el boton izquierdo del ratón

=item * B<\&sub> (ruta a una imagen) es la función que se ejecutará al pulsar el ratón

=back

=head1 EXAMPLE

Ver B</usr/share/libbotones/examples/botones.pl>

=head1 AUTHORS

 Hugo Morago Martín <morago at ono dot com>

=head1 COPYRIGHT AND LICENSE

 Copyright 2012 by Hugo Morago Martín.

 This library is free software; you can redistribute it and/or modify
 it under the terms of the GNU Library General Public License as
 published by the Free Software Foundation; either version 2.1 of the
 License, or (at your option) any later version.

 This library is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.

 You should have received a copy of the GNU Library General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307
 USA.

=cut
