From 64832d007ed528db12299aae6e1f2a5d7231eb73 Mon Sep 17 00:00:00 2001 From: Oliver Braun Date: Thu, 8 Aug 2002 13:12:46 +0000 Subject: #100467# initial release --- .../org/openoffice/accessibility/AccessBridge.java | 274 ++++++++++++++++ .../org/openoffice/accessibility/makefile.mk | 89 +++++ .../bridge/org/openoffice/accessibility/manifest | 1 + .../accessibility/AccessibleObjectFactory.java | 362 +++++++++++++++++++++ .../org/openoffice/java/accessibility/makefile.mk | 145 +++++++++ 5 files changed, 871 insertions(+) create mode 100755 accessibility/bridge/org/openoffice/accessibility/AccessBridge.java create mode 100755 accessibility/bridge/org/openoffice/accessibility/makefile.mk create mode 100755 accessibility/bridge/org/openoffice/accessibility/manifest create mode 100644 accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java create mode 100755 accessibility/bridge/org/openoffice/java/accessibility/makefile.mk (limited to 'accessibility/bridge') 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 -- cgit v1.2.3