KeyboardMap.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 03 Oct 2017 11:38:15 +0100
branchjv
changeset 8188 00df122d8bd4
parent 8037 d01faa4c1b02
child 8420 76e39223f5ab
permissions -rw-r--r--
X11: backed out changeset 03ebf4f9a91d This is no good, it completely trashes copy-paste on X11.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
48194c26a46c Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
     3
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
5280
77ce8475efed category change
Claus Gittinger <cg@exept.de>
parents: 1120
diff changeset
    12
"{ Package: 'stx:libview' }"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    13
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    14
"{ NameSpace: Smalltalk }"
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    15
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
    16
Object subclass:#KeyboardMap
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
    17
	instanceVariableNames:'parent current bindings aliases'
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    18
	classVariableNames:''
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    19
	poolDictionaries:''
5280
77ce8475efed category change
Claus Gittinger <cg@exept.de>
parents: 1120
diff changeset
    20
	category:'Interface-Support-UI'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    21
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    22
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    23
!KeyboardMap class methodsFor:'documentation'!
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    24
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    25
copyright
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    26
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    27
 COPYRIGHT (c) 1993 by Claus Gittinger
72
3e84121988c3 *** empty log message ***
claus
parents: 54
diff changeset
    28
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    29
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    30
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    31
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    33
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    34
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    35
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    36
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    37
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    38
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    39
documentation
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    40
"
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    41
    Instances of KeyboardMap are used for mapping keystrokes AND sequences
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    42
    of keystrokes to a logical function which is used by UI code. For
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    43
    example, it maps #Ctrls to #Accept logical function which is then
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    44
    used menu items and so on.
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    45
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    46
    This allows for changing a shortcut without changing the code.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    47
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    48
    Keyboard maps may chained together, if a mapping is not found in
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    49
    a particular key map, lookup continues in its parent map (if any).
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    50
    Usually the grand-parent is device's standard map, see
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    51
    DeviceWorkstation >> keyboardMap (but not necessarily!!)
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    52
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    53
    The setup of device's map is done in the 'smalltalk.rc' or one of the
6663
a3d11f506f57 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 6556
diff changeset
    54
    'keyboard.rc' files during startup.
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
    55
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    56
    To add a mapping (for example, to attach the logical function 'DoIt' to
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    57
    the key-combination Cmd-'d'):
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    58
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    59
        |m|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    60
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    61
        m := Display keyboardMap.
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    62
        m bindValue:#DoIt to:#Cmdd.
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    63
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    64
    Key sequences can also be defined (hey emacs fans ;-) as in:
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    65
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    66
        |m|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    67
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    68
        m := Display keyboardMap.
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    69
        m bindValue:#DoIt to:#Ctrlx followedBy:#Ctrld
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    70
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    71
    Key prefixes are defined in the DeviceWorkstation>>translateKey: method.
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    72
    Typical prefixes are Cmd (for Alt or Meta), Ctrl etc.
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    73
    Some keyboards offer both Alt and Meta keys - on those, the first has a
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    74
    prefix of Alt, the second has Cmd as prefix. Keyboards with only an Alt
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    75
    key will will create prefix codes of Cmd for that.
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    76
8037
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    77
    A convenient way to create initialize a keyboard map is to use
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    78
    #loadKeyboadMapDefinition: as in:
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    79
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    80
        |m|
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    81
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    82
        m := Display keyboardMap.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    83
        m loadKeyboadMapDefinition: #(
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    84
            (Cut    Ctrlx   Cmdx)
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    85
            (Copy   Ctrlc   Cmdc)
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    86
            (Paste  Ctrlv   (Cmdv ShiftInsert)
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    87
        )
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    88
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    89
    For details about the format of definition array see commebt in
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    90
    KeyboardMap >> #loadKeyboardMapDefinition: .
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
    91
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    92
    To remove a mapping, use the same value for both logical and physical key,
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    93
    as in:
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    94
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    95
        |m|
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
    96
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    97
        m := Display keyboardMap.
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    98
        m bindValue:#Cmdd to:#Cmdd.
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    99
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   100
    [see also:]
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   101
        WindowEvent WindowSensor WindowGroup
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   102
        View DeviceWorkstation
8037
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   103
        KeyboardMap >> #loadKeyboardMapDefinition:
612
8758d0c9933e documentation
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
   104
8758d0c9933e documentation
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
   105
    [author:]
8758d0c9933e documentation
Claus Gittinger <cg@exept.de>
parents: 598
diff changeset
   106
        Claus Gittinger
