1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.microemu.device.swt;
21
22 import java.util.Hashtable;
23
24 import javax.microedition.lcdui.Canvas;
25
26 import org.eclipse.swt.SWT;
27 import org.microemu.device.InputMethod;
28 import org.microemu.device.impl.Button;
29 import org.microemu.device.impl.Shape;
30
31
32
33 public class SwtButton implements Button
34 {
35
36 String name;
37 Shape shape;
38 private int keyboardKey;
39 private int keyCode;
40 private Hashtable inputToChars;
41
42
43 /**
44 * @param name
45 * @param shape
46 * @param keyCode - Integer.MIN_VALUE when unspecified
47 * @param keyName
48 * @param chars
49 */
50 public SwtButton(String name, Shape shape, int keyCode, String keyName, Hashtable inputToChars)
51 {
52 this.name = name;
53 this.shape = shape;
54 this.keyboardKey = parseKeyboardKey(keyName);
55
56 if (keyCode == Integer.MIN_VALUE) {
57 if (keyName != null) {
58 this.keyCode = this.keyboardKey;
59 } else {
60 this.keyCode = -1;
61 }
62 } else {
63 this.keyCode = keyCode;
64 }
65 this.inputToChars = inputToChars;
66 }
67
68
69 public int getKeyboardKey()
70 {
71 return keyboardKey;
72 }
73
74
75 public int getKeyCode()
76 {
77 return keyCode;
78 }
79
80
81 public char[] getChars(int inputMode)
82 {
83 char[] result = null;
84 switch (inputMode) {
85 case InputMethod.INPUT_123 :
86 result = (char[]) inputToChars.get("123");
87 break;
88 case InputMethod.INPUT_ABC_LOWER :
89 result = (char[]) inputToChars.get("abc");
90 break;
91 case InputMethod.INPUT_ABC_UPPER :
92 result = (char[]) inputToChars.get("ABC");
93 break;
94 }
95 if (result == null) {
96 result = (char[]) inputToChars.get("common");
97 }
98
99 return result;
100 }
101
102
103 public boolean isChar(char c, int inputMode)
104 {
105 c = Character.toLowerCase(c);
106 char[] chars = getChars(inputMode);
107 if (chars != null) {
108 for (int i = 0; i < chars.length; i++) {
109 if (c == Character.toLowerCase(chars[i])) {
110 return true;
111 }
112 }
113 }
114
115 return false;
116 }
117
118
119 public String getName()
120 {
121 return name;
122 }
123
124
125 public Shape getShape()
126 {
127 return shape;
128 }
129
130
131 private int parseKeyboardKey(String keyName)
132 {
133 if (keyName == null) {
134 return -1;
135 }
136
137 if (keyName.equals("VK_LEFT")) {
138 return SWT.ARROW_LEFT;
139 } else if (keyName.equals("VK_RIGHT")) {
140 return SWT.ARROW_RIGHT;
141 } else if (keyName.equals("VK_UP")) {
142 return SWT.ARROW_UP;
143 } else if (keyName.equals("VK_DOWN")) {
144 return SWT.ARROW_DOWN;
145 } else if (keyName.equals("VK_ENTER")) {
146 return SWT.CR;
147 } else if (keyName.equals("VK_F1")) {
148 return SWT.F1;
149 } else if (keyName.equals("VK_F2")) {
150 return SWT.F2;
151 } else if (keyName.equals("VK_0")) {
152 return Canvas.KEY_NUM0;
153 } else if (keyName.equals("VK_1")) {
154 return Canvas.KEY_NUM1;
155 } else if (keyName.equals("VK_2")) {
156 return Canvas.KEY_NUM2;
157 } else if (keyName.equals("VK_3")) {
158 return Canvas.KEY_NUM3;
159 } else if (keyName.equals("VK_4")) {
160 return Canvas.KEY_NUM4;
161 } else if (keyName.equals("VK_5")) {
162 return Canvas.KEY_NUM5;
163 } else if (keyName.equals("VK_6")) {
164 return Canvas.KEY_NUM6;
165 } else if (keyName.equals("VK_7")) {
166 return Canvas.KEY_NUM7;
167 } else if (keyName.equals("VK_8")) {
168 return Canvas.KEY_NUM8;
169 } else if (keyName.equals("VK_9")) {
170 return Canvas.KEY_NUM9;
171 } else if (keyName.equals("VK_MULTIPLY")) {
172 return Canvas.KEY_STAR;
173 } else if (keyName.equals("VK_MODECHANGE")) {
174 return Canvas.KEY_POUND;
175 } else {
176 try {
177 return Integer.parseInt(keyName);
178 } catch (NumberFormatException ex) {
179 return -1;
180 }
181 }
182 }
183
184 }