File: KeyEntry.pm

package info (click to toggle)
horae 063-3
  • links: PTS
  • area: contrib
  • in suites: etch, etch-m68k
  • size: 23,964 kB
  • ctags: 4,939
  • sloc: perl: 101,791; ansic: 6,700; xml: 2,019; lisp: 744; sh: 81; makefile: 76
file content (78 lines) | stat: -rw-r--r-- 1,266 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78


=head1 NAME

Tk::KeyEntry - perl/Tk Entry widget for entering single characters

=for pm Tk/KeyEntry.pm

=for category Derived Widgets

=head1 SYNOPSIS

    use Tk::KeyEntry;
    ...
    $ppe = $mw->KeyEntry(?options,...?);

=head1 DESCRIPTION

This "I<IS A>" entry widget with all bindings identical to the normal
entry widget.  However, it only allows the entered string to be one
character long.  Each keystroke replaces the contents of the widget
with the new key stroke.  Only the first character of a clipboard
selection is inserted.

=head1 KEYS

widget, entry

=head1 SEE ALSO

L<Tk::Entry>

=cut

package Tk::KeyEntry;

use Tk::Entry;
use base  qw(Tk::Entry);

Construct Tk::Widget 'KeyEntry';

sub Insert
{
 my $w = shift;
 my $s = shift;
 return unless (defined $s && $s ne '');
 $w -> delete(0, 'end');
 $w->insert('insert',$s);
 $w->SeeInsert
};


sub InsertSelection
{
 my $w = shift;
 eval {local $SIG{__DIE__};
       $w -> delete(0, 'end');
       $w->Insert(substr($w->SelectionGet,0,1))
     }
};

sub ButtonRelease_2
{
 my $w = shift;
 my $Ev = $w->XEvent;
 if (!$Tk::mouseMoved) {
   eval
     {local $SIG{__DIE__};
      $w -> delete(0, 'end');
      $w->insert('insert',substr($w->SelectionGet,0,1));
      $w->SeeInsert;
    }
   }
}



1;