8037
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   107
        Jan Vrany
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
   108
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
   109
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   111
!KeyboardMap class methodsFor:'instance creation'!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   112
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   113
new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   114
    "return an initialized instance"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   115
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   116
    ^ self basicNew initialize.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   117
! !
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   118
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
!KeyboardMap methodsFor:'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   121
mappedKeys
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   122
    "Return a set of all raw keys which are mapped to a logical key.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   123
     This method consult both - (primary) bindings and (secondary) aliases."
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   124
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   125
    ^ bindings keys , aliases keys , (parent isNil ifTrue:[ #() ] ifFalse:[ parent mappedKeys ])
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   126
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   127
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   128
    Screen current keyboardMap mappedKeys
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   129
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   130
    KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   131
        parent: Screen current keyboardMap mappedKeys;
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   132
        mappedKeys    
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   133
        
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   134
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   135
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   136
    "Created: / 17-05-2017 / 15:37:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   137
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   138
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   139
mappingFor:rawKey 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   140
    "Given a `rawKey` return coresponding logical key. This method
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   141
     consults both - (primary) bindings and (secondary) aliaes.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   142
     Example:
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   143
        #Ctrlx -> #Cut
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   144
        #F13 -> F13 (no mapping)"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   145
    
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   146
    | value |
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   147
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   148
    current notNil ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   149
        value := current mappingFor: rawKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   150
        value isKeyboardMap ifTrue:[ 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   151
            current := value.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   152
            ^ nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   153
        ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   154
    ].        
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   155
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   156
    value := bindings at:rawKey ifAbsent:[ nil ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   157
    value isKeyboardMap ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   158
        current := value.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   159
        ^ nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   160
    ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   161
    (value isNil) ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   162
        value := aliases at:rawKey ifAbsent:[ nil ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   163
        value isKeyboardMap ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   164
            current := value.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   165
            ^ nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   166
        ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   167
    ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   168
    current := nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   169
    value isNil ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   170
        parent notNil ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   171
            value := parent mappingFor:rawKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   172
            (value notNil and:[ value ~= rawKey ]) ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   173
                "/ Parent defines mapping for given rawKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   174
                "/ We need to check whether the action is not
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   175
                "/ redefined here under different binding / alias,
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   176
                "/ if so, don't use parent's mapping!!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   177
                ((bindings includes:value) or:[ aliases includes:value ]) ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   178
                    "/ Treat this as mo mapping for given key, return it unmapped
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   179
                    ^ rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   180
                ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   181
            ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   182
            ^ value
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   183
        ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   184
         
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   185
        "/ No mapping for given key, return it unmapped
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   186
        
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   187
        ^ rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   188
    ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   189
    ^ value
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   190
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   191
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   192
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   193
        bindValue: #Rename to: #F2;
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   194
        valueFor: #F10
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   195
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   196
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   197
        parent: (KeyboardMap new bindValue: #Rename to: #F2; yourself);
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   198
        valueFor: #F2"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   199
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   200
    "Created: / 15-05-2017 / 21:35:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   201
    "Modified: / 17-05-2017 / 16:02:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   202
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   203
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   204
parent
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   205
    ^ parent
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   206
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   207
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   208
parent:aKeyboardMap
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   209
    parent := aKeyboardMap.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   210
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   211
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   212
valueFor:rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   213
    <resource: #obsolete>
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   214
    "Given a `rawKey` return coresponding logical key. This method
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   215
     consults both - (primary) binding and aliaes.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   216
     Example:
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   217
        #Ctrlx -> #Cut
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   218
        #F13 -> F13 (no mapping)
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   219
    "  
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   220
    self obsoleteMethodWarning: 'Use #mappingFor: instead'.  
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   221
    ^ self mappingFor:rawKey.  
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   222
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   223
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   224
    KeyboardMap new 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   225
        bindValue: #Rename to: #F2; 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   226
        valueFor: #F2
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   227
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   228
    KeyboardMap new 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   229
        parent: (KeyboardMap new bindValue: #Rename to: #F2; yourself);
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   230
        valueFor: #F2
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   231
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   232
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   233
    "Modified: / 23-04-1996 / 21:55:22 / cg"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   234
    "Modified: / 17-05-2017 / 16:32:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   235
! !
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   236
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   237
!KeyboardMap methodsFor:'copying'!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   238
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   239
postCopy
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   240
    current := nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   241
    bindings := bindings copy.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   242
    aliases := aliases copy.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   243
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   244
    "Created: / 12-05-2017 / 22:46:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   245
! !
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   246
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   247
!KeyboardMap methodsFor:'initialization'!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   248
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   249
initialize
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   250
    "Invoked when a new instance is created."
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   251
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   252
    bindings := IdentityDictionary new.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   253
    aliases := IdentityDictionary new.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   254
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   255
    "/ super initialize.   -- commented since inherited method does nothing
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   256
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   257
    "Modified: / 11-05-2017 / 21:44:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   258
! !
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   259
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   260
!KeyboardMap methodsFor:'mapping'!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   261
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   262
bindAlias:logicalKey to:rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   263
    "Bind shortcut alias to logical action. For example, to bind
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   264
     copy action to Alt-C, do
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   265
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   266
     keyboardMap bindAlias: #Copy to: #Altc
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   267
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   268
     Use this one only if you're sure you want to bind an alternative
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   269
     shortcut (alias). For primary shortcuts, please use
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   270
     #bindValue:to:
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   271
    "
8036
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   272
    (aliases includesKey: rawKey) ifTrue:[ 
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   273
         Logger warning:'Trying to bind alias (%1) to a logical action (%2) which is already bound (to %3). Removing old alias.' with: rawKey with: logicalKey with: (aliases at: rawKey).
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   274
    ]. 
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   275
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   276
    rawKey == logicalKey ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   277
        aliases removeKey:rawKey ifAbsent:nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   278
    ] ifFalse:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   279
        aliases at:rawKey put:logicalKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   280
    ]
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   281
8036
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   282
    "Modified: / 12-05-2017 / 23:35:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   283
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   284
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   285
bindValue:logicalKey to:rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   286
    "Bind shortcut alias to logical action. For example, to bind
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   287
     copy action to Alt-C, do
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   288
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   289
     The event mechanism uses this to pass logical keyboard events
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   290
     to the application (such as #Copy, #Cut etc.) 
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   291
     instead of physical ones (such as #AltC, #AltX)"
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   292
8036
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   293
    "/ Issue a warning if logical key is already bound to a shortcut
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   294
    "/ to track possibly unwanted aliases. If you really want to
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   295
    "/ bind an alias, use #bindAlias:to:
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   296
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   297
    | binding |
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   298
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   299
    binding := bindings keyAtValue: logicalKey.
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   300
    binding notNil ifTrue:[ 
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   301
        Logger warning:'Trying to bind shortcut (%1) to a logical action (%2) which is already bound (to %3). Removing old shortcut,' with: rawKey with: logicalKey with: binding.
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   302
    ]. 
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   303
    bindings removeKey: binding ifAbsent: nil.
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   304
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   305
    rawKey == logicalKey ifTrue:[
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   306
        bindings removeKey:rawKey ifAbsent:nil
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
   307
    ] ifFalse:[
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   308
        bindings at:rawKey put:logicalKey
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
   309
    ]
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   310
8036
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   311
    "Modified: / 12-11-1996 / 10:30:56 / cg"
e248f3b96260 Keyboard mapping: issue warning if one attempts to bind a shortcut to an action which already bound
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8035
diff changeset
   312
    "Modified: / 12-05-2017 / 23:39:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   313
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   314
89
ea2bf46eb669 *** empty log message ***
claus
parents: 72
diff changeset
   315
bindValue:logicalKey to:key1 followedBy:key2
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   316
    "bind aLogicalKey to a sequence of two rawKeys.
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   317
     The event mechanism uses this to pass logical keyboard events
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   318
     to the application (such as #Copy, #Cut etc.) 
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   319
     instead of physical ones (such as #AltC, #AltX)"
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   320
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   321
    |submap|
48194c26a46c Initial revision
claus
parents:
diff changeset
   322
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   323
    submap := bindings at:key1 ifAbsent:[].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   324
    submap isNil ifTrue:[
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   325
        submap := KeyboardMap new.
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   326
        bindings at:key1 put:submap.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   327
    ].
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   328
    submap bindValue:logicalKey to: key2
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   329
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   330
    "Modified: / 23-04-1996 / 21:55:04 / cg"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   331
    "Modified: / 11-05-2017 / 21:46:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   332
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   333
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   334
unbindAlias: rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   335
    "Remove (secondary) alias for given `rawKey`. If `rawKey` is not bound
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   336
     calling #unbindAlias: is noop."
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   337
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   338
    bindings removeKey: rawKey ifAbsent: nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   339
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   340
    "Created: / 17-05-2017 / 15:57:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   341
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   342
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   343
unbindValue: rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   344
    "Remove (primary) binding for given `rawKey`. If `rawKey` is not bound
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   345
     calling #unbindValue: is noop."
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   346
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   347
    bindings removeKey: rawKey ifAbsent: nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   348
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   349
    "Created: / 17-05-2017 / 15:56:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   350
! !
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   351
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   352
!KeyboardMap methodsFor:'queries'!
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   353
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   354
aliasesForLogical: logicalKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   355
    "Return all aliases for given (possibly) logical key.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   356
     Example:
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   357
       #Copy -> #(Altc CtrlInsert) - depending on mappings
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   358
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   359
    | rawKeys |
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   360
    rawKeys := #().
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   361
    aliases keysAndValuesDo:[:raw :logical |
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   362
        (logicalKey == logical) ifTrue:[ 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   363
            rawKeys := rawKeys copyWith: raw.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   364
        ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   365
    ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   366
    parent notNil ifTrue:[ 
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   367
        rawKeys := rawKeys , (parent aliasesForLogical: logicalKey)
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   368
    ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   369
    ^ rawKeys
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   370
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   371
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   372
    "/ First, search for primary bindings...
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   373
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   374
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   375
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   376
    Screen current keyboardMap rawKeysForLogical: #Copy
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   377
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   378
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   379
    "Created: / 15-05-2017 / 21:27:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   380
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   381
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   382
bindingForLogical: logicalKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   383
    "Return binding for given (possibly) logical key.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   384
     If no binding is defined, returns nil.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   385
     Example:
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   386
       #Copy -> #Ctrlc - depending on mappings
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   387
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   388
    | rawKey |
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   389
    rawKey := bindings keyAtValue: logicalKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   390
    rawKey notNil ifTrue:[ ^ rawKey ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   391
    parent notNil ifTrue:[ ^ parent bindingForLogical: logicalKey ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   392
    ^ nil
6556
f2418ba5d1c5 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
   393
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   394
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   395
    Screen current keyboardMap bindingForLogical: #Copy
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   396
    Screen current keyboardMap bindingForLogical: #Bogus
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   397
    "
6556
f2418ba5d1c5 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
   398
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   399
    "Created: / 15-05-2017 / 21:14:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   400
    "Modified (comment): / 17-05-2017 / 16:06:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   401
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   402
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   403
hasBindingFor:rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   404
    <resource: #obsolete>
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   405
    self obsoleteMethodWarning:'Use #hasMappingFor: instead'.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   406
    ^ self hasMappingFor: rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   407
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   408
    "Created: / 17-05-2017 / 15:40:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
   409
!
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
   410
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   411
hasMappingFor:rawKey
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   412
    "Return true if receiver maps given rawKey into a logical key,
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   413
     false otheriwse. Thic method consults both - (primary) bindings
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   414
     and (secondary) aliases."
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   415
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   416
    | logicalKey |
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   417
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   418
    logicalKey := self mappingFor:rawKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   419
    ^ logicalKey notNil and:[ logicalKey ~= rawKey ]
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   420
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   421
    "
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   422
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   423
        bindValue: #Rename to: #F2;
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   424
        hasMappingFor: #F2
7856
7c52e7a9a087 Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 6663
diff changeset
   425
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   426
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   427
        bindValue: #Rename to: #F2;
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   428
        hasMappingFor: #F10
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   429
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   430
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   431
        parent: (KeyboardMap new bindValue: #Rename to: #F2; yourself);
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   432
        hasMappingFor: #F2
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   433
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   434
     KeyboardMap new
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   435
        parent: (KeyboardMap new bindValue: #Rename to: #F2; yourself);
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   436
        hasMappingFor: #F10
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   437
"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   438
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   439
    "Modified: / 15-05-2017 / 21:35:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   440
    "Modified (comment): / 17-05-2017 / 15:40:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6556
f2418ba5d1c5 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
   441
!
f2418ba5d1c5 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
   442
7969
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   443
rawKeysForLogical: logicalKey
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   444
    <resource: #obsolete>
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   445
    "Return all raw keys for given (possibly) logical key.
7969
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   446
     Example:
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   447
       #Copy -> #(Ctrlc CtrlInsert) - depending on mappings
7969
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   448
    "
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   449
    | rawKey rawKeys |
7969
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   450
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   451
    self obsoleteMethodWarning:'Use #bindingForLogical: and/or #aliasesForLogical:'.  
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   452
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   453
    rawKey := self bindingForLogical: logicalKey.
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   454
    rawKeys := rawKey notNil ifTrue:[ Array with: rawKey ] ifFalse:[ #() ].
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   455
    ^ rawKeys , (self aliasesForLogical: logicalKey)
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   456
7969
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   457
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   458
    "
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   459
    Screen current keyboardMap rawKeysForLogical: #Copy
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   460
    "
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   461
2bac4f32553f Allow individual applications to define their own shortcut mapping
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7856
diff changeset
   462
    "Created: / 08-02-2017 / 23:43:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   463
    "Modified: / 15-05-2017 / 21:29:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8037
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   464
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   465
    Screen current keyboardMap valueFor: #Alti
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   466
    "Modified (comment): / 14-05-2017 / 10:44:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   467
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   468
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   469
!KeyboardMap methodsFor:'testing'!
598
1a2339e902d4 commentary
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   470
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   471
isKeyboardMap
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   472
    ^ true
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   473
! !
244
83218faf792c checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   474
8037
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   475
!KeyboardMap methodsFor:'utilities'!
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   476
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   477
loadKeyboardMapDefinition: definitions
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   478
    "Load keyboard mapping from given `definition`. The `definition` is a collection
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   479
     mapping definitions. Each mapping definition is an array consisting of:
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   480
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   481
        #( <logical key>     <primary shortcut>  <aliases>?  <description>? )
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   482
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   483
    where:
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   484
        <logical key>   the symbolic name of the action as used in menu specs
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   485
                        #keyPress:x:y: methods and so on.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   486
                        Examples: #Copy, #Find, #Undo
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   487
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   488
        <primary shortcut> the actual shortcut in Smalltalk/X key event notation.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   489
                        This is the shortcut that will be shown in menus and/or
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   490
                        tooltips and so.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   491
                        Examples: #Ctrlv (means Ctrl + V), CmdF (means Alt + Shift + F), F10
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   492
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   493
        <aliases>       an alternative shortcut or array of those. Aliases won't be shown in
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   494
                        menu items but one may define some for user's convenience (for exampple,
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   495
                        define aliases used in other environments so users using both can just
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   496
                        keep using them. Optional.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   497
                        Examples: #Ctrlv, #(#Cmdv #ShiftInsert)
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   498
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   499
        <description>   A textual description of the action. This may be used to generate some
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   500
                        form of documentation. Optional.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   501
                        Examples: 'DoIt - evaluate expression', 'Replace selection with today''s date'
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   502
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   503
    "
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   504
    definitions do:[:definition | 
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   505
        | logical shortcut aliases|
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   506
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   507
        logical := definition first.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   508
        shortcut := definition second.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   509
        "/ aliases are optional as well as description, so it may happen that third
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   510
        "/ element is description rather than alias. Hence the check.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   511
        aliases := (definition size > 2) ifTrue:[ definition third ] ifFalse:[ #() ].
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   512
        aliases isSymbol ifTrue:[ aliases := Array with: aliases ].
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   513
        aliases isArray ifFalse:[ aliases := #() ].
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   514
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   515
        self bindValue: logical to: shortcut.
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   516
        aliases do:[:alias | self bindAlias: logical to: alias ]
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   517
    ].
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   518
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   519
    "
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   520
    KeyboardMap new loadKeyboardMapDefinition: #( (Paste Ctrlv (Cmdv CtrlInsert)) )
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   521
    KeyboardMap new loadKeyboardMapDefinition: #( (Paste Ctrlv Cmdv) )
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   522
    KeyboardMap new loadKeyboardMapDefinition: #( (Paste Ctrlv 'Paste') )   
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   523
    "
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   524
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   525
    "Created: / 12-05-2017 / 22:12:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   526
    "Modified (comment): / 14-05-2017 / 10:24:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   527
! !
d01faa4c1b02 Keyboard mapping: initialize default shortcuts in `DeviceWorkstation`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8036
diff changeset
   528
251
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
   529
!KeyboardMap class methodsFor:'documentation'!
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
   530
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
   531
version
6663
a3d11f506f57 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 6556
diff changeset
   532
    ^ '$Header: /cvs/stx/stx/libview/KeyboardMap.st,v 1.15 2014-12-18 16:13:06 cg Exp $'
8035
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   533
!
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   534
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   535
version_HG
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   536
8bbd397fe321 Keyboard mapping: refactored `KeyboardMap` to distinguish between a binding and an alias(es)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7969
diff changeset
   537
    ^ '$Changeset: <not expanded> $'
251
915de9a65169 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 244
diff changeset
   538
! !
6556
f2418ba5d1c5 class: KeyboardMap
Claus Gittinger <cg@exept.de>
parents: 5280
diff changeset
   539