| Wx documentation | Contained in the Wx distribution. |
Wx::Perl::TextValidator - Perl replacement for wxTextValidator
my $storage = '';
my $validator1 = Wx::Perl::TextValidator->new( '\d', \$storage );
my $validator2 = Wx::Perl::TextValidator->new( '[abcdef]' );
my $validator3 = Wx::Perl::TextValidator->new( qr/[a-zA-Z]/ );
my $textctrl = Wx::TextCtrl->new( $parent, -1, "", $pos, $size, $style,
$validator1 );
A Wx::Validator subclass that allows filtering user input to
a Wx::TextCtrl.
my $validator1 = Wx::Perl::TextValidator->new( $regexp, \$storage );
my $validator2 = Wx::Perl::TextValidator->new( $regexp );
Constructs a new Wx::Perl::Validator. The first argument must be
a regular expression matching a single-character string and is used
to validate the field contents and user input. The second argument,
if present, is used in TransferDataToWindow/TransferDataToWindow as
the source/destination for the fields contents.
The first argument can be a string as well as a reqular expression object created using C<qr//>.
| Wx documentation | Contained in the Wx distribution. |
############################################################################# ## Name: ext/pperl/textval/TextValidator.pm ## Purpose: Wx::Perl::TextValidator, a perl-ish wxTextValidator ## Author: Johan Vromans, Mattia Barbon ## Modified by: ## Created: 15/08/2005 ## RCS-ID: $Id: TextValidator.pm 2057 2007-06-18 23:03:00Z mbarbon $ ## Copyright: (c) 2005 Johan Vromans, Mattia Barbon ## Licence: This program is free software; you can redistribute itand/or ## modify it under the same terms as Perl itself ############################################################################# package Wx::Perl::TextValidator;
use strict; use Wx qw(:keycode wxOK wxICON_EXCLAMATION); use Wx::Event qw(EVT_CHAR); use Wx::Locale qw(:default); use base qw(Wx::PlValidator); our $VERSION = '0.01'; sub new { my( $class, $validate, $data ) = @_; my $self = $class->SUPER::new; $self->{validate} = ref $validate ? $validate : qr/^$validate$/; $self->{data} = $data; EVT_CHAR($self, \&OnKbdInput); return $self; } sub OnKbdInput { my ($self, $event) = @_; my $c = $event->GetKeyCode; if( $c < WXK_SPACE || # skip control characters $c == WXK_DELETE || $c > WXK_START || $event->HasModifiers # allow Ctrl-C and such ) { $event->Skip; } elsif( pack( "C", $c ) =~ $self->{validate} ) { $event->Skip; } else { Wx::Bell; } } sub Clone { my( $self ) = @_; return ref( $self )->new( $self->{validate}, $self->{data} ); } sub Validate { my( $self, $window ) = @_; my $value = $self->GetWindow->GetValue; my $ko = grep { !/$self->{validate}/ } split //, $value; if( $ko ) { Wx::MessageBox( sprintf( gettext( "'%s' is invalid" ), $value ), gettext( "Validation conflict" ), wxOK | wxICON_EXCLAMATION, $window ); } return !$ko; } sub TransferToWindow { my( $self ) = @_; if( $self->{data} ) { $self->GetWindow->SetValue( ${$self->{data}} ); } return 1; } sub TransferFromWindow { my( $self ) = @_; if( $self->{data} ) { ${$self->{data}} = $self->GetWindow->GetValue; } return 1; } 1;