#!/usr/bin/perl

use strict;
use warnings;

use Wx qw ( wxDEFAULT_FRAME_STYLE wxEVT_CHAR 
    WXK_UP
    WXK_DOWN
    WXK_TAB
);
use Wx::Event qw ( 
	EVT_CHAR
);

use vars qw(@ISA);
@ISA = qw(Wx::Frame);

my ( $max_i,$max_j,$now_i,$now_j ) = (5,5,0,0);

#---------------------------------------------------------------------------------------------------
my $app = Wx::SimpleApp->new;
my $frame = Wx::Frame->new( undef, -1, "$max_i x $max_j", [ 100, 100 ], [ $max_i*101+20, $max_j*21+20 ], wxDEFAULT_FRAME_STYLE );
my $fga = new Wx::Colour( 0, 100, 0 );
$frame->SetBackgroundColour( $fga );

my @text;
for( my $i=0; $i<$max_i;$i++) {
	for( my $j=0; $j<$max_j;$j++) {
		$text[$i][$j] = Wx::TextCtrl->new( $frame, -1, "$i-$j", [ 10 + 101*$i , 10+21*$j ], [ 100, 20], 1 );
		EVT_CHAR( $text[$i][$j], \&Onkeydown   );
	}
}


Wx::Window::SetFocus( $text[$now_i][$now_j] );
$frame->Show( 1 );
$app->MainLoop;


sub Onkeydown {
	my ( $this, $event ) = @_;
	my $key   = $event->GetKeyCode();
	my $shift = $event->ShiftDown,"\n";
	
	if ( $key== WXK_TAB  ){ 
		if ( $shift ) {
			$now_i--; $now_i = $max_i-1 if $now_i < 0; 
		} else {
			$now_i++; $now_i = 0 if $now_i >= $max_i; 
		}
	}
	
	if ( $key== WXK_UP   ){ $now_j--; $now_j = $max_j-1 if $now_j <  0; }
	if ( $key== WXK_DOWN ){ $now_j++; $now_j = 0 		if $now_j >= $max_j; }
	
	Wx::Window::SetFocus( $text[$now_i][$now_j] );
	
	return 0;
}
