summaryrefslogtreecommitdiff
path: root/accessibility
diff options
context:
space:
mode:
authorOliver Braun <obr@openoffice.org>2002-08-08 13:12:46 +0000
committerOliver Braun <obr@openoffice.org>2002-08-08 13:12:46 +0000
commit64832d007ed528db12299aae6e1f2a5d7231eb73 (patch)
tree42a3d443ab468c4783f2ae691dc46a62184fcd1b /accessibility
parent1768b6cf61ed05738b66c9fdf53077754aa44c65 (diff)
#100467# initial release
Diffstat (limited to 'accessibility')
-rwxr-xr-xaccessibility/bridge/org/openoffice/accessibility/AccessBridge.java274
-rwxr-xr-xaccessibility/bridge/org/openoffice/accessibility/makefile.mk89
-rwxr-xr-xaccessibility/bridge/org/openoffice/accessibility/manifest1
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java362
-rwxr-xr-xaccessibility/bridge/org/openoffice/java/accessibility/makefile.mk145
5 files changed, 871 insertions, 0 deletions
diff --git a/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java b/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
new file mode 100755
index 000000000000..a661bffc93fd
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
@@ -0,0 +1,274 @@
+/*************************************************************************
+ *
+ * $RCSfile: AccessBridge.java,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: obr $ $Date: 2002-08-08 14:10:17 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+
+package org.openoffice.accessibility;
+
+
+import com.sun.star.awt.XTopWindow;
+import com.sun.star.awt.XWindow;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.lang.XSingleServiceFactory;
+import com.sun.star.registry.*;
+import com.sun.star.uno.*;
+import com.sun.star.comp.loader.FactoryHelper;
+
+import org.openoffice.accessibility.internal.*;
+
+import drafts.com.sun.star.accessibility.XAccessible;
+import drafts.com.sun.star.accessibility.bridge.XAccessibleTopWindowMap;
+
+import javax.accessibility.Accessible;
+import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
+
+
+public class AccessBridge {
+
+ static private final boolean DEBUG = true;
+
+ static public class _AccessBridge implements XAccessibleTopWindowMap {
+
+ static private final String _serviceName = "drafts.com.sun.star.accessibility.bridge.AccessBridge";
+ private XMultiServiceFactory _xMultiServiceFactory;
+
+ private java.util.Hashtable frameMap = null;
+ private Method registerVirtualFrame = null;
+ private Method revokeVirtualFrame = null;
+
+ public _AccessBridge(XMultiServiceFactory xMultiServiceFactory) {
+ _xMultiServiceFactory = xMultiServiceFactory;
+
+ frameMap = new java.util.Hashtable();
+
+ // On Windows all native frames must be registered to the access bridge. Therefor
+ // the bridge exports two methods that we try to find here.
+ String os = (String) System.getProperty("os.name");
+ if(os.startsWith("Windows")) {
+ try {
+ Class bridge = Class.forName("com.sun.java.accessibility.AccessBridge");
+ Class[] parameterTypes = { javax.accessibility.Accessible.class, Integer.class };
+
+ if(bridge != null) {
+ registerVirtualFrame = bridge.getMethod("registerVirtualFrame", parameterTypes);
+ revokeVirtualFrame = bridge.getMethod("revokeVirtualFrame", parameterTypes);
+ }
+ }
+
+ catch(NoSuchMethodException e) {
+ System.err.println("ERROR: incompatible AccessBridge found: " + e.getMessage());
+
+ // Forward this exception to UNO to indicate that the service will not work correctly.
+ throw new com.sun.star.uno.RuntimeException("incompatible AccessBridge class: " + e.getMessage());
+ }
+
+ catch(java.lang.SecurityException e) {
+ System.err.println("ERROR: no access to AccessBridge: " + e.getMessage());
+
+ // Forward this exception to UNO to indicate that the service will not work correctly.
+ throw new com.sun.star.uno.RuntimeException("Security exception caught: " + e.getMessage());
+ }
+
+ catch(ClassNotFoundException e) {
+ // This is quite normal on
+ }
+ }
+ }
+
+ /*
+ * XAccessibleNativeFrameMap
+ */
+
+ public void registerAccessibleNativeFrame(Object any, XAccessible xAccessible, XTopWindow xTopWindow ){
+ try {
+ Integer handle = new Integer(AnyConverter.toInt(any));
+
+ // Add the window fake object as top window listener to receive activate/deactivate events
+ WindowFake w = new WindowFake(xAccessible);
+ xTopWindow.addTopWindowListener(w);
+
+ if(DEBUG)
+ System.out.println( "register native frame: " + handle );
+
+ // Remember the accessible object associated to this frame
+ synchronized(frameMap) {
+ frameMap.put(handle, w);
+ }
+
+ // If running on Windows, register this frame to the access bridge
+ if(registerVirtualFrame != null) {
+ Object[] args = { w, handle};
+
+ try {
+ registerVirtualFrame.invoke(null, args);
+ }
+
+ catch(IllegalAccessException e) {
+ System.err.println("IllegalAccessException caught: " + e.getMessage());
+ }
+
+ catch(IllegalArgumentException e) {
+ System.err.println("IllegalArgumentException caught: " + e.getMessage());
+ }
+
+ catch(InvocationTargetException e) {
+ System.err.println("InvokationTargetException caught: " + e.getMessage());
+ }
+ }
+ }
+
+ catch(com.sun.star.lang.IllegalArgumentException exception) {
+ System.err.println("IllegalArgumentException caught: " + exception.getMessage());
+ }
+ }
+
+ public void revokeAccessibleNativeFrame(Object any) {
+ try {
+ Integer handle = new Integer(AnyConverter.toInt(any));
+ WindowFake w;
+
+ // Remember the accessible object associated to this frame
+ synchronized(frameMap) {
+ w = (WindowFake) frameMap.remove(handle);
+ }
+
+ if(w != null) {
+ if(DEBUG)
+ System.out.println( "revoke native frame: " + handle );
+
+ // If running on Windows, register this frame to the access bridge
+ if(revokeVirtualFrame != null) {
+ Object[] args = { w, handle };
+
+ try {
+ revokeVirtualFrame.invoke(null, args);
+ }
+
+ catch(IllegalAccessException e) {
+ System.err.println("IllegalAccessException caught: " + e.getMessage());
+ }
+
+ catch(IllegalArgumentException e) {
+ System.err.println("IllegalArgumentException caught: " + e.getMessage());
+ }
+
+ catch(InvocationTargetException e) {
+ System.err.println("InvokationTargetException caught: " + e.getMessage());
+ }
+ }
+ }
+ }
+
+ catch(com.sun.star.lang.IllegalArgumentException exception) {
+ System.err.println("IllegalArgumentException caught: " + exception.getMessage());
+ }
+ }
+ }
+
+ public static XSingleServiceFactory __getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey) {
+ XSingleServiceFactory xSingleServiceFactory = null;
+
+ if (implName.equals(AccessBridge.class.getName()) ) {
+
+ // Initialize toolkit to register at Java <-> Windows access bridge
+ java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
+
+ if(DEBUG) {
+ try {
+ java.io.PrintStream log = new java.io.PrintStream( new java.io.FileOutputStream( "AccessBridge.log" ) );
+ System.setOut( log );
+ System.setErr( log );
+ }
+
+ catch(java.io.FileNotFoundException e) {
+ }
+ }
+
+ try {
+ XInterface instance = (XInterface) multiFactory.createInstance("org.openoffice.accessibility.internal.RemoteAccessBridge");
+
+ if(instance != null) {
+ WindowFake.infoProvider = (XAccessibilityInformationProvider)
+ UnoRuntime.queryInterface(XAccessibilityInformationProvider.class, instance);
+
+ if(WindowFake.infoProvider == null) {
+ System.err.println("InfoProvider does not implement XAccessibleInformationProvider.");
+ }
+ } else {
+ System.err.println("InfoProvider service not found.");
+ }
+ }
+
+ catch (com.sun.star.uno.Exception e) {
+ System.err.println(e.getMessage());
+ }
+
+ xSingleServiceFactory = FactoryHelper.getServiceFactory(_AccessBridge.class, _AccessBridge._serviceName, multiFactory, regKey);
+ }
+
+ return xSingleServiceFactory;
+ }
+
+ public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
+ return FactoryHelper.writeRegistryServiceInfo(AccessBridge.class.getName(), _AccessBridge._serviceName, regKey);
+ }
+}
diff --git a/accessibility/bridge/org/openoffice/accessibility/makefile.mk b/accessibility/bridge/org/openoffice/accessibility/makefile.mk
new file mode 100755
index 000000000000..f21e4a509a9d
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/accessibility/makefile.mk
@@ -0,0 +1,89 @@
+#*************************************************************************
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.1 $
+#
+# last change: $Author: obr $ $Date: 2002-08-08 14:10:18 $
+#
+# The Contents of this file are made available subject to the terms of
+# either of the following licenses
+#
+# - GNU Lesser General Public License Version 2.1
+# - Sun Industry Standards Source License Version 1.1
+#
+# Sun Microsystems Inc., October, 2000
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2000 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Sun Industry Standards Source License Version 1.1
+# =================================================
+# The contents of this file are subject to the Sun Industry Standards
+# Source License Version 1.1 (the "License"); You may not use this file
+# except in compliance with the License. You may obtain a copy of the
+# License at http://www.openoffice.org/license.html.
+#
+# Software provided under this License is provided on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+# See the License for the specific provisions governing your rights and
+# obligations concerning the Software.
+#
+# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+# Copyright: 2000 by Sun Microsystems, Inc.
+#
+# All Rights Reserved.
+#
+# Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJNAME = accessibility
+PRJ = ..$/..$/..$/..
+TARGET = java_uno_accessbridge
+PACKAGE = org$/openoffice$/accessibility
+
+USE_JAVAVER:=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(JAVAVER:s/.//)" >= "130"
+JARFILES = sandbox.jar jurt.jar unoil.jar ridl.jar
+JAVAFILES := $(shell +ls *.java)
+JAVACLASSFILES= $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class)
+
+JARTARGET = $(TARGET).jar
+JARCOMPRESS = TRUE
+JARCLASSDIRS = $(PACKAGE) org/openoffice/java/accessibility
+CUSTOMMANIFESTFILE = manifest
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+
+.INCLUDE : target.mk
+
diff --git a/accessibility/bridge/org/openoffice/accessibility/manifest b/accessibility/bridge/org/openoffice/accessibility/manifest
new file mode 100755
index 000000000000..a4dc910958f0
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/accessibility/manifest
@@ -0,0 +1 @@
+RegistrationClassName: org.openoffice.accessibility.AccessBridge
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
new file mode 100644
index 000000000000..17121248ef31
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
@@ -0,0 +1,362 @@
+/*************************************************************************
+ *
+ * $RCSfile: AccessibleObjectFactory.java,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: obr $ $Date: 2002-08-08 14:12:38 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+package org.openoffice.java.accessibility;
+
+import org.openoffice.accessibility.internal.*;
+
+import java.lang.ref.WeakReference;
+import javax.accessibility.Accessible;
+import javax.accessibility.AccessibleStateSet;
+
+import com.sun.star.uno.*;
+import drafts.com.sun.star.accessibility.AccessibleRole;
+import drafts.com.sun.star.accessibility.XAccessible;
+import drafts.com.sun.star.accessibility.XAccessibleContext;
+
+/**
+*/
+public class AccessibleObjectFactory {
+
+ // This type is needed for conversions from/to uno Any
+ public static final Type XAccessibleType = new Type(XAccessible.class);
+
+ java.util.Hashtable objectList = new java.util.Hashtable();
+ XAccessibilityInformationProvider infoProvider;
+
+ public AccessibleObjectFactory(XAccessibilityInformationProvider provider) {
+ infoProvider = provider;
+ System.out.println("ObjectFactory created");
+ }
+
+ public AccessibleObject getAccessibleObject(XAccessible xAccessible, Accessible parent) {
+ XAccessibleContext xAccessibleContext = null;
+
+ if(xAccessible == null) {
+ return null;
+ }
+
+ // Save the round trip to C++ UNO if possible
+ if(xAccessible instanceof XAccessibleContext) {
+ xAccessibleContext = (XAccessibleContext) xAccessible;
+ } else {
+ xAccessibleContext = xAccessible.getAccessibleContext();
+ }
+
+ // Ensure that we really got an UNO accessible context
+ if(xAccessibleContext == null) {
+ 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;
+ // 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();
+ }
+ }
+ if( o == null ) {
+ AccessibleContextInfo info = infoProvider.getAccessibleContextInfo(xAccessibleContext);
+
+ switch(info.Role) {
+ case AccessibleRole.CHECKBOX:
+ o = new AccessibleCheckBox(xAccessibleContext);
+ break;
+ case AccessibleRole.COMBOBOX:
+ case AccessibleRole.LIST:
+ 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);
+ } else {
+ o = new AccessibleLabel(xAccessibleContext);
+ }
+ break;
+ case AccessibleRole.DIALOG:
+ case AccessibleRole.FRAME:
+ o = new AccessibleFrame(
+ AccessibleRoleMap.toAccessibleRole(info.Role),
+ xAccessibleContext
+ );
+ break;
+ case AccessibleRole.ICON:
+ 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 AccessiblePushButton(xAccessibleContext);
+ break;
+ case AccessibleRole.RADIOBUTTON:
+ o = new AccessibleRadioButton(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:
+ if((info.States & AccessibleState.CHILDREN_TRANSIENT) == 0) {
+ o = new AccessibleTreeList(xAccessibleContext);
+ } else {
+ o = new AccessibleTreeListItem(xAccessibleContext, info.IndexInParent);
+ }
+ 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.PAGETAB:
+ case AccessibleRole.PANEL:
+ case AccessibleRole.ROOTPANE:
+ case AccessibleRole.SCROLLPANE:
+ case AccessibleRole.SHAPE:
+ 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));
+ }
+ 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 && (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().
+ */
+ synchronized (o) {
+ initializeAccessibleObject(o,
+ infoProvider.getAccessibleComponentInfo(xAccessibleContext, listener)
+ );
+ }
+
+ // Finaly set accessible parent object
+ // FIXME: create temporary parent if parent is null !!
+ o.setAccessibleParent(parent);
+
+ // 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);
+ }
+ }
+
+ if(Build.DEBUG && o == null) {
+ System.out.println("AccessibleObjectFactory: returning null object");
+ }
+ return o;
+ }
+
+ // Set the initial values of this accessible object
+ protected void initializeAccessibleObject(AccessibleObject o, AccessibleComponentInfo info) {
+ // Set the factory to retrieve callback on finalize
+ o.setObjectFactory(this);
+
+ // Set accessible name and description
+ o.setAccessibleName(info.Name);
+ o.setAccessibleDescription(info.Description);
+
+ // Set the object boundaries and colors
+ o.setBounds(new java.awt.Rectangle(info.Bounds.X, info.Bounds.Y, info.Bounds.Width, info.Bounds.Height));
+ o.setForeground(new java.awt.Color(info.ForegroundColor));
+ o.setBackground(new java.awt.Color(info.BackgroundColor));
+
+ // Fill the state set
+ AccessibleStateTypeMap.fillAccessibleStateSet(o.getAccessibleStateSet(), info.States);
+
+ // Set the number of children
+ if(o instanceof AccessibleWindow) {
+ AccessibleWindow w = (AccessibleWindow) o;
+ w.setAccessibleChildrenCount(info.ChildrenCount);
+ } else if(o instanceof AccessibleFixedText) {
+ AccessibleFixedText t = (AccessibleFixedText) o;
+ if( info.Text != null )
+ t.setText(info.Text);
+ else
+ t.setText(info.Name);
+ } else if(o instanceof AccessibleLabel) {
+ AccessibleLabel l = (AccessibleLabel) o;
+ if( info.Text != null && info.Text.length() > 0 )
+ l.setText(info.Text);
+ else
+ l.setText(info.Name);
+ }
+ }
+
+ public AccessibleObject removeAccessibleObject(XAccessible xAccessible) {
+ XAccessibleContext xAccessibleContext = null;
+
+ if(xAccessible == null) {
+ return null;
+ }
+
+ // Save the round trip to C++ UNO if possible
+ if(xAccessible instanceof XAccessibleContext) {
+ xAccessibleContext = (XAccessibleContext) xAccessible;
+ } else {
+ xAccessibleContext = xAccessible.getAccessibleContext();
+ }
+
+ // Ensure that we really got an UNO accessible context
+ if(xAccessibleContext == null) {
+ 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;
+ // Check if we already have a wrapper object for this context
+ synchronized (objectList) {
+ WeakReference r = (WeakReference) objectList.remove(oid);
+ if(r != null) {
+ o = (AccessibleObject) r.get();
+ }
+ }
+
+ // FIXME create dummy for objects not found.
+
+ return null;
+ }
+
+ public static XAccessible toXAccessible(Object any) {
+ if(AnyConverter.isObject(any)) {
+ try {
+ return (XAccessible) AnyConverter.toObject(XAccessibleType, any);
+ }
+
+ catch(com.sun.star.lang.IllegalArgumentException e) {
+ // FIXME: output
+ }
+ }
+
+ return null;
+ }
+
+
+ public void releaseAccessibleObject(AccessibleObject o) {
+ synchronized (objectList) {
+ objectList.remove(o.getObjectId());
+ if( Build.DEBUG ) {
+ System.out.println("Object cache now contains " + objectList.size() + " objects.");
+ }
+ }
+ }
+
+}
+
+
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk b/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
new file mode 100755
index 000000000000..723dcc11f56b
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
@@ -0,0 +1,145 @@
+#*************************************************************************
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.1 $
+#
+# last change: $Author: obr $ $Date: 2002-08-08 14:12:46 $
+#
+# The Contents of this file are made available subject to the terms of
+# either of the following licenses
+#
+# - GNU Lesser General Public License Version 2.1
+# - Sun Industry Standards Source License Version 1.1
+#
+# Sun Microsystems Inc., October, 2000
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2000 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Sun Industry Standards Source License Version 1.1
+# =================================================
+# The contents of this file are subject to the Sun Industry Standards
+# Source License Version 1.1 (the "License"); You may not use this file
+# except in compliance with the License. You may obtain a copy of the
+# License at http://www.openoffice.org/license.html.
+#
+# Software provided under this License is provided on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+# See the License for the specific provisions governing your rights and
+# obligations concerning the Software.
+#
+# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+# Copyright: 2000 by Sun Microsystems, Inc.
+#
+# All Rights Reserved.
+#
+# Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJNAME = accessibility
+PRJ = ..$/..$/..$/..$/..
+TARGET = java_accessibility
+PACKAGE = org$/openoffice$/java$/accessibility
+
+USE_JAVAVER:=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(JAVAVER:s/.//)" >= "140"
+JAVADIR = $(OUT)$/misc$/java
+JARFILES = sandbox.jar jurt.jar unoil.jar ridl.jar
+JAVAFILES = \
+ AccessibleButton.java \
+ AccessibleCheckBox.java \
+ AccessibleContainer.java \
+ AccessibleDescendantManager.java \
+ AccessibleEditLine.java \
+ AccessibleEventListener.java \
+ AccessibleFixedText.java \
+ AccessibleFrame.java \
+ AccessibleImage.java \
+ AccessibleLabel.java \
+ AccessibleListItem.java \
+ AccessibleMenu.java \
+ AccessibleMenuItem.java \
+ AccessibleObjectFactory.java \
+ AccessibleObject.java \
+ AccessibleParagraph.java \
+ AccessiblePushButton.java \
+ AccessibleRadioButton.java \
+ AccessibleRoleMap.java \
+ AccessibleScrollBar.java \
+ AccessibleSeparator.java \
+ AccessibleSpreadsheet.java \
+ AccessibleStateTypeMap.java \
+ AccessibleTextTable.java \
+ AccessibleTreeList.java \
+ AccessibleTreeListItem.java \
+ AccessibleWindow.java \
+ GenericAccessibleEditableText.java \
+ GenericAccessibleExtendedTable.java \
+ GenericAccessibleSelection.java
+
+JAVACLASSFILES = $(foreach,i,$(JAVAFILES) $(CLASSDIR)$/$(PACKAGE)$/$(i:b).class) $(CLASSDIR)$/$(PACKAGE)$/Build.class
+
+JARTARGET = $(TARGET).jar
+JARCOMPRESS = TRUE
+JARCLASSDIRS = $(PACKAGE)
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+# Enable logging in non-product only
+.IF "$(PRODUCT)"!=""
+DEBUGSWITCH = false
+.ELSE
+DEBUGSWITCH = true
+.ENDIF
+
+.IF "$(GUI)"=="UNX" || "$(USE_SHELL)" != "4nt"
+$(JAVADIR)$/$(PACKAGE)$/%.java:
+ @-+$(MKDIRHIER) $(JAVADIR)$/$(PACKAGE) >& $(NULLDEV)
+ @-+echo package org.openoffice.java.accessibility\; > $@
+ @-+echo public class Build { >> $@
+ @-+echo public static final boolean DEBUG = $(DEBUGSWITCH)\; >> $@
+ @-+echo } >> $@
+.ELSE
+$(JAVADIR)$/$(PACKAGE)$/%.java:
+ @-+$(MKDIRHIER) $(JAVADIR)$/$(PACKAGE) >& $(NULLDEV)
+ @-+echo package org.openoffice.java.accessibility; > $@
+ @-+echo public class Build { >> $@
+ @-+echo public static final boolean DEBUG = $(DEBUGSWITCH); >> $@
+ @-+echo } >> $@
+.ENDIF
+
+
+$(CLASSDIR)$/$(PACKAGE)$/Build.class : $(JAVADIR)$/$(PACKAGE)$/Build.java
+ -+$(JAVAC) -d $(CLASSDIR) $(JAVADIR)$/$(PACKAGE)$/Build.java