Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.framework / org.gvsig.andami / src / main / java / org / gvsig / andami / ui / mdiFrame / KeyMapping.java @ 43167

History | View | Annotate | Download (6.51 KB)

1 40559 jjdelcerro
/**
2
 * gvSIG. Desktop Geographic Information System.
3 40435 jjdelcerro
 *
4 40559 jjdelcerro
 * Copyright (C) 2007-2013 gvSIG Association.
5 40435 jjdelcerro
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8 40559 jjdelcerro
 * as published by the Free Software Foundation; either version 3
9 40435 jjdelcerro
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18 40559 jjdelcerro
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20 40435 jjdelcerro
 *
21 40559 jjdelcerro
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23 40435 jjdelcerro
 */
24
package org.gvsig.andami.ui.mdiFrame;
25
26
import java.awt.Toolkit;
27
import java.awt.event.InputEvent;
28
import java.awt.event.KeyEvent;
29
import java.util.HashMap;
30
import java.util.Map;
31
32
import javax.swing.KeyStroke;
33
34
import org.gvsig.andami.messages.Messages;
35
import org.slf4j.Logger;
36
import org.slf4j.LoggerFactory;
37
38
39
40
/**
41
 * Clase que sirve para obtener los codigos de las teclas de la manera que las
42
 * requieren los JMenu a partir de un caracter que representa dicha tecla
43
 *
44
 */
