View Javadoc

1   /*
2    *  MicroEmulator
3    *  Copyright (C) 2001 Bartek Teodorczyk <barteo@barteo.net>
4    *
5    *  This library is free software; you can redistribute it and/or
6    *  modify it under the terms of the GNU Lesser General Public
7    *  License as published by the Free Software Foundation; either
8    *  version 2.1 of the License, or (at your option) any later version.
9    *
10   *  This library is distributed in the hope that it will be useful,
11   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   *  Lesser General Public License for more details.
14   *
15   *  You should have received a copy of the GNU Lesser General Public
16   *  License along with this library; if not, write to the Free Software
17   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 		// TODO poprawic KeyEvent	
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 }