1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir package util; 24cdf0e10cSrcweir 25cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible; 26cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleComponent; 27cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext; 28cdf0e10cSrcweir import com.sun.star.awt.XWindow; 29cdf0e10cSrcweir import com.sun.star.frame.XController; 30cdf0e10cSrcweir import com.sun.star.frame.XFrame; 31cdf0e10cSrcweir import com.sun.star.frame.XModel; 32cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 33cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 34cdf0e10cSrcweir import com.sun.star.uno.XInterface; 35cdf0e10cSrcweir 36cdf0e10cSrcweir import java.io.PrintWriter; 37cdf0e10cSrcweir 38cdf0e10cSrcweir 39cdf0e10cSrcweir public class AccessibilityTools { 40cdf0e10cSrcweir public static XAccessibleContext SearchedContext = null; 41cdf0e10cSrcweir public static XAccessible SearchedAccessible = null; 42cdf0e10cSrcweir private static boolean debug = false; 43cdf0e10cSrcweir AccessibilityTools()44cdf0e10cSrcweir public AccessibilityTools() { 45cdf0e10cSrcweir //done = false; 46cdf0e10cSrcweir SearchedContext = null; 47cdf0e10cSrcweir } 48cdf0e10cSrcweir getAccessibleObject(XInterface xObject)49cdf0e10cSrcweir public static XAccessible getAccessibleObject(XInterface xObject) { 50cdf0e10cSrcweir return UnoRuntime.queryInterface(XAccessible.class, xObject); 51cdf0e10cSrcweir } 52cdf0e10cSrcweir getCurrentContainerWindow(XMultiServiceFactory msf, XModel xModel)53cdf0e10cSrcweir public static XWindow getCurrentContainerWindow(XMultiServiceFactory msf, 54cdf0e10cSrcweir XModel xModel) { 55cdf0e10cSrcweir return getWindow(msf, xModel, true); 56cdf0e10cSrcweir } 57cdf0e10cSrcweir getCurrentWindow(XMultiServiceFactory msf, XModel xModel)58cdf0e10cSrcweir public static XWindow getCurrentWindow(XMultiServiceFactory msf, 59cdf0e10cSrcweir XModel xModel) { 60cdf0e10cSrcweir return getWindow(msf, xModel, false); 61cdf0e10cSrcweir } 62cdf0e10cSrcweir getWindow(XMultiServiceFactory msf, XModel xModel, boolean containerWindow)63cdf0e10cSrcweir private static XWindow getWindow(XMultiServiceFactory msf, XModel xModel, 64cdf0e10cSrcweir boolean containerWindow) { 65cdf0e10cSrcweir XWindow xWindow = null; 66cdf0e10cSrcweir 67cdf0e10cSrcweir try { 68cdf0e10cSrcweir if (xModel == null) { 69cdf0e10cSrcweir System.out.println("invalid model (==null)"); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir XController xController = xModel.getCurrentController(); 73cdf0e10cSrcweir 74cdf0e10cSrcweir if (xController == null) { 75cdf0e10cSrcweir System.out.println("can't get controller from model"); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir XFrame xFrame = xController.getFrame(); 79cdf0e10cSrcweir 80cdf0e10cSrcweir if (xFrame == null) { 81cdf0e10cSrcweir System.out.println("can't get frame from controller"); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir if (containerWindow) 85cdf0e10cSrcweir xWindow = xFrame.getContainerWindow(); 86cdf0e10cSrcweir else 87cdf0e10cSrcweir xWindow = xFrame.getComponentWindow(); 88cdf0e10cSrcweir 89cdf0e10cSrcweir if (xWindow == null) { 90cdf0e10cSrcweir System.out.println("can't get window from frame"); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir } catch (Exception e) { 93cdf0e10cSrcweir System.out.println("caught exception while getting current window" + e); 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir return xWindow; 97cdf0e10cSrcweir } 98cdf0e10cSrcweir getAccessibleObjectForRole(XAccessible xacc, short role)99cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRole(XAccessible xacc, 100cdf0e10cSrcweir short role) { 101cdf0e10cSrcweir SearchedContext = null; 102cdf0e10cSrcweir SearchedAccessible = null; 103cdf0e10cSrcweir getAccessibleObjectForRole_(xacc, role); 104cdf0e10cSrcweir 105cdf0e10cSrcweir return SearchedContext; 106cdf0e10cSrcweir } 107cdf0e10cSrcweir getAccessibleObjectForRole(XAccessible xacc, short role, boolean ignoreShowing)108cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRole(XAccessible xacc, 109cdf0e10cSrcweir short role, 110cdf0e10cSrcweir boolean ignoreShowing) { 111cdf0e10cSrcweir SearchedContext = null; 112cdf0e10cSrcweir SearchedAccessible = null; 113cdf0e10cSrcweir 114cdf0e10cSrcweir if (ignoreShowing) { 115cdf0e10cSrcweir getAccessibleObjectForRoleIgnoreShowing_(xacc, role); 116cdf0e10cSrcweir } else { 117cdf0e10cSrcweir getAccessibleObjectForRole_(xacc, role); 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120cdf0e10cSrcweir return SearchedContext; 121cdf0e10cSrcweir } 122cdf0e10cSrcweir getAccessibleObjectForRoleIgnoreShowing_(XAccessible xacc, short role)123cdf0e10cSrcweir public static void getAccessibleObjectForRoleIgnoreShowing_(XAccessible xacc, 124cdf0e10cSrcweir short role) { 125cdf0e10cSrcweir XAccessibleContext ac = xacc.getAccessibleContext(); 126cdf0e10cSrcweir 127cdf0e10cSrcweir if (ac.getAccessibleRole() == role) { 128cdf0e10cSrcweir SearchedContext = ac; 129cdf0e10cSrcweir SearchedAccessible = xacc; 130cdf0e10cSrcweir } else { 131cdf0e10cSrcweir int k = ac.getAccessibleChildCount(); 132cdf0e10cSrcweir 133cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 134cdf0e10cSrcweir k = 50; 135cdf0e10cSrcweir } 136cdf0e10cSrcweir 137cdf0e10cSrcweir for (int i = 0; i < k; i++) { 138cdf0e10cSrcweir try { 139cdf0e10cSrcweir getAccessibleObjectForRoleIgnoreShowing_( 140cdf0e10cSrcweir ac.getAccessibleChild(i), role); 141cdf0e10cSrcweir 142cdf0e10cSrcweir if (SearchedContext != null) { 143cdf0e10cSrcweir return; 144cdf0e10cSrcweir } 145cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 146cdf0e10cSrcweir System.out.println("Couldn't get Child"); 147cdf0e10cSrcweir } 148cdf0e10cSrcweir } 149cdf0e10cSrcweir } 150cdf0e10cSrcweir } 151cdf0e10cSrcweir getAccessibleObjectForRole_(XAccessible xacc, short role)152cdf0e10cSrcweir public static void getAccessibleObjectForRole_(XAccessible xacc, 153cdf0e10cSrcweir short role) { 154cdf0e10cSrcweir XAccessibleContext ac = xacc.getAccessibleContext(); 155cdf0e10cSrcweir boolean isShowing = ac.getAccessibleStateSet() 156cdf0e10cSrcweir .contains(com.sun.star.accessibility.AccessibleStateType.SHOWING); 157cdf0e10cSrcweir 158cdf0e10cSrcweir if ((ac.getAccessibleRole() == role) && isShowing) { 159cdf0e10cSrcweir SearchedContext = ac; 160cdf0e10cSrcweir SearchedAccessible = xacc; 161cdf0e10cSrcweir } else { 162cdf0e10cSrcweir int k = ac.getAccessibleChildCount(); 163cdf0e10cSrcweir 164cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 165cdf0e10cSrcweir k = 50; 166cdf0e10cSrcweir } 167cdf0e10cSrcweir 168cdf0e10cSrcweir for (int i = 0; i < k; i++) { 169cdf0e10cSrcweir try { 170cdf0e10cSrcweir getAccessibleObjectForRole_(ac.getAccessibleChild(i), role); 171cdf0e10cSrcweir 172cdf0e10cSrcweir if (SearchedContext != null) { 173cdf0e10cSrcweir return; 174cdf0e10cSrcweir } 175cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 176cdf0e10cSrcweir System.out.println("Couldn't get Child"); 177cdf0e10cSrcweir } 178cdf0e10cSrcweir } 179cdf0e10cSrcweir } 180cdf0e10cSrcweir } 181cdf0e10cSrcweir getAccessibleObjectForRole(XAccessible xacc, short role, String name)182cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRole(XAccessible xacc, 183cdf0e10cSrcweir short role, 184cdf0e10cSrcweir String name) { 185cdf0e10cSrcweir return getAccessibleObjectForRole(xacc, role, name, ""); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir getAccessibleObjectForRole(XAccessible xacc, short role, String name, boolean ignoreShowing)188cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRole(XAccessible xacc, 189cdf0e10cSrcweir short role, 190cdf0e10cSrcweir String name, 191cdf0e10cSrcweir boolean ignoreShowing) { 192cdf0e10cSrcweir if (ignoreShowing) { 193cdf0e10cSrcweir return getAccessibleObjectForRoleIgnoreShowing(xacc, role, name, 194cdf0e10cSrcweir ""); 195cdf0e10cSrcweir } else { 196cdf0e10cSrcweir return getAccessibleObjectForRole(xacc, role, name, ""); 197cdf0e10cSrcweir } 198cdf0e10cSrcweir } 199cdf0e10cSrcweir getAccessibleObjectForRoleIgnoreShowing(XAccessible xacc, short role, String name, String implName)200cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRoleIgnoreShowing(XAccessible xacc, 201cdf0e10cSrcweir short role, 202cdf0e10cSrcweir String name, 203cdf0e10cSrcweir String implName) { 204cdf0e10cSrcweir XAccessibleContext ac = xacc.getAccessibleContext(); 205cdf0e10cSrcweir if ((ac.getAccessibleRole() == role) && 206cdf0e10cSrcweir (ac.getAccessibleName().indexOf(name) > -1) && 207cdf0e10cSrcweir (utils.getImplName(ac).indexOf(implName) > -1)) { 208cdf0e10cSrcweir SearchedAccessible = xacc; 209cdf0e10cSrcweir 210cdf0e10cSrcweir //System.out.println("FOUND the desired component -- "+ ac.getAccessibleName() +isShowing); 211cdf0e10cSrcweir return ac; 212cdf0e10cSrcweir } else { 213cdf0e10cSrcweir int k = ac.getAccessibleChildCount(); 214cdf0e10cSrcweir 215cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 216cdf0e10cSrcweir k = 50; 217cdf0e10cSrcweir } 218cdf0e10cSrcweir 219cdf0e10cSrcweir for (int i = 0; i < k; i++) { 220cdf0e10cSrcweir try { 221cdf0e10cSrcweir XAccessibleContext ac1 = getAccessibleObjectForRoleIgnoreShowing( 222cdf0e10cSrcweir ac.getAccessibleChild(i), 223cdf0e10cSrcweir role, name, implName); 224cdf0e10cSrcweir 225cdf0e10cSrcweir if (ac1 != null) { 226cdf0e10cSrcweir return ac1; 227cdf0e10cSrcweir } 228cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 229cdf0e10cSrcweir System.out.println("Couldn't get Child"); 230cdf0e10cSrcweir } 231cdf0e10cSrcweir } 232cdf0e10cSrcweir } 233cdf0e10cSrcweir 234cdf0e10cSrcweir return null; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir getAccessibleObjectForRole(XAccessible xacc, short role, String name, String implName)237cdf0e10cSrcweir public static XAccessibleContext getAccessibleObjectForRole(XAccessible xacc, 238cdf0e10cSrcweir short role, 239cdf0e10cSrcweir String name, 240cdf0e10cSrcweir String implName) { 241cdf0e10cSrcweir XAccessibleContext ac = xacc.getAccessibleContext(); 242cdf0e10cSrcweir boolean isShowing = ac.getAccessibleStateSet() 243cdf0e10cSrcweir .contains(com.sun.star.accessibility.AccessibleStateType.SHOWING); 244cdf0e10cSrcweir 245cdf0e10cSrcweir // hotfix for i91828: 246cdf0e10cSrcweir // if role to serach is 0 then ignore the role. 247cdf0e10cSrcweir if ( (role == 0 || ac.getAccessibleRole() == role) && 248cdf0e10cSrcweir (ac.getAccessibleName().indexOf(name) > -1) && 249cdf0e10cSrcweir (utils.getImplName(ac).indexOf(implName) > -1) && 250cdf0e10cSrcweir isShowing) { 251cdf0e10cSrcweir SearchedAccessible = xacc; 252cdf0e10cSrcweir //System.out.println("FOUND the desired component -- "+ ac.getAccessibleName() +isShowing); 253cdf0e10cSrcweir return ac; 254cdf0e10cSrcweir } else { 255cdf0e10cSrcweir int k = ac.getAccessibleChildCount(); 256cdf0e10cSrcweir 257cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 258cdf0e10cSrcweir k = 50; 259cdf0e10cSrcweir } 260cdf0e10cSrcweir 261cdf0e10cSrcweir for (int i = 0; i < k; i++) { 262cdf0e10cSrcweir try { 263cdf0e10cSrcweir XAccessibleContext ac1 = getAccessibleObjectForRole( 264cdf0e10cSrcweir ac.getAccessibleChild(i), 265cdf0e10cSrcweir role, name, implName); 266cdf0e10cSrcweir 267cdf0e10cSrcweir if (ac1 != null) { 268cdf0e10cSrcweir return ac1; 269cdf0e10cSrcweir } 270cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 271cdf0e10cSrcweir System.out.println("Couldn't get Child"); 272cdf0e10cSrcweir } 273cdf0e10cSrcweir } 274cdf0e10cSrcweir } 275cdf0e10cSrcweir 276cdf0e10cSrcweir return null; 277cdf0e10cSrcweir } 278cdf0e10cSrcweir 279cdf0e10cSrcweir /** 280cdf0e10cSrcweir * This methods retunrs the <CODE>XAccessibleContext</CODE> of a named Sheet-Cell like "G5".<p> 281cdf0e10cSrcweir * @param xSheetAcc The <CODE>XAccessibleContext</CODE> of a Sheet 282cdf0e10cSrcweir * @param cellName The name of a cell like "A5" 283cdf0e10cSrcweir * @return the <CODE>XAccessiblecontext</CODE> of the named cell 284cdf0e10cSrcweir */ getSheetCell(XAccessibleContext xSheetAcc, String cellName)285cdf0e10cSrcweir public static XAccessibleContext getSheetCell(XAccessibleContext xSheetAcc, String cellName){ 286cdf0e10cSrcweir 287cdf0e10cSrcweir int cellIndex = 0; 288cdf0e10cSrcweir int column =0; 289cdf0e10cSrcweir int charMem = 0; 290cdf0e10cSrcweir for (int n=0; n<cellName.length(); n++){ 291cdf0e10cSrcweir String cha = cellName.substring(n,n+1); 292cdf0e10cSrcweir System.out.println("char: " + cha + " "); 293cdf0e10cSrcweir 294cdf0e10cSrcweir byte[] bytes = cha.getBytes(); 295cdf0e10cSrcweir 296cdf0e10cSrcweir if ((bytes[0] >= 'A') && (bytes[0] <= 'Z')){ 297cdf0e10cSrcweir charMem = bytes[0]-64; 298cdf0e10cSrcweir column++; 299cdf0e10cSrcweir if ( column == 2 ){ 300cdf0e10cSrcweir cellIndex += charMem * 26; 301cdf0e10cSrcweir } 302cdf0e10cSrcweir cellIndex= cellIndex+ (bytes[0]-65); 303cdf0e10cSrcweir } else { 304cdf0e10cSrcweir String sNumb = cellName.substring(n, cellName.length()); 305cdf0e10cSrcweir int iNumb = new Integer(0).valueOf(sNumb).intValue(); 306cdf0e10cSrcweir cellIndex += (iNumb-1) * 256; 307cdf0e10cSrcweir System.out.println("numb:" + (iNumb-1) * 256); 308cdf0e10cSrcweir } 309cdf0e10cSrcweir 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir //System.out.println("cellName: " + cellName + " cellIndex: " + cellIndex); 313cdf0e10cSrcweir 314cdf0e10cSrcweir try { 315cdf0e10cSrcweir XAccessibleContext ac = xSheetAcc.getAccessibleChild(cellIndex).getAccessibleContext(); 316cdf0e10cSrcweir System.out.println(ac.getAccessibleRole() + "," + 317cdf0e10cSrcweir ac.getAccessibleName() + "(" + 318cdf0e10cSrcweir ac.getAccessibleDescription() + "):" + 319cdf0e10cSrcweir utils.getImplName(ac)); 320cdf0e10cSrcweir 321cdf0e10cSrcweir return ac; 322cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException ex) { 323cdf0e10cSrcweir System.out.println("ERROR: could not get child at index " + cellIndex +"': " + ex.toString()); 324cdf0e10cSrcweir return null; 325cdf0e10cSrcweir } 326cdf0e10cSrcweir } 327cdf0e10cSrcweir printAccessibleTree(PrintWriter log, XAccessible xacc, boolean debugIsActive)328cdf0e10cSrcweir public static void printAccessibleTree(PrintWriter log, XAccessible xacc, boolean debugIsActive) { 329cdf0e10cSrcweir debug = debugIsActive; 330cdf0e10cSrcweir if (debug) printAccessibleTree(log, xacc, ""); 331cdf0e10cSrcweir } 332cdf0e10cSrcweir printAccessibleTree(PrintWriter log, XAccessible xacc)333cdf0e10cSrcweir public static void printAccessibleTree(PrintWriter log, XAccessible xacc) { 334cdf0e10cSrcweir printAccessibleTree(log, xacc, ""); 335cdf0e10cSrcweir } 336cdf0e10cSrcweir printAccessibleTree(PrintWriter log, XAccessible xacc, String indent)337cdf0e10cSrcweir protected static void printAccessibleTree(PrintWriter log, 338cdf0e10cSrcweir XAccessible xacc, String indent) { 339cdf0e10cSrcweir 340cdf0e10cSrcweir XAccessibleContext ac = xacc.getAccessibleContext(); 341cdf0e10cSrcweir 342cdf0e10cSrcweir logging(log,indent + ac.getAccessibleRole() + "," + 343cdf0e10cSrcweir ac.getAccessibleName() + "(" + 344cdf0e10cSrcweir ac.getAccessibleDescription() + "):" + 345cdf0e10cSrcweir utils.getImplName(ac)); 346cdf0e10cSrcweir 347cdf0e10cSrcweir XAccessibleComponent aComp = (XAccessibleComponent) UnoRuntime.queryInterface( 348cdf0e10cSrcweir XAccessibleComponent.class, xacc); 349cdf0e10cSrcweir 350cdf0e10cSrcweir if (aComp != null) { 351cdf0e10cSrcweir String bounds = "(" + aComp.getBounds().X + "," + 352cdf0e10cSrcweir aComp.getBounds().Y + ")" + " (" + 353cdf0e10cSrcweir aComp.getBounds().Width + "," + 354cdf0e10cSrcweir aComp.getBounds().Height + ")"; 355cdf0e10cSrcweir bounds = "The boundary Rectangle is " + bounds; 356cdf0e10cSrcweir logging(log,indent + indent + bounds); 357cdf0e10cSrcweir } 358cdf0e10cSrcweir 359cdf0e10cSrcweir boolean isShowing = ac.getAccessibleStateSet() 360cdf0e10cSrcweir .contains(com.sun.star.accessibility.AccessibleStateType.SHOWING); 361cdf0e10cSrcweir logging(log,indent + indent + "StateType contains SHOWING: " + 362cdf0e10cSrcweir isShowing); 363cdf0e10cSrcweir 364cdf0e10cSrcweir int k = ac.getAccessibleChildCount(); 365cdf0e10cSrcweir 366cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 367cdf0e10cSrcweir k = 50; 368cdf0e10cSrcweir } 369cdf0e10cSrcweir 370cdf0e10cSrcweir for (int i = 0; i < k; i++) { 371cdf0e10cSrcweir try { 372cdf0e10cSrcweir printAccessibleTree(log, ac.getAccessibleChild(i), 373cdf0e10cSrcweir indent + " "); 374cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 375cdf0e10cSrcweir System.out.println("Couldn't get Child"); 376cdf0e10cSrcweir } 377cdf0e10cSrcweir } 378cdf0e10cSrcweir 379cdf0e10cSrcweir if (ac.getAccessibleChildCount() > 100) { 380cdf0e10cSrcweir k = ac.getAccessibleChildCount(); 381cdf0e10cSrcweir 382cdf0e10cSrcweir int st = ac.getAccessibleChildCount() - 50; 383cdf0e10cSrcweir logging(log,indent + " " + " ...... [skipped] ......"); 384cdf0e10cSrcweir 385cdf0e10cSrcweir for (int i = st; i < k; i++) { 386cdf0e10cSrcweir try { 387cdf0e10cSrcweir printAccessibleTree(log, ac.getAccessibleChild(i), 388cdf0e10cSrcweir indent + " "); 389cdf0e10cSrcweir } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 390cdf0e10cSrcweir System.out.println("Couldn't get Child"); 391cdf0e10cSrcweir } 392cdf0e10cSrcweir } 393cdf0e10cSrcweir } 394cdf0e10cSrcweir } 395cdf0e10cSrcweir accessibleToString(Object AC)396cdf0e10cSrcweir public static String accessibleToString(Object AC) { 397cdf0e10cSrcweir XAccessibleContext xAC = (XAccessibleContext) UnoRuntime.queryInterface( 398cdf0e10cSrcweir XAccessibleContext.class, AC); 399cdf0e10cSrcweir 400cdf0e10cSrcweir if (xAC != null) { 401cdf0e10cSrcweir return "" + xAC.getAccessibleRole() + "," + 402cdf0e10cSrcweir xAC.getAccessibleName() + "(" + 403cdf0e10cSrcweir xAC.getAccessibleDescription() + "):"; 404cdf0e10cSrcweir } 405cdf0e10cSrcweir 406cdf0e10cSrcweir XAccessible xA = (XAccessible) UnoRuntime.queryInterface( 407cdf0e10cSrcweir XAccessible.class, AC); 408cdf0e10cSrcweir 409cdf0e10cSrcweir if (xA == null) { 410cdf0e10cSrcweir return "(Not supported)"; 411cdf0e10cSrcweir } 412cdf0e10cSrcweir 413cdf0e10cSrcweir xAC = xA.getAccessibleContext(); 414cdf0e10cSrcweir 415cdf0e10cSrcweir return "" + xAC.getAccessibleRole() + "," + xAC.getAccessibleName() + 416cdf0e10cSrcweir "(" + xAC.getAccessibleDescription() + ")"; 417cdf0e10cSrcweir } 418cdf0e10cSrcweir equals(XAccessible c1, XAccessible c2)419cdf0e10cSrcweir public static boolean equals(XAccessible c1, XAccessible c2) { 420cdf0e10cSrcweir if ((c1 == null) || (c2 == null)) { 421cdf0e10cSrcweir return c1 == c2; 422cdf0e10cSrcweir } 423cdf0e10cSrcweir 424cdf0e10cSrcweir return AccessibilityTools.equals(c1.getAccessibleContext(), 425cdf0e10cSrcweir c2.getAccessibleContext()); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir equals(XAccessibleContext c1, XAccessibleContext c2)428cdf0e10cSrcweir public static boolean equals(XAccessibleContext c1, XAccessibleContext c2) { 429cdf0e10cSrcweir if ((c1 == null) || (c2 == null)) { 430cdf0e10cSrcweir return c1 == c2; 431cdf0e10cSrcweir } 432cdf0e10cSrcweir 433cdf0e10cSrcweir if (c1.getAccessibleRole() != c2.getAccessibleRole()) { 434cdf0e10cSrcweir return false; 435cdf0e10cSrcweir } 436cdf0e10cSrcweir 437cdf0e10cSrcweir if (!c1.getAccessibleName().equals(c2.getAccessibleName())) { 438cdf0e10cSrcweir return false; 439cdf0e10cSrcweir } 440cdf0e10cSrcweir 441cdf0e10cSrcweir if (!c1.getAccessibleDescription() 442cdf0e10cSrcweir .equals(c2.getAccessibleDescription())) { 443cdf0e10cSrcweir return false; 444cdf0e10cSrcweir } 445cdf0e10cSrcweir 446cdf0e10cSrcweir if (c1.getAccessibleChildCount() != c2.getAccessibleChildCount()) { 447cdf0e10cSrcweir return false; 448cdf0e10cSrcweir } 449cdf0e10cSrcweir 450cdf0e10cSrcweir return AccessibilityTools.equals(c1.getAccessibleParent(), 451cdf0e10cSrcweir c2.getAccessibleParent()); 452cdf0e10cSrcweir } 453cdf0e10cSrcweir logging(PrintWriter log, String content)454cdf0e10cSrcweir private static void logging(PrintWriter log, String content){ 455cdf0e10cSrcweir if (debug) log.println(content); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir }