#100467# initial release
This commit is contained in:
parent
1768b6cf61
commit
64832d007e
5 changed files with 871 additions and 0 deletions
274
accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
Executable file
274
accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
Executable file
|
@ -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);
|
||||
}
|
||||
}
|
89
accessibility/bridge/org/openoffice/accessibility/makefile.mk
Executable file
89
accessibility/bridge/org/openoffice/accessibility/makefile.mk
Executable file
|
@ -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
|
||||
|
1
accessibility/bridge/org/openoffice/accessibility/manifest
Executable file
1
accessibility/bridge/org/openoffice/accessibility/manifest
Executable file
|
@ -0,0 +1 @@
|
|||
RegistrationClassName: org.openoffice.accessibility.AccessBridge
|
|
@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
145
accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
Executable file
145
accessibility/bridge/org/openoffice/java/accessibility/makefile.mk
Executable file
|
@ -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
|
Loading…
Reference in a new issue