1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.java.accessibility;
25 
26 import com.sun.star.accessibility.*;
27 import com.sun.star.awt.KeyStroke;
28 
29 /**
30  *
31  */
32 public class AccessibleKeyBinding extends Object implements javax.accessibility.AccessibleKeyBinding {
33 
34     XAccessibleKeyBinding unoAccessibleKeybinding;
35 
AccessibleKeyBinding(XAccessibleKeyBinding unoKB)36     public AccessibleKeyBinding(XAccessibleKeyBinding unoKB) {
37         unoAccessibleKeybinding = unoKB;
38     }
39 
convertModifiers(short s)40     public static int convertModifiers(short s) {
41         int modifiers = 0;
42         if ((s & com.sun.star.awt.KeyModifier.SHIFT) != 0) {
43             modifiers = modifiers | java.awt.event.KeyEvent.SHIFT_DOWN_MASK;
44         }
45 
46         if ((s & com.sun.star.awt.KeyModifier.MOD1) != 0) {
47             modifiers = modifiers | java.awt.event.KeyEvent.CTRL_DOWN_MASK;
48         }
49 
50         if ((s & com.sun.star.awt.KeyModifier.MOD2) != 0) {
51             modifiers = modifiers | java.awt.event.KeyEvent.ALT_DOWN_MASK;
52         }
53 
54         if ((s & com.sun.star.awt.KeyModifier.MOD3) != 0) {
55             modifiers = modifiers | java.awt.event.KeyEvent.META_DOWN_MASK;
56         }
57 
58         return modifiers;
59     }
60 
convertKeyCode(short s)61     public static int convertKeyCode(short s) {
62         int keycode = java.awt.event.KeyEvent.VK_UNDEFINED;
63 
64         switch(s) {
65             case com.sun.star.awt.Key.NUM0:
66                 keycode = java.awt.event.KeyEvent.VK_0;
67                 break;
68             case com.sun.star.awt.Key.NUM1:
69                 keycode = java.awt.event.KeyEvent.VK_1;
70                 break;
71             case com.sun.star.awt.Key.NUM2:
72                 keycode = java.awt.event.KeyEvent.VK_2;
73                 break;
74             case com.sun.star.awt.Key.NUM3:
75                 keycode = java.awt.event.KeyEvent.VK_3;
76                 break;
77             case com.sun.star.awt.Key.NUM4:
78                 keycode = java.awt.event.KeyEvent.VK_4;
79                 break;
80             case com.sun.star.awt.Key.NUM5:
81                 keycode = java.awt.event.KeyEvent.VK_5;
82                 break;
83             case com.sun.star.awt.Key.NUM6:
84                 keycode = java.awt.event.KeyEvent.VK_6;
85                 break;
86             case com.sun.star.awt.Key.NUM7:
87                 keycode = java.awt.event.KeyEvent.VK_7;
88                 break;
89             case com.sun.star.awt.Key.NUM8:
90                 keycode = java.awt.event.KeyEvent.VK_8;
91                 break;
92             case com.sun.star.awt.Key.NUM9:
93                 keycode = java.awt.event.KeyEvent.VK_9;
94                 break;
95             case com.sun.star.awt.Key.A:
96                 keycode = java.awt.event.KeyEvent.VK_A;
97                 break;
98             case com.sun.star.awt.Key.B:
99                 keycode = java.awt.event.KeyEvent.VK_B;
100                 break;
101             case com.sun.star.awt.Key.C:
102                 keycode = java.awt.event.KeyEvent.VK_C;
103                 break;
104             case com.sun.star.awt.Key.D:
105                 keycode = java.awt.event.KeyEvent.VK_D;
106                 break;
107             case com.sun.star.awt.Key.E:
108                 keycode = java.awt.event.KeyEvent.VK_E;
109                 break;
110             case com.sun.star.awt.Key.F:
111                 keycode = java.awt.event.KeyEvent.VK_F;
112                 break;
113             case com.sun.star.awt.Key.G:
114                 keycode = java.awt.event.KeyEvent.VK_G;
115                 break;
116             case com.sun.star.awt.Key.H:
117                 keycode = java.awt.event.KeyEvent.VK_H;
118                 break;
119             case com.sun.star.awt.Key.I:
120                 keycode = java.awt.event.KeyEvent.VK_I;
121                 break;
122             case com.sun.star.awt.Key.J:
123                 keycode = java.awt.event.KeyEvent.VK_J;
124                 break;
125             case com.sun.star.awt.Key.K:
126                 keycode = java.awt.event.KeyEvent.VK_K;
127                 break;
128             case com.sun.star.awt.Key.L:
129                 keycode = java.awt.event.KeyEvent.VK_L;
130                 break;
131             case com.sun.star.awt.Key.M:
132                 keycode = java.awt.event.KeyEvent.VK_M;
133                 break;
134             case com.sun.star.awt.Key.N:
135                 keycode = java.awt.event.KeyEvent.VK_N;
136                 break;
137             case com.sun.star.awt.Key.O:
138                 keycode = java.awt.event.KeyEvent.VK_O;
139                 break;
140             case com.sun.star.awt.Key.P:
141                 keycode = java.awt.event.KeyEvent.VK_P;
142                 break;
143             case com.sun.star.awt.Key.Q:
144                 keycode = java.awt.event.KeyEvent.VK_Q;
145                 break;
146             case com.sun.star.awt.Key.R:
147                 keycode = java.awt.event.KeyEvent.VK_R;
148                 break;
149             case com.sun.star.awt.Key.S:
150                 keycode = java.awt.event.KeyEvent.VK_S;
151                 break;
152             case com.sun.star.awt.Key.T:
153                 keycode = java.awt.event.KeyEvent.VK_T;
154                 break;
155             case com.sun.star.awt.Key.U:
156                 keycode = java.awt.event.KeyEvent.VK_U;
157                 break;
158             case com.sun.star.awt.Key.V:
159                 keycode = java.awt.event.KeyEvent.VK_V;
160                 break;
161             case com.sun.star.awt.Key.W:
162                 keycode = java.awt.event.KeyEvent.VK_W;
163                 break;
164             case com.sun.star.awt.Key.X:
165                 keycode = java.awt.event.KeyEvent.VK_X;
166                 break;
167             case com.sun.star.awt.Key.Y:
168                 keycode = java.awt.event.KeyEvent.VK_Y;
169                 break;
170             case com.sun.star.awt.Key.Z:
171                 keycode = java.awt.event.KeyEvent.VK_Z;
172                 break;
173             case com.sun.star.awt.Key.F1:
174                 keycode = java.awt.event.KeyEvent.VK_F1;
175                 break;
176             case com.sun.star.awt.Key.F2:
177                 keycode = java.awt.event.KeyEvent.VK_F2;
178                 break;
179             case com.sun.star.awt.Key.F3:
180                 keycode = java.awt.event.KeyEvent.VK_F3;
181                 break;
182             case com.sun.star.awt.Key.F4:
183                 keycode = java.awt.event.KeyEvent.VK_F4;
184                 break;
185             case com.sun.star.awt.Key.F5:
186                 keycode = java.awt.event.KeyEvent.VK_F5;
187                 break;
188             case com.sun.star.awt.Key.F6:
189                 keycode = java.awt.event.KeyEvent.VK_F6;
190                 break;
191             case com.sun.star.awt.Key.F7:
192                 keycode = java.awt.event.KeyEvent.VK_F7;
193                 break;
194             case com.sun.star.awt.Key.F8:
195                 keycode = java.awt.event.KeyEvent.VK_F8;
196                 break;
197             case com.sun.star.awt.Key.F9:
198                 keycode = java.awt.event.KeyEvent.VK_F9;
199                 break;
200             case com.sun.star.awt.Key.F10:
201                 keycode = java.awt.event.KeyEvent.VK_F10;
202                 break;
203             case com.sun.star.awt.Key.F11:
204                 keycode = java.awt.event.KeyEvent.VK_F11;
205                 break;
206             case com.sun.star.awt.Key.F12:
207                 keycode = java.awt.event.KeyEvent.VK_F12;
208                 break;
209             case com.sun.star.awt.Key.F13:
210                 keycode = java.awt.event.KeyEvent.VK_F13;
211                 break;
212             case com.sun.star.awt.Key.F14:
213                 keycode = java.awt.event.KeyEvent.VK_F14;
214                 break;
215             case com.sun.star.awt.Key.F15:
216                 keycode = java.awt.event.KeyEvent.VK_F15;
217                 break;
218             case com.sun.star.awt.Key.F16:
219                 keycode = java.awt.event.KeyEvent.VK_F16;
220                 break;
221             case com.sun.star.awt.Key.F17:
222                 keycode = java.awt.event.KeyEvent.VK_F17;
223                 break;
224             case com.sun.star.awt.Key.F18:
225                 keycode = java.awt.event.KeyEvent.VK_F18;
226                 break;
227             case com.sun.star.awt.Key.F19:
228                 keycode = java.awt.event.KeyEvent.VK_F19;
229                 break;
230             case com.sun.star.awt.Key.F20:
231                 keycode = java.awt.event.KeyEvent.VK_F20;
232                 break;
233             case com.sun.star.awt.Key.F21:
234                 keycode = java.awt.event.KeyEvent.VK_F21;
235                 break;
236             case com.sun.star.awt.Key.F22:
237                 keycode = java.awt.event.KeyEvent.VK_F22;
238                 break;
239             case com.sun.star.awt.Key.F23:
240                 keycode = java.awt.event.KeyEvent.VK_F23;
241                 break;
242             case com.sun.star.awt.Key.F24:
243                 keycode = java.awt.event.KeyEvent.VK_F24;
244                 break;
245             case com.sun.star.awt.Key.DOWN:
246                 keycode = java.awt.event.KeyEvent.VK_DOWN;
247                 break;
248             case com.sun.star.awt.Key.UP:
249                 keycode = java.awt.event.KeyEvent.VK_UP;
250                 break;
251             case com.sun.star.awt.Key.LEFT:
252                 keycode = java.awt.event.KeyEvent.VK_LEFT;
253                 break;
254             case com.sun.star.awt.Key.RIGHT:
255                 keycode = java.awt.event.KeyEvent.VK_RIGHT;
256                 break;
257             case com.sun.star.awt.Key.HOME:
258                 keycode = java.awt.event.KeyEvent.VK_HOME;
259                 break;
260             case com.sun.star.awt.Key.END:
261                 keycode = java.awt.event.KeyEvent.VK_END;
262                 break;
263             case com.sun.star.awt.Key.PAGEUP:
264                 keycode = java.awt.event.KeyEvent.VK_PAGE_UP;
265                 break;
266             case com.sun.star.awt.Key.PAGEDOWN:
267                 keycode = java.awt.event.KeyEvent.VK_PAGE_DOWN;
268                 break;
269             case com.sun.star.awt.Key.RETURN:
270                 keycode = java.awt.event.KeyEvent.VK_ENTER;
271                 break;
272             case com.sun.star.awt.Key.ESCAPE:
273                 keycode = java.awt.event.KeyEvent.VK_ESCAPE;
274                 break;
275             case com.sun.star.awt.Key.TAB:
276                 keycode = java.awt.event.KeyEvent.VK_TAB;
277                 break;
278             case com.sun.star.awt.Key.BACKSPACE:
279                 keycode = java.awt.event.KeyEvent.VK_BACK_SPACE;
280                 break;
281             case com.sun.star.awt.Key.SPACE:
282                 keycode = java.awt.event.KeyEvent.VK_SPACE;
283                 break;
284             case com.sun.star.awt.Key.INSERT:
285                 keycode = java.awt.event.KeyEvent.VK_INSERT;
286                 break;
287             case com.sun.star.awt.Key.DELETE:
288                 keycode = java.awt.event.KeyEvent.VK_DELETE;
289                 break;
290             case com.sun.star.awt.Key.ADD:
291                 keycode = java.awt.event.KeyEvent.VK_ADD;
292                 break;
293             case com.sun.star.awt.Key.SUBTRACT:
294                 keycode = java.awt.event.KeyEvent.VK_SUBTRACT;
295                 break;
296             case com.sun.star.awt.Key.MULTIPLY:
297                 keycode = java.awt.event.KeyEvent.VK_MULTIPLY;
298                 break;
299             case com.sun.star.awt.Key.DIVIDE:
300                 keycode = java.awt.event.KeyEvent.VK_DIVIDE;
301                 break;
302             case com.sun.star.awt.Key.POINT:
303                 keycode = java.awt.event.KeyEvent.VK_PERIOD;
304                 break;
305             case com.sun.star.awt.Key.COMMA:
306                 keycode = java.awt.event.KeyEvent.VK_COMMA;
307                 break;
308             case com.sun.star.awt.Key.LESS:
309                 keycode = java.awt.event.KeyEvent.VK_LESS;
310                 break;
311             case com.sun.star.awt.Key.GREATER:
312                 keycode = java.awt.event.KeyEvent.VK_GREATER;
313                 break;
314             case com.sun.star.awt.Key.EQUAL:
315                 keycode = java.awt.event.KeyEvent.VK_EQUALS;
316                 break;
317             case com.sun.star.awt.Key.CUT:
318                 keycode = java.awt.event.KeyEvent.VK_CUT;
319                 break;
320             case com.sun.star.awt.Key.COPY:
321                 keycode = java.awt.event.KeyEvent.VK_COPY;
322                 break;
323             case com.sun.star.awt.Key.PASTE:
324                 keycode = java.awt.event.KeyEvent.VK_PASTE;
325                 break;
326             case com.sun.star.awt.Key.UNDO:
327                 keycode = java.awt.event.KeyEvent.VK_UNDO;
328                 break;
329             case com.sun.star.awt.Key.FIND:
330                 keycode = java.awt.event.KeyEvent.VK_FIND;
331                 break;
332             case com.sun.star.awt.Key.PROPERTIES:
333                 keycode = java.awt.event.KeyEvent.VK_PROPS;
334                 break;
335             case com.sun.star.awt.Key.HELP:
336                 keycode = java.awt.event.KeyEvent.VK_HELP;
337                 break;
338             default:
339         }
340         return keycode;
341     }
342 
343     /*
344     * AccessibleKeyBinding
345     */
346 
347     /** Returns a key binding for this object */
getAccessibleKeyBinding(int i)348     public Object getAccessibleKeyBinding(int i) {
349         try {
350             KeyStroke[] keys = unoAccessibleKeybinding.getAccessibleKeyBinding(i);
351             javax.swing.KeyStroke[] data = new javax.swing.KeyStroke[keys.length];
352             for (int j=0; j < keys.length; j++) {
353                 int keyCode = convertKeyCode(keys[j].KeyCode);
354                 if (keyCode != java.awt.event.KeyEvent.VK_UNDEFINED) {
355                     data[j] = javax.swing.KeyStroke.getKeyStroke(keyCode, convertModifiers(keys[j].Modifiers));
356                 } else {
357                     data[j] = null;
358                 }
359             }
360 
361             if (keys.length == 1) {
362                 return data[0];
363             } else {
364                 return data;
365             }
366         } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
367             return null;
368         } catch (com.sun.star.uno.RuntimeException e) {
369             return null;
370         }
371     }
372 
373     /** Returns the number of key bindings for this object */
getAccessibleKeyBindingCount()374         public int getAccessibleKeyBindingCount() {
375         try {
376             return unoAccessibleKeybinding.getAccessibleKeyBindingCount();
377         } catch (com.sun.star.uno.RuntimeException e) {
378             return 0;
379         }
380     }
381 }
382