#!perl
BEGIN
{
    use File::Basename;
    use lib File::Basename::dirname($0);
}
use strict;

package TestFrame;

use Wx;
use Wx qw( wxDefaultPosition wxDefaultSize wxDEFAULT_FRAME_STYLE wxBU_EXACTFIT wxHORIZONTAL wxVERTICAL wxALL wxEXPAND wxALIGN_CENTER );
use Wx::Event qw( EVT_BUTTON EVT_MENU EVT_CLOSE );

use base qw(Wx::Frame);

sub new
{
    my($class, $parent, $id, $title, $pos, $size, $style, $name)= @_;
    $pos = wxDefaultPosition if( !defined $pos );
    $size = wxDefaultSize if( !defined $size );
    $style = wxDEFAULT_FRAME_STYLE if( !defined $style );
    $name = "frame" if( !defined $name );
    
    my $frame = $class->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
    
    my $panel = new Wx::Panel( $frame );
    
	## commented out, and the script crashes, put it back in, everything is fine
    #my $listControl = new Wx::ListCtrl( $panel, -1, wxDefaultPosition, wxDefaultSize );
    my $noteButton = new Wx::Button( $panel, -1, "Transcript Note", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
    my $warningButton = new Wx::Button( $panel, -1, "Transcript Warning", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
    my $errorButton = new Wx::Button( $panel, -1, "Transcript Error", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
    
    my $panelSizer = new Wx::BoxSizer( wxHORIZONTAL );
	## commented out, and the script crashes, put it back in, everything is fine
    #$panelSizer->Add( $listControl, 0, wxALL|wxALIGN_CENTER, 5 );
    $panelSizer->Add( $noteButton, 0, wxALL|wxALIGN_CENTER, 5 );
    $panelSizer->Add( $warningButton, 0, wxALL|wxALIGN_CENTER, 5 );
    $panelSizer->Add( $errorButton, 0, wxALL|wxALIGN_CENTER, 5 );
    $panel->SetSizer( $panelSizer );
    
    
    my $frameSizer = new Wx::BoxSizer( wxVERTICAL );
    $frameSizer->Add( $panel, 1, wxALL|wxALIGN_CENTER|wxEXPAND, 0 );
    $frame->SetSizer( $frameSizer );
	$frame->Layout();
    
    my $menuBar = new Wx::MenuBar();
    my $fileMenu = new Wx::Menu();
    my $noteMenuItem = $fileMenu->Append( -1, "Note", "Transcripts a Note" );
    my $exitMenuItem = $fileMenu->Append( -1, "Exit", "Exits the frame" );
    $menuBar->Append( $fileMenu, "File" );
	$frame->SetMenuBar( $menuBar );
    
    EVT_BUTTON( $frame, $noteButton->GetId(), \&OnNoteButton );
    EVT_BUTTON( $frame, $warningButton->GetId(), \&OnWarningButton );
    EVT_BUTTON( $frame, $errorButton->GetId(), \&OnErrorButton );
    EVT_MENU( $frame, $noteMenuItem->GetId(), \&OnNoteMenuItem );
    EVT_MENU( $frame, $exitMenuItem->GetId(), \&OnExitMenuItem );
    EVT_CLOSE( $frame, \&OnClose );
    
    return $frame;
}

sub OnNoteButton
{
    my($frame, $event)= @_;
    print "# # Note created by the Test Frame's Note Button\n";
}

sub OnWarningButton
{
    my($frame, $event)= @_;
    print "# ? Warning created by the Test Frame's Warning Button\n";
}

sub OnErrorButton
{
    my($frame, $event)= @_;
    print "# ! Error created by the Test Frame's Error Button\n";
}

sub OnNoteMenuItem
{
    my($frame, $event)= @_;
    print "# # Note created by the Test Frame's Note Menu Item\n";
}

sub OnExitMenuItem
{
    my($frame, $event)= @_;
    print "# # Closing from the menu\n";
    $frame->Close();
}

sub OnClose
{
    my($frame, $event)= @_;
    $Wx::wxTheApp->ExitMainLoop();
    $event->Skip();
}

package TestApp;

use base qw(Wx::App);

sub OnInit
{
    my $frame = new TestFrame( undef, -1, "My Test Frame" );
    $frame->Show();
}

package main;

my $app = new TestApp();
$app->MainLoop();