1 package devisor2.grid.options;
2 
3 import java.util.*;
4 import java.awt.event.*;
5 import javax.swing.*;
6 
7 /**
8  *  This class maps the GUI representation of accelerator keys to the
9  *  Java object representation. <br>
10  *  So, nothing spectacular here, just a long, boring multi-if-else-statement.
11  *  <br>
12  *  The application-wide accelerator settings are managed and saved in the
13  *  Options class. See there for details. <br>
14  *
15  *  @see devisor2.options.Options
16  *  @author Dominik Goeddeke
17  *  @version 1.0 (fully tested)
18  */
19 public class Accelerators
20 {
21 
22     /**
23      *  Returns the Swing representation of the accelerator defined by
24      *  modifier + key
25      *
26      *  @param modifier - one of the constants CRTL, ALT, SHIFT
27      *  @param key - one of the constants A-Z, 0-9, F-keys or INS, DEL etc.
28      *
29      *  @return a KeyStroke representation of the combination modifiers + key
30      *  @see javax.swing.KeyStroke
31      */
getAccelerator(String modifier, String key)32     public static KeyStroke getAccelerator (String modifier, String key)
33     {
34 	if (modifier.equals ("CTRL"))
35 	    return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.CTRL_MASK);
36 	if (modifier.equals ("ALT"))
37 	    return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.ALT_MASK);
38 	if (modifier.equals ("SHIFT"))
39 	    return KeyStroke.getKeyStroke (getKeyConstant(key), ActionEvent.SHIFT_MASK);
40 	if (modifier.equals ("NONE"))
41 	    return KeyStroke.getKeyStroke (getKeyConstant(key), 0);
42 	return null;
43     }
44 
45 
46     /**
47      *  Returns the Swing representation of the given (internal) string
48      *  representing of an accelerator.
49      *  The input format is as follows: "modifier+key".
50      *
51      *  @param a String representing an accelerator
52      *  @return a Keystroke object representing the accelerator
53      */
getAccelerator(String accString)54     public static KeyStroke getAccelerator (String accString)
55     {
56 	int pluspos = accString.indexOf ('+');
57 	String mod, key;
58 	if (pluspos == -1)
59 	    {
60 		mod = "NONE";
61 		key = accString;
62 	    }
63 	else
64 	    {
65 		mod = accString.substring (0,pluspos);
66 		key = accString.substring (pluspos+1);
67 	    }
68 
69 	return getAccelerator (mod, key);
70     }
71 
72 
73     /**
74      *  Returns a String representation of the given mmemonic
75      *  specified by the KeyEvent constant
76      *
77      *  @param key - a KeyEvent constant
78      *  @returns a String representation of the given constant
79      */
getKeyString(int key)80     public static String getKeyString (int key)
81     {
82 	if (key == KeyEvent.VK_A) return "A";
83 	if (key == KeyEvent.VK_A) return "A";
84 	if (key == KeyEvent.VK_B) return "B";
85 	if (key == KeyEvent.VK_C) return "C";
86 	if (key == KeyEvent.VK_D) return "D";
87 	if (key == KeyEvent.VK_E) return "E";
88 	if (key == KeyEvent.VK_F) return "F";
89 	if (key == KeyEvent.VK_G) return "G";
90 	if (key == KeyEvent.VK_H) return "H";
91 	if (key == KeyEvent.VK_I) return "I";
92 	if (key == KeyEvent.VK_J) return "J";
93 	if (key == KeyEvent.VK_K) return "K";
94 	if (key == KeyEvent.VK_L) return "L";
95 	if (key == KeyEvent.VK_M) return "M";
96 	if (key == KeyEvent.VK_N) return "N";
97 	if (key == KeyEvent.VK_O) return "O";
98 	if (key == KeyEvent.VK_P) return "P";
99 	if (key == KeyEvent.VK_Q) return "Q";
100 	if (key == KeyEvent.VK_R) return "R";
101 	if (key == KeyEvent.VK_S) return "S";
102 	if (key == KeyEvent.VK_T) return "T";
103 	if (key == KeyEvent.VK_U) return "U";
104 	if (key == KeyEvent.VK_V) return "V";
105 	if (key == KeyEvent.VK_W) return "W";
106 	if (key == KeyEvent.VK_X) return "X";
107 	if (key == KeyEvent.VK_Y) return "Y";
108 	if (key == KeyEvent.VK_Z) return "Z";
109 	if (key == KeyEvent.VK_0) return "0";
110 	if (key == KeyEvent.VK_1) return "1";
111 	if (key == KeyEvent.VK_2) return "2";
112 	if (key == KeyEvent.VK_3) return "3";
113 	if (key == KeyEvent.VK_4) return "4";
114 	if (key == KeyEvent.VK_5) return "5";
115 	if (key == KeyEvent.VK_6) return "6";
116 	if (key == KeyEvent.VK_7) return "7";
117 	if (key == KeyEvent.VK_8) return "8";
118 	if (key == KeyEvent.VK_9) return "9";
119 	if (key == KeyEvent.VK_F1) return "F1";
120 	if (key == KeyEvent.VK_F2) return "F2";
121 	if (key == KeyEvent.VK_F3) return "F3";
122 	if (key == KeyEvent.VK_F4) return "F4";
123 	if (key == KeyEvent.VK_F5) return "F5";
124 	if (key == KeyEvent.VK_F6) return "F6";
125 	if (key == KeyEvent.VK_F7) return "F7";
126 	if (key == KeyEvent.VK_F8) return "F8";
127 	if (key == KeyEvent.VK_F9) return "F9";
128 	if (key == KeyEvent.VK_F10) return "F10";
129 	if (key == KeyEvent.VK_F11) return "F11";
130 	if (key == KeyEvent.VK_F12) return "F12";
131 	if (key == KeyEvent.VK_INSERT) return "INS";
132 	if (key == KeyEvent.VK_DELETE) return "DEL";
133 	if (key == KeyEvent.VK_HOME) return "HOME";
134 	if (key == KeyEvent.VK_END) return "END";
135 	if (key == KeyEvent.VK_PAGE_UP) return "PGUP";
136 	if (key == KeyEvent.VK_PAGE_DOWN) return "PGDN";
137 	return "NONE";
138    }
139 
140     /**
141      *  returns the KEY_VK constant assigned to the given key
142      *  @see javax.swing.KeyEvent
143      *
144      *  @param key - an A-Z, 0-9, alphanumerical character
145      *  @returns the corresponding KeyEvent constant
146      */
getKeyConstant(String key)147     public static int getKeyConstant (String key)
148     {
149 	if (key.equals("A")) return KeyEvent.VK_A;
150 	if (key.equals("B")) return KeyEvent.VK_B;
151 	if (key.equals("C")) return KeyEvent.VK_C;
152 	if (key.equals("D")) return KeyEvent.VK_D;
153 	if (key.equals("E")) return KeyEvent.VK_E;
154 	if (key.equals("F")) return KeyEvent.VK_F;
155 	if (key.equals("G")) return KeyEvent.VK_G;
156 	if (key.equals("H")) return KeyEvent.VK_H;
157 	if (key.equals("I")) return KeyEvent.VK_I;
158 	if (key.equals("J")) return KeyEvent.VK_J;
159 	if (key.equals("K")) return KeyEvent.VK_K;
160 	if (key.equals("L")) return KeyEvent.VK_L;
161 	if (key.equals("M")) return KeyEvent.VK_M;
162 	if (key.equals("N")) return KeyEvent.VK_N;
163 	if (key.equals("O")) return KeyEvent.VK_O;
164 	if (key.equals("P")) return KeyEvent.VK_P;
165 	if (key.equals("Q")) return KeyEvent.VK_Q;
166 	if (key.equals("R")) return KeyEvent.VK_R;
167 	if (key.equals("S")) return KeyEvent.VK_S;
168 	if (key.equals("T")) return KeyEvent.VK_T;
169 	if (key.equals("U")) return KeyEvent.VK_U;
170 	if (key.equals("V")) return KeyEvent.VK_V;
171 	if (key.equals("W")) return KeyEvent.VK_W;
172 	if (key.equals("X")) return KeyEvent.VK_X;
173 	if (key.equals("Y")) return KeyEvent.VK_Y;
174 	if (key.equals("Z")) return KeyEvent.VK_Z;
175 	if (key.equals("0")) return KeyEvent.VK_0;
176 	if (key.equals("1")) return KeyEvent.VK_1;
177 	if (key.equals("2")) return KeyEvent.VK_2;
178 	if (key.equals("3")) return KeyEvent.VK_3;
179 	if (key.equals("4")) return KeyEvent.VK_4;
180 	if (key.equals("5")) return KeyEvent.VK_5;
181 	if (key.equals("6")) return KeyEvent.VK_6;
182 	if (key.equals("7")) return KeyEvent.VK_7;
183 	if (key.equals("8")) return KeyEvent.VK_8;
184 	if (key.equals("9")) return KeyEvent.VK_9;
185 	if (key.equals("F1")) return KeyEvent.VK_F1;
186 	if (key.equals("F2")) return KeyEvent.VK_F2;
187 	if (key.equals("F3")) return KeyEvent.VK_F3;
188 	if (key.equals("F4")) return KeyEvent.VK_F4;
189 	if (key.equals("F5")) return KeyEvent.VK_F5;
190 	if (key.equals("F6")) return KeyEvent.VK_F6;
191 	if (key.equals("F7")) return KeyEvent.VK_F7;
192 	if (key.equals("F8")) return KeyEvent.VK_F8;
193 	if (key.equals("F9")) return KeyEvent.VK_F9;
194 	if (key.equals("F10")) return KeyEvent.VK_F10;
195 	if (key.equals("F11")) return KeyEvent.VK_F11;
196 	if (key.equals("F12")) return KeyEvent.VK_F12;
197 	if (key.equals("INS")) return KeyEvent.VK_INSERT;
198 	if (key.equals("DEL")) return KeyEvent.VK_DELETE;
199 	if (key.equals("HOME")) return KeyEvent.VK_HOME;
200 	if (key.equals("END")) return KeyEvent.VK_END;
201 	if (key.equals("PGUP")) return KeyEvent.VK_PAGE_UP;
202 	if (key.equals("PGDN")) return KeyEvent.VK_PAGE_DOWN;
203 	return KeyEvent.VK_UNDEFINED;
204     }
205 
206     /**
207      *  This method "just" checks if the given combination of modifier
208      *  and key is a correct accelerator.
209      *  Accepted combinations are:
210      *  - if the modifier is NONE, only function keys and INS,DEL,HOME,END
211      *    PGUP and PGDN are accepted
212      *  - if the modifier is ALT, no letters are accepted (because these are
213      *    reserved for the menu)
214      *
215      *  @param modifier - the strings CTRL, ALT, SHIFT, NONE
216      *  @param key - a String representation of a key (see above)
217      *
218      *  @returns true if the given combination represents a correct
219      *           accelerator, false otherwise
220      */
isCorrectAccelerator(String modifier, String key)221     public static boolean isCorrectAccelerator (String modifier, String key)
222     {
223 	// the CTRL part: as keys can only be those from the combobox,
224 	// everything is allowed
225 	if (modifier.equals("CTRL") & !(key.equals("NONE"))) return true;
226 	// same with the SHIFT part
227 	if (modifier.equals("SHIFT") & !(key.equals("NONE"))) return true;
228 	// the NONE part
229 	if (modifier.equals("NONE"))
230 	    {
231 		if (key.equals ("F1")) return true;
232 		if (key.equals ("F1")) return true;
233 		if (key.equals ("F2")) return true;
234 		if (key.equals ("F3")) return true;
235 		if (key.equals ("F4")) return true;
236 		if (key.equals ("F5")) return true;
237 		if (key.equals ("F6")) return true;
238 		if (key.equals ("F7")) return true;
239 		if (key.equals ("F8")) return true;
240 		if (key.equals ("F9")) return true;
241 		if (key.equals ("F10")) return true;
242 		if (key.equals ("F11")) return true;
243 		if (key.equals ("F12")) return true;
244 		if (key.equals ("INS")) return true;
245 		if (key.equals ("DEL")) return true;
246 		if (key.equals ("HOME")) return true;
247 		if (key.equals ("END")) return true;
248 		if (key.equals ("PGUP")) return true;
249 		if (key.equals ("PGDN")) return true;
250 		if (key.equals ("NONE")) return true;
251 	    }
252 	// the ALT part
253 	if (modifier.equals("ALT"))
254 	    {
255 		if (key.equals ("F1")) return true;
256 		if (key.equals ("F1")) return true;
257 		if (key.equals ("F2")) return true;
258 		if (key.equals ("F3")) return true;
259 		if (key.equals ("F4")) return true;
260 		if (key.equals ("F5")) return true;
261 		if (key.equals ("F6")) return true;
262 		if (key.equals ("F7")) return true;
263 		if (key.equals ("F8")) return true;
264 		if (key.equals ("F9")) return true;
265 		if (key.equals ("F10")) return true;
266 		if (key.equals ("F11")) return true;
267 		if (key.equals ("F12")) return true;
268 		if (key.equals ("INS")) return true;
269 		if (key.equals ("DEL")) return true;
270 		if (key.equals ("HOME")) return true;
271 		if (key.equals ("END")) return true;
272 		if (key.equals ("PGUP")) return true;
273 		if (key.equals ("PGDN")) return true;
274 		if (key.equals ("1")) return true;
275 		if (key.equals ("2")) return true;
276 		if (key.equals ("3")) return true;
277 		if (key.equals ("4")) return true;
278 		if (key.equals ("5")) return true;
279 		if (key.equals ("6")) return true;
280 		if (key.equals ("7")) return true;
281 		if (key.equals ("8")) return true;
282 		if (key.equals ("9")) return true;
283 		if (key.equals ("0")) return true;
284 	    }
285 	return false;
286     }
287 }
288 
289 
290 
291 
292 
293 
294