comparison dwtx/jface/bindings/keys/SWTKeyLookup.d @ 16:e0f0aaf75edd

PopupDialog, bindings and actions
author Frank Benoit <benoit@tionex.de>
date Tue, 01 Apr 2008 08:00:31 +0200
parents
children da5ad8eedf5d
comparison
equal deleted inserted replaced
15:db8940420ed8 16:e0f0aaf75edd
1 /*******************************************************************************
2 * Copyright (c) 2005, 2006 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 * Port to the D programming language:
11 * Frank Benoit <benoit@tionex.de>
12 *******************************************************************************/
13 module dwtx.jface.bindings.keys.SWTKeyLookup;
14
15 import dwtx.jface.bindings.keys.IKeyLookup;
16
17 import tango.util.collection.HashMap;
18 import tango.util.collection.model.Map;
19
20 import dwt.DWT;
21 import dwtx.jface.util.Util;
22
23 import dwt.dwthelper.utils;
24 import dwt.dwthelper.Integer;
25
26 /**
27 * <p>
28 * A look-up table for the formal grammar for keys, and the integer values they
29 * represent. This look-up table is hard-coded to use DWT representations. By
30 * replacing this class (and
31 * {@link dwtx.jface.bindings.keys.SWTKeySupport}), you can remove the
32 * dependency on DWT.
33 * </p>
34 *
35 * @since 3.1
36 * @see dwtx.jface.bindings.keys.KeyLookupFactory
37 */
38 public final class SWTKeyLookup : IKeyLookup {
39
40 /**
41 * The look-up table for modifier keys. This is a map of formal name (<code>String</code>)
42 * to integer value (<code>Integer</code>).
43 */
44 private const Map!(String,Integer) modifierKeyTable;
45
46 /**
47 * The look-up table for formal names. This is a map of integer value (<code>Integer</code>)
48 * to formal name (<code>String</code>).
49 */
50 private const Map!(Integer,String) nameTable;
51
52 /**
53 * The look-up table for natural keys. This is a map of formal name (<code>String</code>)
54 * to integer value (<code>Integer</code>).
55 */
56 private const Map!(String,Integer) naturalKeyTable;
57
58 /**
59 * Constructs a new look-up class. This should only be done by the look-up
60 * factory.
61 *
62 * @see KeyLookupFactory
63 */
64 this() {
65 modifierKeyTable = new HashMap!(String,Integer);
66 nameTable = new HashMap!(Integer,String);
67 naturalKeyTable = new HashMap!(String,Integer);
68 Integer alt = new Integer(DWT.ALT);
69 Integer command = new Integer(DWT.COMMAND);
70 Integer ctrl = new Integer(DWT.CTRL);
71 Integer shift = new Integer(DWT.SHIFT);
72 modifierKeyTable.add(ALT_NAME, alt);
73 nameTable.add(alt, ALT_NAME);
74 modifierKeyTable.add(COMMAND_NAME, command);
75 nameTable.add(command, COMMAND_NAME);
76 modifierKeyTable.add(CTRL_NAME, ctrl);
77 nameTable.add(ctrl, CTRL_NAME);
78 modifierKeyTable.add(SHIFT_NAME, shift);
79 nameTable.add(shift, SHIFT_NAME);
80 modifierKeyTable.add(M1_NAME,
81 "carbon".equals(DWT.getPlatform()) ? command : ctrl); //$NON-NLS-1$
82 modifierKeyTable.add(M2_NAME, shift);
83 modifierKeyTable.add(M3_NAME, alt);
84 modifierKeyTable.add(M4_NAME, "carbon".equals(DWT.getPlatform()) ? ctrl //$NON-NLS-1$
85 : command);
86
87 Integer arrowDown = new Integer(DWT.ARROW_DOWN);
88 naturalKeyTable.add(ARROW_DOWN_NAME, arrowDown);
89 nameTable.add(arrowDown, ARROW_DOWN_NAME);
90 Integer arrowLeft = new Integer(DWT.ARROW_LEFT);
91 naturalKeyTable.add(ARROW_LEFT_NAME, arrowLeft);
92 nameTable.add(arrowLeft, ARROW_LEFT_NAME);
93 Integer arrowRight = new Integer(DWT.ARROW_RIGHT);
94 naturalKeyTable.add(ARROW_RIGHT_NAME, arrowRight);
95 nameTable.add(arrowRight, ARROW_RIGHT_NAME);
96 Integer arrowUp = new Integer(DWT.ARROW_UP);
97 naturalKeyTable.add(ARROW_UP_NAME, arrowUp);
98 nameTable.add(arrowUp, ARROW_UP_NAME);
99 Integer breakKey = new Integer(DWT.BREAK);
100 naturalKeyTable.add(BREAK_NAME, breakKey);
101 nameTable.add(breakKey, BREAK_NAME);
102 Integer bs = new Integer(DWT.BS);
103 naturalKeyTable.add(BS_NAME, bs);
104 nameTable.add(bs, BS_NAME);
105 naturalKeyTable.add(BACKSPACE_NAME, bs);
106 Integer capsLock = new Integer(DWT.CAPS_LOCK);
107 naturalKeyTable.add(CAPS_LOCK_NAME, capsLock);
108 nameTable.add(capsLock, CAPS_LOCK_NAME);
109 Integer cr = new Integer(DWT.CR);
110 naturalKeyTable.add(CR_NAME, cr);
111 nameTable.add(cr, CR_NAME);
112 naturalKeyTable.add(ENTER_NAME, cr);
113 naturalKeyTable.add(RETURN_NAME, cr);
114 Integer del = new Integer(DWT.DEL);
115 naturalKeyTable.add(DEL_NAME, del);
116 nameTable.add(del, DEL_NAME);
117 naturalKeyTable.add(DELETE_NAME, del);
118 Integer end = new Integer(DWT.END);
119 naturalKeyTable.add(END_NAME, end);
120 nameTable.add(end, END_NAME);
121 Integer esc = new Integer(DWT.ESC);
122 naturalKeyTable.add(ESC_NAME, esc);
123 nameTable.add(esc, ESC_NAME);
124 naturalKeyTable.add(ESCAPE_NAME, esc);
125 Integer f1 = new Integer(DWT.F1);
126 naturalKeyTable.add(F1_NAME, f1);
127 nameTable.add(f1, F1_NAME);
128 Integer f2 = new Integer(DWT.F2);
129 naturalKeyTable.add(F2_NAME, new Integer(DWT.F2));
130 nameTable.add(f2, F2_NAME);
131 Integer f3 = new Integer(DWT.F3);
132 naturalKeyTable.add(F3_NAME, new Integer(DWT.F3));
133 nameTable.add(f3, F3_NAME);
134 Integer f4 = new Integer(DWT.F4);
135 naturalKeyTable.add(F4_NAME, new Integer(DWT.F4));
136 nameTable.add(f4, F4_NAME);
137 Integer f5 = new Integer(DWT.F5);
138 naturalKeyTable.add(F5_NAME, new Integer(DWT.F5));
139 nameTable.add(f5, F5_NAME);
140 Integer f6 = new Integer(DWT.F6);
141 naturalKeyTable.add(F6_NAME, new Integer(DWT.F6));
142 nameTable.add(f6, F6_NAME);
143 Integer f7 = new Integer(DWT.F7);
144 naturalKeyTable.add(F7_NAME, new Integer(DWT.F7));
145 nameTable.add(f7, F7_NAME);
146 Integer f8 = new Integer(DWT.F8);
147 naturalKeyTable.add(F8_NAME, new Integer(DWT.F8));
148 nameTable.add(f8, F8_NAME);
149 Integer f9 = new Integer(DWT.F9);
150 naturalKeyTable.add(F9_NAME, new Integer(DWT.F9));
151 nameTable.add(f9, F9_NAME);
152 Integer f10 = new Integer(DWT.F10);
153 naturalKeyTable.add(F10_NAME, new Integer(DWT.F10));
154 nameTable.add(f10, F10_NAME);
155 Integer f11 = new Integer(DWT.F11);
156 naturalKeyTable.add(F11_NAME, new Integer(DWT.F11));
157 nameTable.add(f11, F11_NAME);
158 Integer f12 = new Integer(DWT.F12);
159 naturalKeyTable.add(F12_NAME, new Integer(DWT.F12));
160 nameTable.add(f12, F12_NAME);
161 Integer f13 = new Integer(DWT.F13);
162 naturalKeyTable.add(F13_NAME, new Integer(DWT.F13));
163 nameTable.add(f13, F13_NAME);
164 Integer f14 = new Integer(DWT.F14);
165 naturalKeyTable.add(F14_NAME, new Integer(DWT.F14));
166 nameTable.add(f14, F14_NAME);
167 Integer f15 = new Integer(DWT.F15);
168 naturalKeyTable.add(F15_NAME, new Integer(DWT.F15));
169 nameTable.add(f15, F15_NAME);
170 Integer ff = new Integer(12); // ASCII 0x0C
171 naturalKeyTable.add(FF_NAME, ff);
172 nameTable.add(ff, FF_NAME);
173 Integer home = new Integer(DWT.HOME);
174 naturalKeyTable.add(HOME_NAME, home);
175 nameTable.add(home, HOME_NAME);
176 Integer insert = new Integer(DWT.INSERT);
177 naturalKeyTable.add(INSERT_NAME, insert);
178 nameTable.add(insert, INSERT_NAME);
179 Integer lf = new Integer(DWT.LF);
180 naturalKeyTable.add(LF_NAME, lf);
181 nameTable.add(lf, LF_NAME);
182 Integer nul = new Integer(DWT.NULL);
183 naturalKeyTable.add(NUL_NAME, nul);
184 nameTable.add(nul, NUL_NAME);
185 Integer numLock = new Integer(DWT.NUM_LOCK);
186 naturalKeyTable.add(NUM_LOCK_NAME, numLock);
187 nameTable.add(numLock, NUM_LOCK_NAME);
188 Integer keypad0 = new Integer(DWT.KEYPAD_0);
189 naturalKeyTable.add(NUMPAD_0_NAME, keypad0);
190 nameTable.add(keypad0, NUMPAD_0_NAME);
191 Integer keypad1 = new Integer(DWT.KEYPAD_1);
192 naturalKeyTable.add(NUMPAD_1_NAME, keypad1);
193 nameTable.add(keypad1, NUMPAD_1_NAME);
194 Integer keypad2 = new Integer(DWT.KEYPAD_2);
195 naturalKeyTable.add(NUMPAD_2_NAME, keypad2);
196 nameTable.add(keypad2, NUMPAD_2_NAME);
197 Integer keypad3 = new Integer(DWT.KEYPAD_3);
198 naturalKeyTable.add(NUMPAD_3_NAME, keypad3);
199 nameTable.add(keypad3, NUMPAD_3_NAME);
200 Integer keypad4 = new Integer(DWT.KEYPAD_4);
201 naturalKeyTable.add(NUMPAD_4_NAME, keypad4);
202 nameTable.add(keypad4, NUMPAD_4_NAME);
203 Integer keypad5 = new Integer(DWT.KEYPAD_5);
204 naturalKeyTable.add(NUMPAD_5_NAME, keypad5);
205 nameTable.add(keypad5, NUMPAD_5_NAME);
206 Integer keypad6 = new Integer(DWT.KEYPAD_6);
207 naturalKeyTable.add(NUMPAD_6_NAME, keypad6);
208 nameTable.add(keypad6, NUMPAD_6_NAME);
209 Integer keypad7 = new Integer(DWT.KEYPAD_7);
210 naturalKeyTable.add(NUMPAD_7_NAME, keypad7);
211 nameTable.add(keypad7, NUMPAD_7_NAME);
212 Integer keypad8 = new Integer(DWT.KEYPAD_8);
213 naturalKeyTable.add(NUMPAD_8_NAME, keypad8);
214 nameTable.add(keypad8, NUMPAD_8_NAME);
215 Integer keypad9 = new Integer(DWT.KEYPAD_9);
216 naturalKeyTable.add(NUMPAD_9_NAME, keypad9);
217 nameTable.add(keypad9, NUMPAD_9_NAME);
218 Integer keypadAdd = new Integer(DWT.KEYPAD_ADD);
219 naturalKeyTable.add(NUMPAD_ADD_NAME, keypadAdd);
220 nameTable.add(keypadAdd, NUMPAD_ADD_NAME);
221 Integer keypadDecimal = new Integer(DWT.KEYPAD_DECIMAL);
222 naturalKeyTable.add(NUMPAD_DECIMAL_NAME, keypadDecimal);
223 nameTable.add(keypadDecimal, NUMPAD_DECIMAL_NAME);
224 Integer keypadDivide = new Integer(DWT.KEYPAD_DIVIDE);
225 naturalKeyTable.add(NUMPAD_DIVIDE_NAME, keypadDivide);
226 nameTable.add(keypadDivide, NUMPAD_DIVIDE_NAME);
227 Integer keypadCr = new Integer(DWT.KEYPAD_CR);
228 naturalKeyTable.add(NUMPAD_ENTER_NAME, keypadCr);
229 nameTable.add(keypadCr, NUMPAD_ENTER_NAME);
230 Integer keypadEqual = new Integer(DWT.KEYPAD_EQUAL);
231 naturalKeyTable.add(NUMPAD_EQUAL_NAME, keypadEqual);
232 nameTable.add(keypadEqual, NUMPAD_EQUAL_NAME);
233 Integer keypadMultiply = new Integer(DWT.KEYPAD_MULTIPLY);
234 naturalKeyTable.add(NUMPAD_MULTIPLY_NAME, keypadMultiply);
235 nameTable.add(keypadMultiply, NUMPAD_MULTIPLY_NAME);
236 Integer keypadSubtract = new Integer(DWT.KEYPAD_SUBTRACT);
237 naturalKeyTable.add(NUMPAD_SUBTRACT_NAME, keypadSubtract);
238 nameTable.add(keypadSubtract, NUMPAD_SUBTRACT_NAME);
239 Integer pageDown = new Integer(DWT.PAGE_DOWN);
240 naturalKeyTable.add(PAGE_DOWN_NAME, pageDown);
241 nameTable.add(pageDown, PAGE_DOWN_NAME);
242 Integer pageUp = new Integer(DWT.PAGE_UP);
243 naturalKeyTable.add(PAGE_UP_NAME, pageUp);
244 nameTable.add(pageUp, PAGE_UP_NAME);
245 Integer pause = new Integer(DWT.PAUSE);
246 naturalKeyTable.add(PAUSE_NAME, pause);
247 nameTable.add(pause, PAUSE_NAME);
248 Integer printScreen = new Integer(DWT.PRINT_SCREEN);
249 naturalKeyTable.add(PRINT_SCREEN_NAME, printScreen);
250 nameTable.add(printScreen, PRINT_SCREEN_NAME);
251 Integer scrollLock = new Integer(DWT.SCROLL_LOCK);
252 naturalKeyTable.add(SCROLL_LOCK_NAME, scrollLock);
253 nameTable.add(scrollLock, SCROLL_LOCK_NAME);
254 Integer space = new Integer(' ');
255 naturalKeyTable.add(SPACE_NAME, space);
256 nameTable.add(space, SPACE_NAME);
257 Integer tab = new Integer(DWT.TAB);
258 naturalKeyTable.add(TAB_NAME, tab);
259 nameTable.add(tab, TAB_NAME);
260 Integer vt = new Integer(11); // ASCII 0x0B
261 naturalKeyTable.add(VT_NAME, vt);
262 nameTable.add(vt, VT_NAME);
263 }
264
265 /*
266 * (non-Javadoc)
267 *
268 * @see dwtx.jface.bindings.keys.IKeyLookup#formalKeyLookup(java.lang.String)
269 *
270 */
271 public final int formalKeyLookup(String name) {
272 Object value = naturalKeyTable.get(name);
273 if (cast(Integer)value ) {
274 return (cast(Integer) value).intValue();
275 }
276
277 if (name.length > 0) {
278 throw new IllegalArgumentException("Unrecognized formal key name: " //$NON-NLS-1$
279 ~ name);
280 }
281
282 return name.charAt(0);
283 }
284
285 /*
286 * (non-Javadoc)
287 *
288 * @see dwtx.jface.bindings.keys.IKeyLookup#formalKeyLookupInteger(java.lang.String)
289 *
290 */
291 public final Integer formalKeyLookupInteger(String name) {
292 Object value = naturalKeyTable.get(name);
293 if (cast(Integer)value ) {
294 return cast(Integer) value;
295 }
296
297 return new Integer(name.charAt(0));
298 }
299
300 /*
301 * (non-Javadoc)
302 *
303 * @see dwtx.jface.bindings.keys.IKeyLookup#formalModifierLookup(java.lang.String)
304 *
305 */
306 public final int formalModifierLookup(String name) {
307 Object value = modifierKeyTable.get(name);
308 if (cast(Integer)value ) {
309 return (cast(Integer) value).intValue();
310 }
311
312 return 0;
313 }
314
315 /*
316 * (non-Javadoc)
317 *
318 * @see dwtx.jface.bindings.keys.IKeyLookup#formalNameLookup(int)
319 *
320 */
321 public final String formalNameLookup(int key) {
322 Integer keyObject = new Integer(key);
323 if (nameTable.containsKey(keyObject) ) {
324 return nameTable.get(keyObject);
325 }
326
327 return dcharToString( cast(dchar) key );
328 }
329
330 /*
331 * (non-Javadoc)
332 *
333 * @see dwtx.jface.bindings.keys.IKeyLookup#getAlt()
334 *
335 */
336 public final int getAlt() {
337 return DWT.ALT;
338 }
339
340 /*
341 * (non-Javadoc)
342 *
343 * @see dwtx.jface.bindings.keys.IKeyLookup#getCommand()
344 *
345 */
346 public final int getCommand() {
347 return DWT.COMMAND;
348 }
349
350 /*
351 * (non-Javadoc)
352 *
353 * @see dwtx.jface.bindings.keys.IKeyLookup#getCtrl()
354 *
355 */
356 public final int getCtrl() {
357 return DWT.CTRL;
358 }
359
360 /*
361 * (non-Javadoc)
362 *
363 * @see dwtx.jface.bindings.keys.IKeyLookup#getShift()
364 *
365 */
366 public final int getShift() {
367 return DWT.SHIFT;
368 }
369
370 /*
371 * (non-Javadoc)
372 *
373 * @see dwtx.jface.bindings.keys.IKeyLookup#isModifierKey(int)
374 *
375 */
376 public final bool isModifierKey(int key) {
377 return ((key & DWT.MODIFIER_MASK) !is 0);
378 }
379 }