45
public class KeyMapping {
46
        private static Logger logger = LoggerFactory.getLogger(KeyMapping.class);
47
48
    /** Asocia caracteres con KeyEvents */
49
    private static Map<String,Integer> keys = new HashMap<String, Integer>();
50
51
    static {
52
        keys.put("a", new Integer(KeyEvent.VK_A));
53
        keys.put("b", new Integer(KeyEvent.VK_B));
54
        keys.put("c", new Integer(KeyEvent.VK_C));
55
        keys.put("d", new Integer(KeyEvent.VK_D));
56
        keys.put("e", new Integer(KeyEvent.VK_E));
57
        keys.put("f", new Integer(KeyEvent.VK_F));
58
        keys.put("g", new Integer(KeyEvent.VK_G));
59
        keys.put("h", new Integer(KeyEvent.VK_H));
60
        keys.put("i", new Integer(KeyEvent.VK_I));
61
        keys.put("j", new Integer(KeyEvent.VK_J));
62
        keys.put("k", new Integer(KeyEvent.VK_K));
63
        keys.put("l", new Integer(KeyEvent.VK_L));
64
        keys.put("m", new Integer(KeyEvent.VK_M));
65
        keys.put("n", new Integer(KeyEvent.VK_N));
66
        keys.put("o", new Integer(KeyEvent.VK_O));
67
        keys.put("p", new Integer(KeyEvent.VK_P));
68
        keys.put("q", new Integer(KeyEvent.VK_Q));
69
        keys.put("r", new Integer(KeyEvent.VK_R));
70
        keys.put("s", new Integer(KeyEvent.VK_S));
71
        keys.put("t", new Integer(KeyEvent.VK_T));
72
        keys.put("u", new Integer(KeyEvent.VK_U));
73
        keys.put("v", new Integer(KeyEvent.VK_V));
74
        keys.put("w", new Integer(KeyEvent.VK_W));
75
        keys.put("x", new Integer(KeyEvent.VK_X));
76
        keys.put("y", new Integer(KeyEvent.VK_Y));
77
        keys.put("z", new Integer(KeyEvent.VK_Z));
78
        keys.put("0", new Integer(KeyEvent.VK_0));
79
        keys.put("1", new Integer(KeyEvent.VK_1));
80
        keys.put("2", new Integer(KeyEvent.VK_2));
81
        keys.put("3", new Integer(KeyEvent.VK_3));
82
        keys.put("4", new Integer(KeyEvent.VK_4));
83
        keys.put("5", new Integer(KeyEvent.VK_5));
84
        keys.put("6", new Integer(KeyEvent.VK_6));
85
        keys.put("7", new Integer(KeyEvent.VK_7));
86
        keys.put("8", new Integer(KeyEvent.VK_8));
87
        keys.put("9", new Integer(KeyEvent.VK_9));
88
        keys.put("+", new Integer(KeyEvent.VK_PLUS));
89
        keys.put("-", new Integer(KeyEvent.VK_MINUS));
90
        keys.put("f1", new Integer(KeyEvent.VK_F1));
91
        keys.put("f2", new Integer(KeyEvent.VK_F2));
92
        keys.put("f3", new Integer(KeyEvent.VK_F3));
93
        keys.put("f4", new Integer(KeyEvent.VK_F4));
94
        keys.put("f5", new Integer(KeyEvent.VK_F5));
95
        keys.put("f6", new Integer(KeyEvent.VK_F6));
96
        keys.put("f7", new Integer(KeyEvent.VK_F7));
97
        keys.put("f8", new Integer(KeyEvent.VK_F8));
98
        keys.put("f9", new Integer(KeyEvent.VK_F9));
99
        keys.put("f10", new Integer(KeyEvent.VK_F10));
100
        keys.put("f11", new Integer(KeyEvent.VK_F11));
101
        keys.put("f12", new Integer(KeyEvent.VK_F12));
102
        keys.put("delete", new Integer(KeyEvent.VK_DELETE));
103
    }
104
105
    /**
106
     * Obtiene dado un caracter el entero correspondiente al codigo que tiene
107
     * la tecla que produce dicho caracter
108
     *
109
     * @param a caracter
110
     *
111
     * @return Codigo de la tecla asociada
112
     *
113
     * @throws RuntimeException Si el caracter no tiene una tecla asociada
114
     */
115
    public static int getKey(char a) {
116
        Integer ret = (Integer) keys.get(String.valueOf(a));
117
        if (ret == null) {
118
            throw new RuntimeException(Messages.getString(
119
                    "KeyMapping.Caracter_no_valido") + a); //$NON-NLS-1$
120
        }
121
        return ret.intValue();
122
    }
123
124
    public static KeyStroke getKeyStroke(String accelerator) {
125
            if( accelerator == null ) {
126
                    return null;
127
            }
128
            accelerator = accelerator.trim();
129
            if( accelerator.length() < 1 ) {
130
                    return null;
131
            }
132
            String[] parts = accelerator.toLowerCase().split("[+]");
133
            int modifiers = 0;
134
            int key = 0;
135
            for( int i=0; i<parts.length ; i++) {
136
                    String part = parts[i];
137
                    if( "ctrl".equals(part) ) {
138
                            modifiers = modifiers | InputEvent.CTRL_MASK;
139
                    } else if( "shift".equals(part) ) {
140
                            modifiers = modifiers | InputEvent.SHIFT_MASK;
141
                    } else if( "meta".equals(part) ) {
142
                            modifiers = modifiers | InputEvent.META_MASK;
143
                    } else if( "alt".equals(part) ) {
144
                            modifiers = modifiers | InputEvent.ALT_MASK;
145
                    } else if( "".equals(part) ) { // +
146
                            key = KeyEvent.VK_PLUS;
147
                    } else {
148
                            Integer x = (Integer) keys.get(part);
149
                            if( x != null ) {
150
                                    key = x.intValue();
151
                            } else {
152
                                    try {
153
                                            throw new IllegalArgumentException();
154
                                    } catch (IllegalArgumentException ex) {
155
                                            logger.info("getKeyStroke('"+accelerator+"') malformed accelerator.",ex);
156
                                    }
157
                                    return null;
158
                            }
159
                    }
160
            }
161
            if( key == 0 ) {
162
                    return null;
163
            }
164
            /*
165
             * We are not adding default modifier, this means
166
             * short cuts must come with modifiers explicitly
167
             * except special keys like F3, F7, etc
168
             */
169
            /*
170
            if( modifiers == 0 ) {
171
                    modifiers = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
172
            }
173
            */
174
            return KeyStroke.getKeyStroke(key,modifiers);
175
    }
176
}