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