NoPaste

closures

von Anonymous

SNIPPET_TEXT:
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use Gtk2 qw(-init);
  6. use utf8;
  7.  
  8. {
  9.    package Bollin::Button;
  10.  
  11.    use fields qw(button name);
  12.  
  13.    sub new {
  14.       my $self = shift;
  15.       unless (ref $self) {
  16.          $self = fields::new($self);
  17.       }
  18.       $self->{name} = shift;
  19.       $self->{button} = Gtk2::Button->new($self->{name});
  20.       $self->{button}->set_border_width(5);
  21.       $self->{button}->signal_connect('clicked', sub { $self->action });
  22.       $self;
  23.    }
  24.  
  25.    sub action {
  26.       my $self = shift;
  27.       print $self->{name}, $/;
  28.    }
  29. }
  30.  
  31. {
  32.    package Bollin::Window;
  33.  
  34.    use fields;
  35.    use Glib qw(TRUE FALSE);
  36.  
  37.    sub new {
  38.       my $self = shift;
  39.       unless (ref $self) {
  40.          $self = fields::new($self);
  41.       }
  42.       my $window = Gtk2::Window->new;
  43.       $window->set_title('Closures! Closures!');
  44.       $window->signal_connect('destroy', \&Gtk2::main_quit);
  45.  
  46.       my $hbox = Gtk2::HBox->new(TRUE, 5);
  47.       $window->add($hbox);
  48.  
  49.       my $linker_button = Bollin::Button->new('Links');
  50.       $hbox->add($linker_button->{button});
  51.  
  52.       my $rechter_button = Bollin::Button->new('Rechts');
  53.       $hbox->add($rechter_button->{button});
  54.  
  55.       $window->show_all;
  56.  
  57.       $self;
  58.    }
  59. }
  60.  
  61. Bollin::Window->new;
  62.  
  63. Gtk2->main;

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN