diff options
author | Oliver Braun <obr@openoffice.org> | 2002-10-02 06:05:28 +0000 |
---|---|---|
committer | Oliver Braun <obr@openoffice.org> | 2002-10-02 06:05:28 +0000 |
commit | 8bc42b16f12f6c96b0b2b9946d3136dd19224dfc (patch) | |
tree | dac34a01586149691550538fe1d5fc5880f182db /accessibility | |
parent | 5bce9ba31d046978bf177a8c032370ffc0f27520 (diff) |
#103705#, #103789# removal of unnecessary synchronizing and reorganization of AccessibleComponent info
Diffstat (limited to 'accessibility')
-rw-r--r-- | accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java | 306 | ||||
-rw-r--r-- | accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java | 52 |
2 files changed, 193 insertions, 165 deletions
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java index ea1f62e37915..d783beffb3c1 100644 --- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java +++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java @@ -2,9 +2,9 @@ * * $RCSfile: AccessibleObjectFactory.java,v $ * - * $Revision: 1.6 $ + * $Revision: 1.7 $ * - * last change: $Author: obr $ $Date: 2002-09-18 11:20:15 $ + * last change: $Author: obr $ $Date: 2002-10-02 07:05:27 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -69,8 +69,10 @@ import javax.accessibility.AccessibleStateSet; import com.sun.star.uno.*; import drafts.com.sun.star.accessibility.AccessibleRole; +import drafts.com.sun.star.accessibility.AccessibleStateType; import drafts.com.sun.star.accessibility.XAccessible; import drafts.com.sun.star.accessibility.XAccessibleContext; +import drafts.com.sun.star.accessibility.XAccessibleStateSet; /** */ @@ -158,165 +160,171 @@ public class AccessibleObjectFactory { } if( o == null && create ) { - AccessibleContextInfo info = infoProvider.getAccessibleContextInfo(xAccessibleContext); - - switch(info.Role) { - case AccessibleRole.CHECKBOX: - o = new AccessibleButton( - javax.accessibility.AccessibleRole.CHECK_BOX, - javax.accessibility.AccessibleState.CHECKED, - xAccessibleContext + try { + short role = xAccessibleContext.getAccessibleRole(); + XAccessibleStateSet xStateSet = null; + + switch(role) { + case AccessibleRole.CHECKBOX: + o = new AccessibleButton( + javax.accessibility.AccessibleRole.CHECK_BOX, + javax.accessibility.AccessibleState.CHECKED, + xAccessibleContext + ); + break; + case AccessibleRole.COMBOBOX: + o = new AccessibleComboBox(xAccessibleContext); + break; + case AccessibleRole.LIST: + o = new AccessibleList(xAccessibleContext); + break; + case AccessibleRole.MENUBAR: + case AccessibleRole.POPUPMENU: + o = new AccessibleContainer( + AccessibleRoleMap.toAccessibleRole(role), + xAccessibleContext ); - break; - case AccessibleRole.COMBOBOX: - o = new AccessibleComboBox(xAccessibleContext); - break; - case AccessibleRole.LIST: - o = new AccessibleList(xAccessibleContext); - break; - case AccessibleRole.MENUBAR: - case AccessibleRole.POPUPMENU: - o = new AccessibleContainer( - AccessibleRoleMap.toAccessibleRole(info.Role), - xAccessibleContext - ); - break; - case AccessibleRole.LABEL: - case AccessibleRole.TABLE_CELL: - if((info.States & AccessibleState.TRANSIENT) != 0) { - o = new AccessibleFixedText(info.IndexInParent, xAccessibleContext); - } else { - o = new AccessibleLabel(xAccessibleContext); - } - break; - case AccessibleRole.DIALOG: - case AccessibleRole.FRAME: - o = new AccessibleFrame( - AccessibleRoleMap.toAccessibleRole(info.Role), - xAccessibleContext - ); - break; - case AccessibleRole.ICON: - case AccessibleRole.GRAPHIC: - case AccessibleRole.SHAPE: - case AccessibleRole.EMBEDDED_OBJECT: - o = new AccessibleImage(xAccessibleContext); - break; - case AccessibleRole.LISTITEM: - o = new AccessibleListItem(xAccessibleContext); - break; - case AccessibleRole.MENU: - o = new AccessibleMenu(xAccessibleContext); - break; - case AccessibleRole.MENUITEM: - o = new AccessibleMenuItem(xAccessibleContext); - break; - case AccessibleRole.PARAGRAPH: - o = new AccessibleParagraph(xAccessibleContext); - break; - case AccessibleRole.PUSHBUTTON: - o = new AccessibleButton( - javax.accessibility.AccessibleRole.PUSH_BUTTON, - javax.accessibility.AccessibleState.SELECTED, - xAccessibleContext + break; + case AccessibleRole.LABEL: + case AccessibleRole.TABLE_CELL: + xStateSet = xAccessibleContext.getAccessibleStateSet(); + if( xStateSet != null && ! xStateSet.contains(AccessibleStateType.TRANSIENT)) { + o = new AccessibleLabel(xAccessibleContext); + } else { + o = new AccessibleFixedText(xAccessibleContext); + } + break; + case AccessibleRole.DIALOG: + case AccessibleRole.FRAME: + o = new AccessibleFrame( + AccessibleRoleMap.toAccessibleRole(role), + xAccessibleContext ); - break; - case AccessibleRole.RADIOBUTTON: - o = new AccessibleButton( - javax.accessibility.AccessibleRole.RADIO_BUTTON, - javax.accessibility.AccessibleState.CHECKED, - xAccessibleContext + break; + case AccessibleRole.ICON: + case AccessibleRole.GRAPHIC: + case AccessibleRole.SHAPE: + case AccessibleRole.EMBEDDED_OBJECT: + o = new AccessibleImage(xAccessibleContext); + break; + case AccessibleRole.LISTITEM: + o = new AccessibleListItem(xAccessibleContext); + break; + case AccessibleRole.MENU: + o = new AccessibleMenu(xAccessibleContext); + break; + case AccessibleRole.MENUITEM: + o = new AccessibleMenuItem(xAccessibleContext); + break; + case AccessibleRole.PARAGRAPH: + o = new AccessibleParagraph(xAccessibleContext); + break; + case AccessibleRole.PUSHBUTTON: + o = new AccessibleButton( + javax.accessibility.AccessibleRole.PUSH_BUTTON, + javax.accessibility.AccessibleState.SELECTED, + xAccessibleContext + ); + break; + case AccessibleRole.RADIOBUTTON: + o = new AccessibleButton( + javax.accessibility.AccessibleRole.RADIO_BUTTON, + javax.accessibility.AccessibleState.CHECKED, + xAccessibleContext + ); + break; + case AccessibleRole.SCROLLBAR: + o = new AccessibleScrollBar(xAccessibleContext); + break; + case AccessibleRole.SEPARATOR: + o = new AccessibleSeparator(xAccessibleContext); + break; + case AccessibleRole.TABLE: + xStateSet = xAccessibleContext.getAccessibleStateSet(); + if(xStateSet != null && ! xStateSet.contains(AccessibleStateType.CHILDREN_TRANSIENT)) { + o = new AccessibleTextTable(xAccessibleContext); + } else { + o = new AccessibleSpreadsheet(xAccessibleContext); + } + break; + case AccessibleRole.TEXT: + o = new AccessibleEditLine(xAccessibleContext); + break; + case AccessibleRole.TREE: + o = new AccessibleTreeList(xAccessibleContext); + break; + case AccessibleRole.CANVAS: + case AccessibleRole.DOCUMENT: + case AccessibleRole.ENDNOTE: + case AccessibleRole.FILLER: + case AccessibleRole.FOOTER: + case AccessibleRole.FOOTNOTE: + case AccessibleRole.HEADER: + case AccessibleRole.LAYEREDPANE: + case AccessibleRole.OPTIONPANE: + case AccessibleRole.PAGETAB: + case AccessibleRole.PANEL: + case AccessibleRole.ROOTPANE: + case AccessibleRole.SCROLLPANE: + case AccessibleRole.SPLITPANE: + case AccessibleRole.STATUSBAR: + case AccessibleRole.TOOLBAR: + case AccessibleRole.WINDOW: + o = new AccessibleWindow( + AccessibleRoleMap.toAccessibleRole(role), + xAccessibleContext ); - break; - case AccessibleRole.SCROLLBAR: - o = new AccessibleScrollBar(xAccessibleContext); - break; - case AccessibleRole.SEPARATOR: - o = new AccessibleSeparator(xAccessibleContext); - break; - case AccessibleRole.TABLE: - if((info.States & AccessibleState.CHILDREN_TRANSIENT) != 0) { - o = new AccessibleSpreadsheet(xAccessibleContext); - } else { - o = new AccessibleTextTable(xAccessibleContext); - } - break; - case AccessibleRole.TEXT: - o = new AccessibleEditLine(xAccessibleContext); - break; - case AccessibleRole.TREE: - o = new AccessibleTreeList(xAccessibleContext); - break; - case AccessibleRole.CANVAS: - case AccessibleRole.DOCUMENT: - case AccessibleRole.ENDNOTE: - case AccessibleRole.FILLER: - case AccessibleRole.FOOTER: - case AccessibleRole.FOOTNOTE: - case AccessibleRole.HEADER: - case AccessibleRole.LAYEREDPANE: - case AccessibleRole.OPTIONPANE: - case AccessibleRole.PAGETAB: - case AccessibleRole.PANEL: - case AccessibleRole.ROOTPANE: - case AccessibleRole.SCROLLPANE: - case AccessibleRole.SPLITPANE: - case AccessibleRole.STATUSBAR: - case AccessibleRole.TOOLBAR: - case AccessibleRole.WINDOW: - o = new AccessibleWindow( - AccessibleRoleMap.toAccessibleRole(info.Role), - xAccessibleContext - ); - break; - default: - if( Build.DEBUG) { - System.out.println("Unmapped role: " + AccessibleRoleMap.toAccessibleRole(info.Role) - + " (id = " + info.Role + ")"); + break; + default: + if( Build.DEBUG) { + System.out.println("Unmapped role: " + AccessibleRoleMap.toAccessibleRole(role) + + " (id = " + role + ")"); + } + o = new AccessibleWindow( + AccessibleRoleMap.toAccessibleRole(role), + xAccessibleContext + ); + break; + } + + // Add the newly created object to the cache list + synchronized (objectList) { + objectList.put(oid, new WeakReference(o)); + if( Build.DEBUG ) { + // System.out.println("Object cache now contains " + objectList.size() + " objects."); } - o = new AccessibleWindow( - AccessibleRoleMap.toAccessibleRole(info.Role), - xAccessibleContext - ); - break; - } + } - // Add the newly created object to the cache list - synchronized (objectList) { - objectList.put(oid, new WeakReference(o)); - if( Build.DEBUG ) { -// System.out.println("Object cache now contains " + objectList.size() + " objects."); + // Register as event listener if possible + AccessibleEventListener listener = null; + if( o instanceof AccessibleEventListener ) { + listener = (AccessibleEventListener) o; } - } - // Register as event listener if possible - AccessibleEventListener listener = null; - if(o instanceof AccessibleEventListener && (info.States & AccessibleState.TRANSIENT) == 0) { - listener = (AccessibleEventListener) o; - } + /* The accessible event broadcaster will never be removed by a removeEventListener + * call. This requires that the UNO accessibility objects get activly destructed + * using dispose(). + */ + o.initialize(infoProvider.getAccessibleContextInfo(xAccessibleContext, listener)); - /* The accessible event broadcaster will never be removed by a removeEventListener - * call. This requires that the UNO accessibility objects get activly destructed - * using dispose(). - */ - synchronized (o) { - o.initialize(infoProvider.getAccessibleComponentInfo(xAccessibleContext, listener)); - } + // Create generic parent if parent is null + if( parent == null && o.getAccessibleIndexInParent() != -1 ) { + parent = new GenericAccessibleParent(o, xAccessibleContext); + } - // Create generic parent if parent is null - if( parent == null && info.IndexInParent != -1 ) { - parent = new GenericAccessibleParent(o, xAccessibleContext); - } + // Finaly set accessible parent object + if( parent != null ) { + o.setAccessibleParent(parent); + } - // Finaly set accessible parent object - if( parent != null ) { - o.setAccessibleParent(parent); + // Add the child to the internal list if parent is AccessibleWindow + if( parent instanceof AccessibleWindow ) { + AccessibleWindow w = (AccessibleWindow) parent; + w.addAccessibleChild(o); + } } - // Add the child to the internal list if parent is AccessibleWindow - if( ((info.States & AccessibleState.CHILDREN_TRANSIENT) == 0) && (parent instanceof AccessibleWindow) ) { - AccessibleWindow w = (AccessibleWindow) parent; - w.addAccessibleChild(o); + catch(com.sun.star.uno.RuntimeException e) { } } diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java index 04e6e1aca091..d3afce7c0cd0 100644 --- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java +++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java @@ -2,9 +2,9 @@ * * $RCSfile: AccessibleTextImpl.java,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: obr $ $Date: 2002-10-01 07:16:39 $ + * last change: $Author: obr $ $Date: 2002-10-02 07:05:28 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -97,6 +97,8 @@ public class AccessibleTextImpl implements javax.accessibility.AccessibleText { if( unoAccessibleText != null ) { text = unoAccessibleText.getText(); + } else { + text = ""; } } @@ -118,7 +120,7 @@ public class AccessibleTextImpl implements javax.accessibility.AccessibleText { switch (part) { case AccessibleText.CHARACTER: - start = index = 1; + start = index + 1; end = index + 2; break; case AccessibleText.WORD: @@ -195,8 +197,24 @@ public class AccessibleTextImpl implements javax.accessibility.AccessibleText { public int getIndexAtPoint(java.awt.Point point) { int ret = -1; - if( unoAccessibleText != null ) { - ret = unoAccessibleText.getIndexAtPoint(new Point( point.x, point.y )); + try { + if( unoAccessibleText != null ) { + ret = unoAccessibleText.getIndexAtPoint(new Point( point.x, point.y )); + } + } + + catch(com.sun.star.uno.RuntimeException e) { + if( Build.DEBUG ) { + AccessibleObject.printDebugString("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")"); + AccessibleObject.printDebugString(e.getMessage()); + } + } + + catch(Exception e) { + if( Build.DEBUG ) { + AccessibleObject.printDebugString("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")"); + AccessibleObject.printDebugString(e.getMessage()); + } } return ret; @@ -302,19 +320,21 @@ public class AccessibleTextImpl implements javax.accessibility.AccessibleText { /** Determines the bounding box of the character at the given index into the string */ public java.awt.Rectangle getCharacterBounds(int index) { - try { - Rectangle unoRect = unoAccessibleText.getCharacterBounds(index); - return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height); - } + if( index < text.length() ) { + try { + Rectangle unoRect = unoAccessibleText.getCharacterBounds(index); + return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height); + } - catch ( com.sun.star.lang.IndexOutOfBoundsException exception ) { - // FIXME: The java AccessBridge currently does not handle such exceptions gracefully -// throw new IndexOutOfBoundsException( exception.getMessage() ); - return null; - } + catch ( com.sun.star.lang.IndexOutOfBoundsException exception ) { + // FIXME: The java AccessBridge currently does not handle such exceptions gracefully + // throw new IndexOutOfBoundsException( exception.getMessage() ); + } - catch ( NullPointerException e ) { - return null; + catch ( NullPointerException e ) { + } } + + return new java.awt.Rectangle(); } } |