EnterFieldGroup.st
author claus
Wed, 13 Oct 1993 03:49:56 +0100
changeset 5 7b4fb1b170e5
parent 3 9d7eefb5e69f
child 7 15a9291b9bd0
permissions -rw-r--r--
(none)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
Controller subclass:#EnterFieldGroup
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
         instanceVariableNames:'fields currentField leaveAction'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
         classVariableNames:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
         poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
         category:'Views-Support'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    19
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
EnterFieldGroup comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
5
claus
parents: 3
diff changeset
    22
COPYRIGHT (c) 1992 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    23
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    24
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
EnterFieldGroup controlls the interaction between EnterFields
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
enabling next/prev field when a field is left. Instances of
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
this class keep track of which field of the group is the currentField
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
(i.e. the one getting keyboard input).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
The block accessable as leaveAction is evaluated when the last
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
field of the group is left (by cursor-down or cr). Usually this block
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    31
triggers some action on the fields.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
5
claus
parents: 3
diff changeset
    33
$Header: /cvs/stx/stx/libwidg/EnterFieldGroup.st,v 1.3 1993-10-13 02:47:25 claus Exp $
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    34
written nov 91 by claus
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    35
'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    36
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    37
!EnterFieldGroup methodsFor:'adding / removing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    38
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    39
add:aField
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    40
    |thisIndex next|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    41
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    42
    fields isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
        fields := OrderedCollection new
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    45
    fields add:aField.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
    thisIndex := fields size.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
    aField controller:self.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
    aField disable.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    49
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    50
    "set the fields enableAction to disable active field"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    51
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    52
    aField enableAction:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    53
        currentField notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    54
            currentField disable
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    55
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    56
        currentField := aField
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    57
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    58
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    59
    "set the fields leaveAction to enable next field"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    60
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    61
    aField leaveAction:[:key |
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    62
        currentField notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    63
            currentField disable
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    64
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    65
        (key == #Up) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    66
            (thisIndex == 1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    67
                next := fields size
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    68
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    69
                next := thisIndex - 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    70
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    71
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    72
        (key == #Down) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    73
            (thisIndex == (fields size)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
                next := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
                next := thisIndex + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
        (key == #Return) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
            (thisIndex == (fields size)) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
                leaveAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
                    leaveAction value.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
                    currentField := nil
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
                ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
                    next := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
            ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
                next := thisIndex + 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
        next notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
            (fields at:next) enable.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
            currentField := fields at:next
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
!EnterFieldGroup methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
leaveAction:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    leaveAction := aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
!EnterFieldGroup methodsFor:'controlling'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
canHandle:aKey
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
    ^ true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
keyPress:key x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
    "key-press in a field"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
    currentField notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
        currentField keyPress:key x:0 y:0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
keyPress:key x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
    "key-press in an outer view when keyHandler has been set"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
    currentField notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
        currentField keyPress:key x:0 y:0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
buttonMotion:state x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    aView buttonMotion:state x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
buttonShiftPress:button x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
    aView buttonShiftPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
buttonMultiPress:button x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
    aView buttonMultiPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
buttonPress:button x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
    aView buttonPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
buttonRelease:button x:x y:y in:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
    aView buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
! !