summaryrefslogtreecommitdiff
path: root/accessibility/bridge/org/openoffice/java/accessibility
diff options
context:
space:
mode:
Diffstat (limited to 'accessibility/bridge/org/openoffice/java/accessibility')
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java7
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java203
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java12
-rwxr-xr-xaccessibility/bridge/org/openoffice/java/accessibility/makefile.mk5
4 files changed, 107 insertions, 120 deletions
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java
index b799c07a7329..c1f27eb86df0 100644
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java
+++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java
@@ -2,9 +2,9 @@
*
* $RCSfile: AccessibleKeyBinding.java,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: obr $ $Date: 2002-08-23 09:29:13 $
+ * last change: $Author: obr $ $Date: 2002-10-08 06:48:01 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -72,8 +72,7 @@ public class AccessibleKeyBinding extends Object implements javax.accessibility.
public AccessibleKeyBinding(KeyStroke[] keys) {
data = new javax.swing.KeyStroke[keys.length];
-
- for(int i=0; i<keys.length; i++) {
+ for(int i=0; i < keys.length; i++) {
data[i] = javax.swing.KeyStroke.getKeyStroke(
convertKeyCode(keys[i].KeyCode),
convertModifiers(keys[i].Modifiers)
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
index 9aa8525b1f70..0def6dba3f22 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.8 $
+ * $Revision: 1.9 $
*
- * last change: $Author: obr $ $Date: 2002-10-02 16:07:52 $
+ * last change: $Author: obr $ $Date: 2002-10-08 06:48:02 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -80,6 +80,7 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
// This type is needed for conversions from/to uno Any
public static final Type XAccessibleType = new Type(XAccessible.class);
+ public static boolean autoPopulate = true;
java.util.Hashtable objectList = new java.util.Hashtable();
XAccessibilityInformationProvider infoProvider;
@@ -91,27 +92,6 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
// infoProvider = provider;
}
- public class GenericAccessibleParent extends Object implements javax.accessibility.Accessible {
- XAccessibleContext unoObject;
- AccessibleObject wrapperObject;
-
- public GenericAccessibleParent(AccessibleObject o, XAccessibleContext ac) {
- unoObject = ac;
- wrapperObject = o;
- }
-
- public javax.accessibility.AccessibleContext getAccessibleContext() {
- XAccessible xAccessible = unoObject.getAccessibleParent();
- if( xAccessible != null ) {
- AccessibleObject o = AccessibleObjectFactory.this.getAccessibleObject(xAccessible, true, null);
- wrapperObject.setAccessibleParent(o);
- return o;
- }
-
- return null;
- }
- }
-
/** Returns the default accessible object factory */
public static AccessibleObjectFactory getDefault() {
return defaultFactory;
@@ -120,7 +100,7 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
/** Sets a new AccessibleInformationProvider to be used by this factory object */
public void setInformationProvider(XAccessibilityInformationProvider provider) {
infoProvider = provider;
- provider.setGlobalFocusListener(this);
+// provider.setGlobalFocusListener(this);
}
/** Returns the AccessibleInformationProvider currently used by this factory object */
@@ -129,63 +109,62 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
}
public AccessibleObject getAccessibleObject(XAccessible xAccessible, boolean create, Accessible parent) {
- XAccessibleContext xAccessibleContext = null;
+ AccessibleObject o = null;
if(xAccessible != null) {
- // Save the round trip to C++ UNO if possible
- if(xAccessible instanceof XAccessibleContext) {
- xAccessibleContext = (XAccessibleContext) xAccessible;
- } else {
- xAccessibleContext = xAccessible.getAccessibleContext();
+ // Retrieve unique id for the original UNO object to be used as a hash key
+ String oid = UnoRuntime.generateOid(xAccessible);
+
+ // Check if we already have a wrapper object for this context
+ synchronized (objectList) {
+ WeakReference r = (WeakReference) objectList.get(oid);
+ if(r != null) {
+ o = (AccessibleObject) r.get();
+ }
}
- }
- return getAccessibleObject(xAccessibleContext, create, parent);
- }
+ if( o == null && create ) {
+ o = new AccessibleObject(xAccessible, parent);
- public AccessibleObject getAccessibleObject(XAccessibleContext xAccessibleContext, boolean create, Accessible parent) {
- // Ensure that we really got an UNO accessible context
- if(xAccessibleContext == null) {
- if( Build.DEBUG ) {
- System.err.println("No accessible context");
+ // 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.");
+ }
+ }
}
- return null;
}
- // Retrieve unique id for the original UNO object to be used as a hash key
- String oid = UnoRuntime.generateOid(xAccessibleContext);
- AccessibleObject o = null;
+ return o;
+ }
- // Check if we already have a wrapper object for this context
- synchronized (objectList) {
- WeakReference r = (WeakReference) objectList.get(oid);
- if(r != null) {
- o = (AccessibleObject) r.get();
- }
- }
+ public AccessibleUNOComponent createAccessibleContext(XAccessibleContext xAccessibleContext) {
+ AccessibleUNOComponent ac = null;
- if( o == null && create ) {
+ // Ensure that we really got an UNO accessible context
+ if( xAccessibleContext != null ) {
try {
short role = xAccessibleContext.getAccessibleRole();
XAccessibleStateSet xStateSet = null;
switch(role) {
case AccessibleRole.CHECKBOX:
- o = new AccessibleButton(
+ ac = new AccessibleButton(
javax.accessibility.AccessibleRole.CHECK_BOX,
javax.accessibility.AccessibleState.CHECKED,
xAccessibleContext
);
break;
case AccessibleRole.COMBOBOX:
- o = new AccessibleComboBox(xAccessibleContext);
+ ac = new AccessibleComboBox(xAccessibleContext);
break;
case AccessibleRole.LIST:
- o = new AccessibleList(xAccessibleContext);
+ ac = new AccessibleList(xAccessibleContext);
break;
case AccessibleRole.MENUBAR:
case AccessibleRole.POPUPMENU:
- o = new AccessibleContainer(
+ ac = new AccessibleContainer(
AccessibleRoleMap.toAccessibleRole(role),
xAccessibleContext
);
@@ -194,14 +173,24 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
case AccessibleRole.TABLE_CELL:
xStateSet = xAccessibleContext.getAccessibleStateSet();
if( xStateSet != null && ! xStateSet.contains(AccessibleStateType.TRANSIENT)) {
- o = new AccessibleLabel(xAccessibleContext);
+ ac = new AccessibleLabel(xAccessibleContext);
} else {
- o = new AccessibleFixedText(xAccessibleContext);
+ ac = new AccessibleFixedText(
+ javax.accessibility.AccessibleRole.LABEL,
+ xAccessibleContext
+ );
}
break;
+ case AccessibleRole.COLUMNHEADER:
+ case AccessibleRole.ROWHEADER:
+ ac = new AccessibleFixedText(
+ AccessibleRoleMap.toAccessibleRole(role),
+ xAccessibleContext
+ );
+ break;
case AccessibleRole.DIALOG:
case AccessibleRole.FRAME:
- o = new AccessibleFrame(
+ ac = new AccessibleFrame(
AccessibleRoleMap.toAccessibleRole(role),
xAccessibleContext
);
@@ -210,53 +199,53 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
case AccessibleRole.GRAPHIC:
case AccessibleRole.SHAPE:
case AccessibleRole.EMBEDDED_OBJECT:
- o = new AccessibleImage(xAccessibleContext);
+ ac = new AccessibleImage(xAccessibleContext);
break;
case AccessibleRole.LISTITEM:
- o = new AccessibleListItem(xAccessibleContext);
+ ac = new AccessibleListItem(xAccessibleContext);
break;
case AccessibleRole.MENU:
- o = new AccessibleMenu(xAccessibleContext);
+ ac = new AccessibleMenu(xAccessibleContext);
break;
case AccessibleRole.MENUITEM:
- o = new AccessibleMenuItem(xAccessibleContext);
+ ac = new AccessibleMenuItem(xAccessibleContext);
break;
case AccessibleRole.PARAGRAPH:
- o = new AccessibleParagraph(xAccessibleContext);
+ ac = new AccessibleParagraph(xAccessibleContext);
break;
case AccessibleRole.PUSHBUTTON:
- o = new AccessibleButton(
+ ac = new AccessibleButton(
javax.accessibility.AccessibleRole.PUSH_BUTTON,
javax.accessibility.AccessibleState.SELECTED,
xAccessibleContext
);
break;
case AccessibleRole.RADIOBUTTON:
- o = new AccessibleButton(
+ ac = new AccessibleButton(
javax.accessibility.AccessibleRole.RADIO_BUTTON,
javax.accessibility.AccessibleState.CHECKED,
xAccessibleContext
);
break;
case AccessibleRole.SCROLLBAR:
- o = new AccessibleScrollBar(xAccessibleContext);
+ ac = new AccessibleScrollBar(xAccessibleContext);
break;
case AccessibleRole.SEPARATOR:
- o = new AccessibleSeparator(xAccessibleContext);
+ ac = new AccessibleSeparator(xAccessibleContext);
break;
case AccessibleRole.TABLE:
xStateSet = xAccessibleContext.getAccessibleStateSet();
if(xStateSet != null && ! xStateSet.contains(AccessibleStateType.CHILDREN_TRANSIENT)) {
- o = new AccessibleTextTable(xAccessibleContext);
+ ac = new AccessibleTextTable(xAccessibleContext);
} else {
- o = new AccessibleSpreadsheet(xAccessibleContext);
+ ac = new AccessibleSpreadsheet(xAccessibleContext);
}
break;
case AccessibleRole.TEXT:
- o = new AccessibleEditLine(xAccessibleContext);
+ ac = new AccessibleEditLine(xAccessibleContext);
break;
case AccessibleRole.TREE:
- o = new AccessibleTreeList(xAccessibleContext);
+ ac = new AccessibleTreeList(xAccessibleContext);
break;
case AccessibleRole.CANVAS:
case AccessibleRole.DOCUMENT:
@@ -268,6 +257,7 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
case AccessibleRole.LAYEREDPANE:
case AccessibleRole.OPTIONPANE:
case AccessibleRole.PAGETAB:
+ case AccessibleRole.PAGETABLIST:
case AccessibleRole.PANEL:
case AccessibleRole.ROOTPANE:
case AccessibleRole.SCROLLPANE:
@@ -275,7 +265,7 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
case AccessibleRole.STATUSBAR:
case AccessibleRole.TOOLBAR:
case AccessibleRole.WINDOW:
- o = new AccessibleWindow(
+ ac = new AccessibleWindow(
AccessibleRoleMap.toAccessibleRole(role),
xAccessibleContext
);
@@ -285,58 +275,34 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
System.out.println("Unmapped role: " + AccessibleRoleMap.toAccessibleRole(role)
+ " (id = " + role + ")");
}
- o = new AccessibleWindow(
+ ac = 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.");
- }
- }
-
// Register as event listener if possible
AccessibleEventListener listener = null;
- if( o instanceof AccessibleEventListener ) {
- listener = (AccessibleEventListener) o;
+ if( ac instanceof AccessibleEventListener ) {
+ listener = (AccessibleEventListener) ac;
}
/* 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));
-
- // Create generic parent if parent is null
- if( parent == null && o.getAccessibleIndexInParent() != -1 ) {
- parent = new GenericAccessibleParent(o, xAccessibleContext);
- }
-
- // 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);
- }
+ ac.initialize(infoProvider.getAccessibleContextInfo(xAccessibleContext, listener));
}
catch(com.sun.star.uno.RuntimeException e) {
}
}
- if(Build.DEBUG && o == null) {
+ if( Build.DEBUG && ac == null ) {
System.out.println("AccessibleObjectFactory: returning null object");
}
- return o;
+ return ac;
}
/*
public AccessibleObject removeAccessibleObject(XAccessible xAccessible) {
@@ -424,28 +390,49 @@ public class AccessibleObjectFactory implements XGlobalFocusListener {
public void releaseAccessibleObject(AccessibleObject o) {
synchronized (objectList) {
- objectList.remove(o.getObjectId());
+ objectList.remove(o.toString());
if( Build.DEBUG ) {
System.out.println("Object cache now contains " + objectList.size() + " objects.");
}
}
}
+ // Traverses the accessibility hierarchy to ensure global focus event notifications
+ public static void populate(javax.accessibility.AccessibleContext ac) {
+ // ignore objects that have transient state
+ if( ac != null ) {
+ AccessibleStateSet as = ac.getAccessibleStateSet();
+ if( null != as &&
+ !as.contains(javax.accessibility.AccessibleState.TRANSIENT) &&
+ !as.contains(AccessibleStateTypeMap.get(AccessibleStateType.CHILDREN_TRANSIENT))
+ )
+ {
+ int n = ac.getAccessibleChildrenCount();
+ for( int i = 0; i < n; i++ ) {
+ Accessible a = ac.getAccessibleChild(i);
+ if( a != null ) {
+ populate(a.getAccessibleContext());
+ }
+ }
+ }
+ }
+ }
+
/*
* XGlobalFocusListener
*/
- public void focusGained(XAccessibleContext context) {
- AccessibleObject ao = getAccessibleObject(context, true, null);
+ public void focusGained(XAccessible xAccessible) {
+ AccessibleObject ao = getAccessibleObject(xAccessible, true, null);
if( ao != null ) {
- ao.getEventProxy().processFocusGained();
+ ao.processFocusGained();
}
}
- public void focusLost(XAccessibleContext context) {
- AccessibleObject ao = getAccessibleObject(context, false, null);
+ public void focusLost(XAccessible xAccessible) {
+ AccessibleObject ao = getAccessibleObject(xAccessible, false, null);
if( ao != null ) {
- ao.getEventProxy().processFocusLost();
+ ao.processFocusLost();
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java
index d3afce7c0cd0..47ff94a607d9 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.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: obr $ $Date: 2002-10-02 07:05:28 $
+ * last change: $Author: obr $ $Date: 2002-10-08 06:48:02 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -205,15 +205,15 @@ public class AccessibleTextImpl implements javax.accessibility.AccessibleText {
catch(com.sun.star.uno.RuntimeException e) {
if( Build.DEBUG ) {
- AccessibleObject.printDebugString("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")");
- AccessibleObject.printDebugString(e.getMessage());
+ System.err.println("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")");
+ System.err.println(e.getMessage());
}
}
catch(Exception e) {
if( Build.DEBUG ) {
- AccessibleObject.printDebugString("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")");
- AccessibleObject.printDebugString(e.getMessage());
+ System.err.println("Exception caught for getIndexAtPoint(" + point.x + ", " + point.y + ")");
+ System.err.println(e.getMessage());
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk b/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
index 2f6734e7e20f..f4bbbeda478a 100755
--- a/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
+++ b/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.7 $
+# $Revision: 1.8 $
#
-# last change: $Author: obr $ $Date: 2002-10-01 07:16:40 $
+# last change: $Author: obr $ $Date: 2002-10-08 06:48:04 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -102,6 +102,7 @@ JAVAFILES = \
AccessibleTextImpl.java \
AccessibleTextTable.java \
AccessibleTreeList.java \
+ AccessibleUNOComponent.java \
AccessibleWindow.java \
GenericAccessibleEditableText.java \
GenericAccessibleExtendedTable.java \