The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#
# Button Boxes
#
# The Button Box widgets are used to arrange buttons with padding.
#

package button_box;

use Glib qw(TRUE FALSE);
use Gtk2;

sub create_bbox {
  my ($horizontal, $spacing, $layout) = @_;

  my $title = ucfirst $layout;

  my $frame = Gtk2::Frame->new ($title);

  my $bbox = $horizontal
           ? Gtk2::HButtonBox->new
	   : Gtk2::VButtonBox->new;

  $bbox->set_border_width (5);
  $frame->add ($bbox);

  $bbox->set_layout ($layout);
  $bbox->set_spacing ($spacing);
  
  my $button = Gtk2::Button->new_from_stock ('gtk-ok');
  $bbox->add ($button);
  
  $button = Gtk2::Button->new_from_stock ('gtk-cancel');
  $bbox->add ($button);
  
  $button = Gtk2::Button->new_from_stock ('gtk-help');
  $bbox->add ($button);

  return $frame;
}

my $window = undef;

sub do {
  if (!$window) {
    $window = Gtk2::Window->new;
    $window->set_title ("Button Boxes");
    
    $window->signal_connect (destroy => sub { $window = undef; 1 });
    
    $window->set_border_width (10);

    my $main_vbox = Gtk2::VBox->new (FALSE, 0);
    $window->add ($main_vbox);
    
    my $frame_horz = Gtk2::Frame->new ("Horizontal Button Boxes");
    $main_vbox->pack_start ($frame_horz, TRUE, TRUE, 10);
    
    my $vbox = Gtk2::VBox->new (FALSE, 0);
    $vbox->set_border_width (10);
    $frame_horz->add ($vbox);

    $vbox->pack_start (create_bbox (TRUE, 40, 'spread'), TRUE, TRUE, 0);
    $vbox->pack_start (create_bbox (TRUE, 40, 'edge'),   TRUE, TRUE, 5);
    $vbox->pack_start (create_bbox (TRUE, 40, 'start'),  TRUE, TRUE, 5);
    $vbox->pack_start (create_bbox (TRUE, 40, 'end'),    TRUE, TRUE, 5);

    my $frame_vert = Gtk2::Frame->new ("Vertical Button Boxes");
    $main_vbox->pack_start ($frame_vert, TRUE, TRUE, 10);
    
    my $hbox = Gtk2::HBox->new (FALSE, 0);
    $hbox->set_border_width (10);
    $frame_vert->add ($hbox);

    $hbox->pack_start (create_bbox (FALSE, 30, 'spread'), TRUE, TRUE, 0);
    $hbox->pack_start (create_bbox (FALSE, 30, 'edge'),   TRUE, TRUE, 5);
    $hbox->pack_start (create_bbox (FALSE, 30, 'start'),  TRUE, TRUE, 5);
    $hbox->pack_start (create_bbox (FALSE, 30, 'end'),    TRUE, TRUE, 5);
  }

  if (!$window->visible) {
      $window->show_all;
  } else {	 
      $window->destroy;
      $window = undef;
  }

  return $window;
}

1;
__END__
Copyright (C) 2003 by the gtk2-perl team (see the file AUTHORS for the
full list)

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.