Tk-EntryCheck

 view release on metacpan or  search on metacpan

lib/Tk/EntryCheck.pm  view on Meta::CPAN

package Tk::EntryCheck;
use warnings; # removed to be backward compatible with perl5.005_03
use strict;
use 5.005;
use Carp;

use vars qw( $VERSION );

$VERSION = '0.04';

use base qw( Tk::Derived Tk::Entry );
Construct Tk::Widget 'EntryCheck';
# ------------------------------------------------------------
sub ClassInit {
    my( $class, $parent ) = @_;

    # class bindings here

    $class->SUPER::ClassInit( $parent );
} # ClassInit
# ------------------------------------------------------------
sub Populate {
    my( $self, $args ) = @_;

    $self->SUPER::Populate( $args );

    $self->ConfigSpecs
        (
         -maxlength => [ 'PASSIVE', 'maxlength', undef, $args->{-maxlength} ],
         -pattern   => [ 'PASSIVE', 'pattern'  , undef, qr/./ ],
#         -totalpattern => [ 'PASSIVE', 'totalPattern', undef, qr/./ ],
     );

    my $maxLength = $args->{-maxlength};
    if( defined $maxLength ) {
        if( $maxLength =~ /\D/ ) {
            Carp::carp( "-maxlength not numeric: '$maxLength'" );
        } # if
        elsif( $maxLength =~ /^\d+/ and $maxLength < 1 ) {
            Carp::carp( "-maxlength must be int > 0: '$maxLength'" );
        } # elsif
    } # if

    $self->configure
        (
         -validate => 'all',
         -validatecommand => [ \&_EntryCheckValidate, $self ],
     );

    return $self;
} # Populate
# ------------------------------------------------------------
sub _EntryCheckValidate {
    my ($self, $text, $textNew, $textOld, $pos, $mode) = @_;

    my $maxlength = $self->{Configure}->{-maxlength};
    my $pattern   = $self->{Configure}->{-pattern};

    # check if -maxlength is reached
    if (defined $maxlength and length($text) > $maxlength) {
	if ($mode == -1) { # change done by -textvariable
	    &Carp::carp("EntryCheck: content of textvariabe too long");
	} # if
	return 0;
    } # if

    # allow all deletions
    return 1 if $mode == 0;

    # check if -pattern is matching
    if (defined $pattern) {



( run in 2.381 seconds using v1.01-cache-2.11-cpan-d7a12ab2c7f )