The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use FindBin;
use lib "$FindBin::Bin/../lib";

use Test::More tests => 1;


my $app = MyApp->new();
isa_ok($app, 'MyApp');


# [XXX: change into tests rather than a demo]

$app->MainLoop();

package MyApp;
use strict;
use base qw(Wx::App);
use Wx qw(:everything);
use FindBin;
use lib "$FindBin::Bin/../lib";
use Wx::WidgetMaker;

our %labels = (
    red => 'Red',
    green => 'Green',
    blue => 'Blue',
);

sub OnInit {
    my $self = shift;
    my ($frame, $q, $pagesizer, $rowsizer, $control, $control2);

    $frame = Wx::Frame->new(
        undef, -1, 'Test', wxDefaultPosition, wxSIZE(400,500)
    );
    $frame->SetAutoLayout(1);

    $q = Wx::WidgetMaker->new(-parent => $frame);

    $pagesizer = Wx::BoxSizer->new(wxVERTICAL);

    # can use `print' to add the control to the pager
    $q->print($q->h1('H1 text'), $pagesizer);
    $q->print($q->h2('H2 text'), $pagesizer);
    $q->print($q->h3('H3 text'), $pagesizer);
    # or `print' an array ref of controls
    $q->print([$q->h4('H6 text'), $q->h5('H6 text'), $q->h6('H6 text')],
              $pagesizer);

    $rowsizer = Wx::BoxSizer->new(wxHORIZONTAL);
    # or `print' StaticText
    $rowsizer->Add($q->print('Textfield: '));
    $control = $q->textfield(
        -name => 'color_textfield',
        -default => 'blue',
        -size => 50,         # window width, not number of chars
        -maxlength => 30,
    );
    # (can still use Add if you want)
    $rowsizer->Add($control);
    $pagesizer->Add($rowsizer);


    $rowsizer = Wx::BoxSizer->new(wxHORIZONTAL);

    $control = $q->password_field(
        -name => 'color_password',
        -value => 'blue',
        -size => 50,         # window width, not number of chars
        -maxlength => 30,
    );
    $q->print([$q->print('Password: '), $control], $rowsizer);

    $pagesizer->Add($rowsizer);

    $control = $q->textarea(
        -name => 'color_area',
        -default => 'I like colors!',
        -rows => 100,        # window height, not number of rows
        -columns => 200,     # column width, not number of chars
    );
    $q->print($control, $pagesizer);

    $rowsizer = Wx::BoxSizer->new(wxHORIZONTAL);

    $control = $q->popup_menu(
        -name => 'color_popup',
        -values => [qw(red green blue)],
        -default => 'green',
        -labels => \%labels,
    );

    $control2 = $q->scrolling_list(
        -name => 'color_list',
        -values => [qw(red green blue)],
        -default => 'green',
        -size => 40,           # window height, not number of rows
        -multiple => 1,
        -labels => \%labels,
    );
    $q->print([$control, $control2], $rowsizer);
    $pagesizer->Add($rowsizer);

#    $q->checkbox_group(
#        -name => 'color_checkbox_group',
#        -values => ['red', 'green', 'blue', 'yellow'],
#        -default => 'green',
#        -linebreak => 'true',
#        -labels => \%labels,
#        -nolabels => undef,
#        -rows => 2,
#        -columns => 2,
#        -rowheaders => undef,
#        -colheaders => undef,
#    );

    $rowsizer = Wx::BoxSizer->new(wxHORIZONTAL);

    $control = $q->checkbox(
        -name => 'color_checkbox',
        -checked => 'checked',
        -label => 'CLICK ME',
    );

    $control2 = $q->radio_group(
        -name => 'color_radio_group',
        -values => [qw(red green blue)],
        -default => 'green',
        -linebreak => 'true',
        -labels => \%labels,
        -nolabels => 0,
        -rows => 2,
        -cols => 2,
#        -rowheaders => undef,         # unimplemented
#        -colheaders => undef,         # unimplemented
        -caption => 'Color?',         # not originally in CGI
    );
    $q->print([$control, $control2], $rowsizer);
    $pagesizer->Add($rowsizer);

    $rowsizer = Wx::BoxSizer->new(wxHORIZONTAL);

    $control = $q->submit(
        -name => 'color_button',
        -value => 'submit-esque',
    );

    $control2 = $q->image_button(
        -name => 'button_name',
        -src => '../ex/save.xpm',
    );
    $q->print([$control, $control2], $rowsizer);
    $pagesizer->Add($rowsizer);

    print "PARAM VALUES:\n";
    foreach my $param ($q->param()) {
        print $param, ': ', $q->param($param), $/;
    }


    $frame->SetSizer($pagesizer);
    $pagesizer->SetSizeHints($frame);

    $self->SetTopWindow($frame);
    $frame->Show(1);
}


1;