fdo#39956 Delete JAB
JAB has been discontinued in favor of the native IA2 bridge.
Change-Id: I88461f73c620507d3e97b077ea2abdd2229322e1
Reviewed-on: https://gerrit.libreoffice.org/6819
Reviewed-by: David Ostrovsky <David.Ostrovsky@gmx.de>
Tested-by: David Ostrovsky <David.Ostrovsky@gmx.de>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
diff --git a/Repository.mk b/Repository.mk
index 02bfe0c..5405d69 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -553,9 +553,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
ftransl \
$(if $(DISABLE_ATL),,\
inprocserv \
) \
$(if $(ENABLE_JAVA),java_uno_accessbridge) \
$(if $(ENABLE_IA2), \
UAccCOM \
winaccessibility \
) \
@@ -662,7 +659,6 @@ $(eval $(call gb_Helper_register_jars,OOO, \
fax \
form \
htmlsoff \
java_uno_accessbridge \
letter \
officebean \
pexcel \
diff --git a/RepositoryModule_host.mk b/RepositoryModule_host.mk
index 91141f1..48d5518 100644
--- a/RepositoryModule_host.mk
+++ b/RepositoryModule_host.mk
@@ -142,7 +142,7 @@ $(eval $(call gb_Module_add_moduledirs,libreoffice,\
uui \
vbahelper \
vcl \
$(if $(ENABLE_IA2),winaccessibility) \
winaccessibility \
wizards \
writerfilter \
writerperfect \
diff --git a/accessibility/CustomTarget_bridge.mk b/accessibility/CustomTarget_bridge.mk
deleted file mode 100644
index 85f278e..0000000
--- a/accessibility/CustomTarget_bridge.mk
+++ /dev/null
@@ -1,33 +0,0 @@
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_CustomTarget_CustomTarget,accessibility/bridge))
$(call gb_CustomTarget_get_target,accessibility/bridge) : \
$(call gb_CustomTarget_get_workdir,accessibility/bridge)/org/openoffice/java/accessibility/Build.java
ifeq ($(ENABLE_DBGUTIL),TRUE)
accessibility_DEBUG := true
accessibility_PRODUCT := false
else
accessibility_DEBUG := false
accessibility_PRODUCT := true
endif
$(call gb_CustomTarget_get_workdir,accessibility/bridge)/org/openoffice/java/accessibility/Build.java :
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1)
mkdir -p $(dir $@) && (\
echo package org.openoffice.java.accessibility\; && \
echo public class Build \{ && \
echo public static final boolean DEBUG = $(accessibility_DEBUG)\; && \
echo public static final boolean PRODUCT = $(accessibility_PRODUCT)\; && \
echo \} \
) > $@
# vim: set ts=4 sw=4 et:
diff --git a/accessibility/CustomTarget_bridge_inc.mk b/accessibility/CustomTarget_bridge_inc.mk
deleted file mode 100644
index 8160e6a..0000000
--- a/accessibility/CustomTarget_bridge_inc.mk
+++ /dev/null
@@ -1,23 +0,0 @@
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_CustomTarget_CustomTarget,accessibility/bridge/inc))
$(call gb_CustomTarget_get_target,accessibility/bridge/inc) : \
$(call gb_CustomTarget_get_workdir,accessibility/bridge/inc)/WindowsAccessBridgeAdapter.h
$(call gb_CustomTarget_get_workdir,accessibility/bridge/inc)/WindowsAccessBridgeAdapter.h :| \
$(call gb_CustomTarget_get_workdir,accessibility/bridge/inc)/.dir \
$(call gb_Jar_get_target,java_uno_accessbridge)
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),JVH,1)
cd $(call gb_JavaClassSet_get_classdir,$(call gb_Jar_get_classsetname,java_uno_accessbridge)) && \
javah -classpath "$(call gb_Jar_get_target,ridl)$(gb_CLASSPATHSEP)$(call gb_Jar_get_target,unoil)$(gb_CLASSPATHSEP)." \
-o $@ org.openoffice.accessibility.WindowsAccessBridgeAdapter
# vim: set ts=4 sw=4 et:
diff --git a/accessibility/Jar_uno_accessbridge.mk b/accessibility/Jar_uno_accessbridge.mk
deleted file mode 100644
index 8078535..0000000
--- a/accessibility/Jar_uno_accessbridge.mk
+++ /dev/null
@@ -1,80 +0,0 @@
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_Jar_Jar,java_uno_accessbridge))
$(eval $(call gb_Jar_use_jars,java_uno_accessbridge,\
jurt \
ridl \
unoil \
))
$(eval $(call gb_Jar_set_packageroot,java_uno_accessbridge,org))
$(eval $(call gb_Jar_set_manifest,java_uno_accessbridge,$(SRCDIR)/accessibility/bridge/org/openoffice/accessibility/manifest))
$(eval $(call gb_Jar_set_componentfile,java_uno_accessbridge,accessibility/bridge/org/openoffice/accessibility/java_uno_accessbridge,OOO))
$(eval $(call gb_Jar_add_sourcefiles,java_uno_accessbridge,\
accessibility/bridge/org/openoffice/accessibility/AccessBridge \
accessibility/bridge/org/openoffice/accessibility/KeyHandler \
accessibility/bridge/org/openoffice/accessibility/PopupWindow \
accessibility/bridge/org/openoffice/accessibility/WindowsAccessBridgeAdapter \
accessibility/bridge/org/openoffice/java/accessibility/AbstractButton \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleActionImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleComponentImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleExtendedState \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleHypertextImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleIconImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleRoleAdapter \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleSelectionImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleStateAdapter \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl \
accessibility/bridge/org/openoffice/java/accessibility/AccessibleValueImpl \
accessibility/bridge/org/openoffice/java/accessibility/Alert \
accessibility/bridge/org/openoffice/java/accessibility/Application \
accessibility/bridge/org/openoffice/java/accessibility/Button \
accessibility/bridge/org/openoffice/java/accessibility/CheckBox \
accessibility/bridge/org/openoffice/java/accessibility/ComboBox \
accessibility/bridge/org/openoffice/java/accessibility/Component \
accessibility/bridge/org/openoffice/java/accessibility/Container \
accessibility/bridge/org/openoffice/java/accessibility/DescendantManager \
accessibility/bridge/org/openoffice/java/accessibility/Dialog \
accessibility/bridge/org/openoffice/java/accessibility/FocusTraversalPolicy \
accessibility/bridge/org/openoffice/java/accessibility/Frame \
accessibility/bridge/org/openoffice/java/accessibility/Icon \
accessibility/bridge/org/openoffice/java/accessibility/Label \
accessibility/bridge/org/openoffice/java/accessibility/List \
accessibility/bridge/org/openoffice/java/accessibility/Menu \
accessibility/bridge/org/openoffice/java/accessibility/MenuContainer \
accessibility/bridge/org/openoffice/java/accessibility/MenuItem \
accessibility/bridge/org/openoffice/java/accessibility/NativeFrame \
accessibility/bridge/org/openoffice/java/accessibility/Paragraph \
accessibility/bridge/org/openoffice/java/accessibility/RadioButton \
accessibility/bridge/org/openoffice/java/accessibility/ScrollBar \
accessibility/bridge/org/openoffice/java/accessibility/Separator \
accessibility/bridge/org/openoffice/java/accessibility/Table \
accessibility/bridge/org/openoffice/java/accessibility/TextComponent \
accessibility/bridge/org/openoffice/java/accessibility/ToggleButton \
accessibility/bridge/org/openoffice/java/accessibility/ToolTip \
accessibility/bridge/org/openoffice/java/accessibility/Tree \
accessibility/bridge/org/openoffice/java/accessibility/Window \
accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog \
accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleHypertextLog \
accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleTextLog \
))
$(eval $(call gb_Jar_add_generated_sourcefiles,java_uno_accessbridge,\
CustomTarget/accessibility/bridge/org/openoffice/java/accessibility/Build \
))
# vim:set noet sw=4 ts=4:
diff --git a/accessibility/Library_java_uno_accessbridge.mk b/accessibility/Library_java_uno_accessbridge.mk
deleted file mode 100644
index 2c643e0f..0000000
--- a/accessibility/Library_java_uno_accessbridge.mk
+++ /dev/null
@@ -1,32 +0,0 @@
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_Library_Library,java_uno_accessbridge))
$(eval $(call gb_Library_use_custom_headers,java_uno_accessbridge,accessibility/bridge/inc))
$(eval $(call gb_Library_use_external,java_uno_accessbridge,boost_headers))
$(eval $(call gb_Library_use_sdk_api,java_uno_accessbridge,))
$(eval $(call gb_Library_use_libraries,java_uno_accessbridge,\
cppu \
jvmaccess \
sal \
salhelper \
tl \
vcl \
$(gb_UWINAPI) \
))
$(eval $(call gb_Library_add_exception_objects,java_uno_accessbridge,\
accessibility/bridge/source/java/WindowsAccessBridgeAdapter \
))
# vim:set noet sw=4 ts=4:
diff --git a/accessibility/Module_accessibility.mk b/accessibility/Module_accessibility.mk
index e5e090c..1c565a5 100644
--- a/accessibility/Module_accessibility.mk
+++ b/accessibility/Module_accessibility.mk
@@ -17,15 +17,4 @@ $(eval $(call gb_Module_add_l10n_targets,accessibility,\
AllLangResTarget_acc \
))
ifneq ($(ENABLE_JAVA),)
ifeq ($(OS),WNT)
$(eval $(call gb_Module_add_targets,accessibility,\
CustomTarget_bridge \
CustomTarget_bridge_inc \
Jar_uno_accessbridge \
Library_java_uno_accessbridge \
))
endif
endif
# vim:set noet sw=4 ts=4:
diff --git a/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java b/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
deleted file mode 100644
index ebd0552..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/AccessBridge.java
+++ /dev/null
@@ -1,232 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.accessibility;
import com.sun.star.accessibility.AccessibleRole;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.awt.XExtendedToolkit;
import com.sun.star.awt.XTopWindowListener;
import com.sun.star.comp.loader.FactoryHelper;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XInitialization;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.registry.*;
import com.sun.star.uno.*;
import org.openoffice.java.accessibility.*;
import java.awt.EventQueue;
import java.awt.Window;
public class AccessBridge {
//
protected static java.util.HashMap<String, Window> topWindowMap = new java.util.HashMap<String, Window>();
private static java.awt.Window getTopWindowImpl(XAccessible xAccessible) {
// Because it can not be garantied that
// WindowsAccessBridgeAdapter.registerTopWindow() is called
// before windowOpened(), we have to make this operation
// atomic.
synchronized (topWindowMap) {
String oid = UnoRuntime.generateOid(xAccessible);
java.awt.Window w = topWindowMap.get(oid);
if (w == null) {
w = AccessibleObjectFactory.getTopWindow(xAccessible);
if (w != null) {
topWindowMap.put(oid, w);
}
}
return w;
}
}
protected static java.awt.Window getTopWindow(XAccessible xAccessible) {
if (xAccessible != null) {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
// Toolkit reports the VCL peer windows as toplevels. These have an
// accessible parent which represents the native frame window
switch(xAccessibleContext.getAccessibleRole()) {
case AccessibleRole.ROOT_PANE:
case AccessibleRole.POPUP_MENU:
return getTopWindow(xAccessibleContext.getAccessibleParent());
case AccessibleRole.WINDOW:
case AccessibleRole.FRAME:
case AccessibleRole.DIALOG:
case AccessibleRole.ALERT:
return getTopWindowImpl(xAccessible);
default:
break;
}
}
}
return null;
}
protected static java.awt.Window removeTopWindow(XAccessible xAccessible) {
if (xAccessible != null) {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
// Toolkit reports the VCL peer windows as toplevels. These have an
// accessible parent which represents the native frame window
switch(xAccessibleContext.getAccessibleRole()) {
case AccessibleRole.ROOT_PANE:
case AccessibleRole.POPUP_MENU:
return removeTopWindow(xAccessibleContext.getAccessibleParent());
case AccessibleRole.WINDOW:
case AccessibleRole.FRAME:
case AccessibleRole.DIALOG:
return topWindowMap.remove(UnoRuntime.generateOid(xAccessible));
default:
break;
}
}
}
return null;
}
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.getDefaultToolkit();
xSingleServiceFactory = FactoryHelper.getServiceFactory(_AccessBridge.class,
_AccessBridge._serviceName, multiFactory, regKey);
}
return xSingleServiceFactory;
}
static public class _AccessBridge implements XTopWindowListener,
XInitialization, XComponent {
static final String _serviceName = "com.sun.star.accessibility.AccessBridge";
XComponentContext xComponentContext;
public _AccessBridge(XComponentContext xComponentContext) {
this.xComponentContext = xComponentContext;
}
/*
* XInitialization
*/
public void initialize(java.lang.Object[] arguments) {
try {
// FIXME: Currently there is no way to determine if key event forwarding is needed or not,
// so we have to do it always ..
XExtendedToolkit unoToolkit = (XExtendedToolkit) AnyConverter.toObject(new Type(
XExtendedToolkit.class), arguments[0]);
if (unoToolkit != null) {
// FIXME this should be done in VCL
unoToolkit.addTopWindowListener(this);
String os = System.getProperty("os.name");
// Try to initialize the WindowsAccessBridgeAdapter
if (os.startsWith("Windows")) {
WindowsAccessBridgeAdapter.attach(xComponentContext);
} else {
unoToolkit.addKeyHandler(new KeyHandler());
}
} else if (Build.DEBUG) {
System.err.println(
"argument 0 is not of type XExtendedToolkit.");
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
// FIXME: output
}
}
/*
* XTopWindowListener
*/
public void windowOpened(com.sun.star.lang.EventObject event) {
XAccessible xAccessible = UnoRuntime.queryInterface(XAccessible.class,
event.Source);
java.awt.Window w = getTopWindow(xAccessible);
}
public void windowActivated(com.sun.star.lang.EventObject event) {
}
public void windowDeactivated(com.sun.star.lang.EventObject event) {
}
public void windowMinimized(com.sun.star.lang.EventObject event) {
}
public void windowNormalized(com.sun.star.lang.EventObject event) {
}
public void windowClosing(com.sun.star.lang.EventObject event) {
}
public void windowClosed(com.sun.star.lang.EventObject event) {
XAccessible xAccessible = UnoRuntime.queryInterface(XAccessible.class,
event.Source);
java.awt.Window w = removeTopWindow(xAccessible);
if (w != null) {
w.dispose();
}
}
public void disposing(com.sun.star.lang.EventObject event) {
}
/*
* XComponent
*/
public void addEventListener(com.sun.star.lang.XEventListener listener) {
}
public void removeEventListener(com.sun.star.lang.XEventListener listener) {
}
public void dispose() {
try {
EventQueue.invokeAndWait(
new Runnable() {
public void run() {
}
} );
} catch (java.lang.InterruptedException e) {
} catch (java.lang.reflect.InvocationTargetException e) {
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/accessibility/KeyHandler.java b/accessibility/bridge/org/openoffice/accessibility/KeyHandler.java
deleted file mode 100644
index 0975839..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/KeyHandler.java
+++ /dev/null
@@ -1,125 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.accessibility;
import com.sun.star.awt.XKeyHandler;
import org.openoffice.java.accessibility.AccessibleKeyBinding;
import java.awt.*;
import java.awt.event.KeyEvent;
public class KeyHandler extends Component implements XKeyHandler, java.awt.KeyEventDispatcher {
EventQueue eventQueue;
public class VCLKeyEvent extends KeyEvent implements Runnable {
boolean consumed = true;
public VCLKeyEvent(Component c, int id, int modifiers, int keyCode, char keyChar) {
super(c, id, System.currentTimeMillis(), modifiers, keyCode, keyChar);
}
public void run() {
// This is a no-op ..
}
public void setConsumed(boolean b) {
consumed = b;
}
public boolean isConsumed() {
return consumed;
}
}
public KeyHandler() {
eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
}
/** This method is called by the current KeyboardFocusManager requesting that this KeyEventDispatcher
* dispatch the specified event on its behalf
*/
public boolean dispatchKeyEvent(java.awt.event.KeyEvent e) {
if (e instanceof VCLKeyEvent) {
VCLKeyEvent event = (VCLKeyEvent) e;
event.setConsumed(false);
return true;
}
return false;
}
/** Handler for KeyPressed events */
public boolean keyPressed(com.sun.star.awt.KeyEvent event) {
// try {
VCLKeyEvent vke = new VCLKeyEvent(this, KeyEvent.KEY_PRESSED,
AccessibleKeyBinding.convertModifiers(event.Modifiers),
AccessibleKeyBinding.convertKeyCode(event.KeyCode),
event.KeyChar != 0 ? event.KeyChar : KeyEvent.CHAR_UNDEFINED);
eventQueue.postEvent(vke);
// VCL events for TABs have empty KeyChar
if (event.KeyCode == com.sun.star.awt.Key.TAB ) {
event.KeyChar = '\t';
}
// Synthesize KEY_TYPED event to emulate Java behavior
if (event.KeyChar != 0) {
eventQueue.postEvent(new VCLKeyEvent(this,
KeyEvent.KEY_TYPED,
AccessibleKeyBinding.convertModifiers(event.Modifiers),
KeyEvent.VK_UNDEFINED,
event.KeyChar));
}
// Wait until the key event is processed
return false;
// eventQueue.invokeAndWait(vke);
// return vke.isConsumed();
// } catch(java.lang.InterruptedException e) {
// return false;
// } catch(java.lang.reflect.InvocationTargetException e) {
// return false;
// }
}
/** Handler for KeyReleased events */
public boolean keyReleased(com.sun.star.awt.KeyEvent event) {
// try {
VCLKeyEvent vke = new VCLKeyEvent(this, KeyEvent.KEY_RELEASED,
AccessibleKeyBinding.convertModifiers(event.Modifiers),
AccessibleKeyBinding.convertKeyCode(event.KeyCode),
event.KeyChar != 0 ? event.KeyChar : KeyEvent.CHAR_UNDEFINED);
eventQueue.postEvent(vke);
// Wait until the key event is processed
return false;
// eventQueue.invokeAndWait(vke);
// return vke.isConsumed();
// } catch(java.lang.InterruptedException e) {
// return false;
// } catch(java.lang.reflect.InvocationTargetException e) {
// return false;
// }
}
public void disposing(com.sun.star.lang.EventObject event) {
java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
}
}
diff --git a/accessibility/bridge/org/openoffice/accessibility/PopupWindow.java b/accessibility/bridge/org/openoffice/accessibility/PopupWindow.java
deleted file mode 100644
index 9f79293..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/PopupWindow.java
+++ /dev/null
@@ -1,203 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.accessibility;
import javax.accessibility.AccessibleContext;
import org.openoffice.java.accessibility.*;
/**
*
*/
public class PopupWindow extends java.awt.Window {
javax.accessibility.AccessibleContext accessibleContext = null;
ContainerProxy layeredPane = new ContainerProxy(javax.accessibility.AccessibleRole.LAYERED_PANE);
ContainerProxy rootPane = new ContainerProxy(javax.accessibility.AccessibleRole.ROOT_PANE);
ContainerProxy popupLayer = new ContainerProxy(javax.accessibility.AccessibleRole.PANEL);
boolean opened = false;
boolean visible = false;
/** Creates a new instance of PopupWindow */
public PopupWindow(java.awt.Window owner) {
super(owner);
super.add(rootPane);
rootPane.add(layeredPane);
javax.accessibility.AccessibleContext ac = rootPane.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(this);
}
}
static PopupWindow create(
com.sun.star.accessibility.XAccessible xAccessible) {
java.awt.Window parent = java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager()
.getActiveWindow();
if (parent != null) {
PopupWindow w = new PopupWindow(parent);
w.setVisible(true);
AccessibleObjectFactory.invokeAndWait();
AccessibleObjectFactory.addChild(w, xAccessible);
return w;
}
return null;
}
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
public void addNotify() {
}
public void removeNotify() {
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean b) {
if (visible != b) {
visible = b;
if (b) {
// If it is the first show, fire WINDOW_OPENED event
if (!opened) {
AccessibleObjectFactory.postWindowOpened(this);
opened = true;
}
}
}
}
public java.awt.Component add(java.awt.Component c) {
popupLayer.add(c);
layeredPane.add(popupLayer);
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.AccessibleContext ac = layeredPane.getAccessibleContext();
if (ac != null) {
ac.firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY, null,
popupLayer.getAccessibleContext());
}
}
return c;
}
public void remove(java.awt.Component c) {
layeredPane.remove(popupLayer);
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.AccessibleContext ac = layeredPane.getAccessibleContext();
if (ac != null) {
ac.firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
popupLayer.getAccessibleContext(), null);
}
}
popupLayer.remove(c);
}
public void dispose() {
setVisible(false);
AccessibleObjectFactory.postWindowClosed(this);
}
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessiblePopupWindow();
}
return accessibleContext;
}
protected class AccessiblePopupWindow
extends java.awt.Window.AccessibleAWTWindow {
AccessiblePopupWindow() {
}
}
protected class ContainerProxy extends java.awt.Container
implements javax.accessibility.Accessible {
javax.accessibility.AccessibleContext accessibleContext = null;
javax.accessibility.AccessibleRole role;
protected ContainerProxy(javax.accessibility.AccessibleRole role) {
this.role = role;
}
public java.awt.Component add(java.awt.Component c) {
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.Accessible a = (javax.accessibility.Accessible) c;
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(this);
}
}
return super.add(c);
}
public void remove(java.awt.Component c) {
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.Accessible a = (javax.accessibility.Accessible) c;
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(null);
}
}
super.remove(c);
}
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleContainerProxy();
}
return accessibleContext;
}
private class AccessibleContainerProxy
extends java.awt.Container.AccessibleAWTContainer {
AccessibleContainerProxy() {
}
public javax.accessibility.AccessibleRole getAccessibleRole() {
return ContainerProxy.this.role;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/accessibility/WindowsAccessBridgeAdapter.java b/accessibility/bridge/org/openoffice/accessibility/WindowsAccessBridgeAdapter.java
deleted file mode 100644
index 5d7a817..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/WindowsAccessBridgeAdapter.java
+++ /dev/null
@@ -1,645 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.accessibility;
import com.sun.star.accessibility.AccessibleRole;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.java.XJavaVM;
import com.sun.star.uno.*;
import org.openoffice.java.accessibility.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.accessibility.*;
public class WindowsAccessBridgeAdapter {
private static Method registerVirtualFrame;
private static Method revokeVirtualFrame;
private static java.util.HashMap<Integer, Accessible> frameMap;
protected static native byte[] getProcessID();
protected static native boolean createMapping(long jvmaccess);
// On Windows all native frames must be registered to the access bridge.
// Therefor the bridge exports two methods that we try to find here.
protected static void attach(XComponentContext xComponentContext) {
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);
// load the native dll
System.loadLibrary("java_uno_accessbridge");
Object any = xComponentContext.getValueByName(
"/singletons/com.sun.star.java.theJavaVirtualMachine");
if (AnyConverter.isObject(any)) {
XJavaVM xJavaVM = UnoRuntime.queryInterface(XJavaVM.class,
AnyConverter.toObject(new Type(XJavaVM.class), any));
if (xJavaVM != null) {
any = xJavaVM.getJavaVM(getProcessID());
if (AnyConverter.isLong(any)) {
createMapping(AnyConverter.toLong(any));
frameMap = new java.util.HashMap<Integer, Accessible>();
}
}
}
}
} 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) {
// Forward this exception to UNO to indicate that the service will not work correctly.
throw new com.sun.star.uno.RuntimeException(
"ClassNotFound exception caught: " + e.getMessage());
} catch (IllegalArgumentException e) {
System.err.println("IllegalArgumentException caught: " +
e.getMessage());
// Forward this exception to UNO to indicate that the service will not work correctly.
throw new com.sun.star.uno.RuntimeException(
"IllegalArgumentException caught: " + e.getMessage());
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println("UNO IllegalArgumentException caught: " +
e.getMessage());
// Forward this exception to UNO to indicate that the service will not work correctly.
throw new com.sun.star.uno.RuntimeException(
"UNO IllegalArgumentException caught: " + e.getMessage());
}
}
protected static boolean isAttached() {
return frameMap != null;
}
protected static Accessible getAccessibleWrapper(XAccessible xAccessible) {
Accessible a = null;
try {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
switch (xAccessibleContext.getAccessibleRole()) {
case AccessibleRole.LIST:
a = (Accessible) AccessibleObjectFactory.getAccessibleComponent(xAccessible);
if (a != null) {
a = new ListProxy(a.getAccessibleContext());
}
break;
case AccessibleRole.MENU:
Accessible tmp = (Accessible) AccessibleObjectFactory.getAccessibleComponent(xAccessible);
if (tmp != null) {
AccessibleContext ac = tmp.getAccessibleContext();
if (ac != null) {
a = new PopupMenuProxy(ac);
}
}
break;
case AccessibleRole.TOOL_TIP:
a = PopupWindow.create(xAccessible);
break;
default:
a = AccessBridge.getTopWindow(xAccessible);
break;
}
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return a;
}
/** Registers a native frame at the Java AccessBridge for Windows */
public static void registerTopWindow(int handle, XAccessible xAccessible) {
Integer hwnd = new Integer(handle);
if (!frameMap.containsKey(hwnd)) {
if (Build.DEBUG) {
System.err.println("Native frame " + hwnd + " of role " +
AccessibleRoleAdapter.getAccessibleRole(xAccessible) +
" has been opened");
}
Accessible a = getAccessibleWrapper(xAccessible);
if (a != null) {
Object[] args = { a, hwnd };
frameMap.put(hwnd, a);
if (Build.DEBUG) {
System.err.println("registering native frame " + hwnd);
}
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());
}
}
}
}
/** Revokes a native frame at the Java AccessBridge for Windows */
public static void revokeTopWindow(int handle, XAccessible xAccessible) {
Integer hwnd = new Integer(handle);
Accessible a = frameMap.remove(hwnd);
if (a != null) {
Object[] args = { a, hwnd };
if (Build.DEBUG) {
System.err.println("revoking native frame " + hwnd);
}
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());
}
}
if (a instanceof PopupWindow) {
PopupWindow toolTipWindow = (PopupWindow) a;
toolTipWindow.removeAll();
toolTipWindow.dispose();
}
}
protected static class PopupMenuProxy extends AccessibleContext
implements Accessible, AccessibleComponent {
AccessibleContext menu;
AccessibleComponent menuComponent;
int x = 0; int y = 0; int width = 0; int height = 0;
PopupMenuProxy(AccessibleContext ac) {
menu = ac;
menuComponent = menu.getAccessibleComponent();
/** calculate the bounding rectangle by iterating over the
* the children.
*/
int x2 = 0; int y2 = 0;
int count = ac.getAccessibleChildrenCount();
for (int i = 0; i < count; i++) {
Accessible a = menu.getAccessibleChild(i);
if (a != null) {
AccessibleContext childAC = a.getAccessibleContext();
if (childAC != null) {
AccessibleComponent comp = ac.getAccessibleComponent();
if (comp != null) {
java.awt.Point p = comp.getLocationOnScreen();
java.awt.Dimension d = comp.getSize();
if (p != null && d != null) {
if (p.x < x) {
x = p.x;
}
if (p.y < y) {
y = p.y;
}
if (p.x + d.width > x2) {
x2 = p.x + d.width;
}
if (p.y + d.height > y2) {
y2 = p.y + d.height;
}
}
}
}
}
}
width = x2 - x;
height = y2 - y;
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
return this;
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleComponent getAccessibleComponent() {
return this;
}
/** Returns the AccessibleText associated with this object */
public javax.accessibility.AccessibleText getAccessibleText() {
return menu.getAccessibleText();
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
return menu.getAccessibleStateSet();
}
public java.util.Locale getLocale() {
return menu.getLocale();
}
public int getAccessibleIndexInParent() {
return -1;
}
public int getAccessibleChildrenCount() {
return menu.getAccessibleChildrenCount();
}
public javax.accessibility.Accessible getAccessibleChild(int i) {
return menu.getAccessibleChild(i);
}
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.POPUP_MENU;
}
/*
* AccessibleComponent
*/
public void addFocusListener(java.awt.event.FocusListener fl) {
menuComponent.addFocusListener(fl);
}
public void removeFocusListener(java.awt.event.FocusListener fl) {
menuComponent.removeFocusListener(fl);
}
/** Returns the background color of the object */
public java.awt.Color getBackground() {
return menuComponent.getBackground();
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
return menuComponent.getForeground();
}
public void setForeground(java.awt.Color c) {
menuComponent.setForeground(c);
}
public java.awt.Cursor getCursor() {
return menuComponent.getCursor();
}
public void setCursor(java.awt.Cursor cursor) {
menuComponent.setCursor(cursor);
}
public java.awt.Font getFont() {
return menuComponent.getFont();
}
public void setFont(java.awt.Font f) {
menuComponent.setFont(f);
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
return menuComponent.getFontMetrics(f);
}
public boolean isEnabled() {
return menuComponent.isEnabled();
}
public void setEnabled(boolean b) {
menuComponent.setEnabled(b);
}
public boolean isVisible() {
return menuComponent.isVisible();
}
public void setVisible(boolean b) {
menuComponent.setVisible(b);
}
public boolean isShowing() {
return menuComponent.isShowing();
}
public boolean contains(java.awt.Point p) {
java.awt.Dimension d = getSize();
if (Build.DEBUG) {
System.err.println("PopupMenuProxy.containsPoint(" + p.x + "," +
p.y + ") returns " +
(((d.width >= 0) && (p.x < d.width) && (d.height >= 0) &&
(p.y < d.height)) ? "true" : "false"));
}
if ((d.width >= 0) && (p.x < d.width) && (d.height >= 0) &&
(p.y < d.height)) {
return true;
}
return false;
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
return new java.awt.Point(x,y);
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
// This object represents a toplevel, so this is the same as getLocationOnScreen()
return getLocationOnScreen();
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
return new java.awt.Rectangle(x, y, width, height);
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
return new java.awt.Dimension(width, height);
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local
* coordinate Point
*/
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
java.awt.Point p2 = menuComponent.getLocationOnScreen();
return menuComponent.getAccessibleAt(
new java.awt.Point(p.x + x - p2.x, p.y + y - p2.y));
}
public boolean isFocusTraversable() {
return menuComponent.isFocusTraversable();
}
public void requestFocus() {
menuComponent.requestFocus();
}
}
protected static class ListProxy extends AccessibleContext
implements Accessible, AccessibleComponent {
AccessibleContext list;
AccessibleComponent listComponent;
ListProxy(AccessibleContext ac) {
list = ac;
listComponent = list.getAccessibleComponent();
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
return this;
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleComponent getAccessibleComponent() {
return this;
}
/** Returns the AccessibleSelection associated with this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
return list.getAccessibleSelection();
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
return list.getAccessibleStateSet();
}
public java.util.Locale getLocale() {
return list.getLocale();
}
public int getAccessibleIndexInParent() {
return -1;
}
public int getAccessibleChildrenCount() {
return list.getAccessibleChildrenCount();
}
public javax.accessibility.Accessible getAccessibleChild(int i) {
return list.getAccessibleChild(i);
}
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.LIST;
}
/*
* AccessibleComponent
*/
public void addFocusListener(java.awt.event.FocusListener fl) {
listComponent.addFocusListener(fl);
}
public void removeFocusListener(java.awt.event.FocusListener fl) {
listComponent.removeFocusListener(fl);
}
/** Returns the background color of the object */
public java.awt.Color getBackground() {
return listComponent.getBackground();
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
return listComponent.getForeground();
}
public void setForeground(java.awt.Color c) {
listComponent.setForeground(c);
}
public java.awt.Cursor getCursor() {
return listComponent.getCursor();
}
public void setCursor(java.awt.Cursor cursor) {
listComponent.setCursor(cursor);
}
public java.awt.Font getFont() {
return listComponent.getFont();
}
public void setFont(java.awt.Font f) {
listComponent.setFont(f);
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
return listComponent.getFontMetrics(f);
}
public boolean isEnabled() {
return listComponent.isEnabled();
}
public void setEnabled(boolean b) {
listComponent.setEnabled(b);
}
public boolean isVisible() {
return listComponent.isVisible();
}
public void setVisible(boolean b) {
listComponent.setVisible(b);
}
public boolean isShowing() {
return listComponent.isShowing();
}
public boolean contains(java.awt.Point p) {
return listComponent.contains(p);
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
return listComponent.getLocationOnScreen();
}
/** Gets the location of this component in the form of a point specifying
* the component's top-left corner
*/
public java.awt.Point getLocation() {
// This object represents a toplevel object, so getLocation() should
// return the same as getLocationOnScreen().
return getLocationOnScreen();
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
java.awt.Point p = getLocationOnScreen();
java.awt.Dimension d = getSize();
return new java.awt.Rectangle(p.x, p.y, d.width, d.height);
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
return listComponent.getSize();
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local
* coordinate Point
*/
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
return listComponent.getAccessibleAt(p);
}
public boolean isFocusTraversable() {
return listComponent.isFocusTraversable();
}
public void requestFocus() {
listComponent.requestFocus();
}
}
}
diff --git a/accessibility/bridge/org/openoffice/accessibility/java_uno_accessbridge.component b/accessibility/bridge/org/openoffice/accessibility/java_uno_accessbridge.component
deleted file mode 100644
index a1194a1..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/java_uno_accessbridge.component
+++ /dev/null
@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
-->
<component loader="com.sun.star.loader.Java2"
xmlns="http://openoffice.org/2010/uno-components">
<implementation name="org.openoffice.accessibility.AccessBridge">
<service name="com.sun.star.accessibility.AccessBridge"/>
</implementation>
</component>
diff --git a/accessibility/bridge/org/openoffice/accessibility/manifest b/accessibility/bridge/org/openoffice/accessibility/manifest
deleted file mode 100644
index 4b5ffd5..0000000
--- a/accessibility/bridge/org/openoffice/accessibility/manifest
+++ /dev/null
@@ -1,2 +0,0 @@
RegistrationClassName: org.openoffice.accessibility.AccessBridge
UNO-Type-Path:
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AbstractButton.java b/accessibility/bridge/org/openoffice/java/accessibility/AbstractButton.java
deleted file mode 100644
index c0fc21c..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AbstractButton.java
+++ /dev/null
@@ -1,163 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
/**
*/
public abstract class AbstractButton extends Component {
protected AbstractButton(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected abstract class AccessibleAbstractButton extends AccessibleUNOComponent
implements javax.accessibility.AccessibleAction {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleAbstractButton() {
super();
}
/*
* AccessibleContext
*/
/** Gets the AccessibleAction associated with this object that supports one or more actions */
public javax.accessibility.AccessibleAction getAccessibleAction() {
return this;
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class,unoAccessibleComponent);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the relation set of this object */
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet = unoAccessibleContext.getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return null;
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
getAccessibleComponents(
unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.LABELED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABELED_BY,
getAccessibleComponents(
unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/*
* AccessibleAction
*/
/** Performs the specified Action on the object */
public boolean doAccessibleAction(int param) {
if (param == 0) {
// HACK: this action might open a modal dialog and therefor block
// until the dialog is closed. In case of this thread being the
// AWT EventDispatcherThread this means, the opened dialog will
// not be accessible, so deligate this request to another thread.
if (java.awt.EventQueue.isDispatchThread()) {
Thread t = new Thread () {
public void run() {
AbstractButton.AccessibleAbstractButton.this.doAccessibleAction(0);
}
};
t.start();
return true;
} else {
// Actions of MenuItems may also be performed if the item is not
// visible, so just try ..
try {
XAccessibleContext xAccessibleContext = unoAccessibleContext;
if (xAccessibleContext != null) {
// Query for XAccessibleAction interface
XAccessibleAction xAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, xAccessibleContext);
if (xAccessibleAction != null) {
return xAccessibleAction.doAccessibleAction(0);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
return false;
}
/** Returns a description of the specified action of the object */
public java.lang.String getAccessibleActionDescription(int param) {
return javax.swing.UIManager.getString("AbstractButton.clickText");
}
/** Returns the number of accessible actions available in this object */
public int getAccessibleActionCount() {
return 1;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleActionImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleActionImpl.java
deleted file mode 100644
index a38820c..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleActionImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.XAccessibleAction;
/** The AccessibleActionWrapper maps the calls to the java AccessibleAction interface
* to the corresponding methods of the UNO XAccessibleAction interface.
*/
public class AccessibleActionImpl implements javax.accessibility.AccessibleAction {
protected XAccessibleAction unoObject;
/** Creates new AccessibleActionWrapper */
public AccessibleActionImpl(XAccessibleAction xAccessibleAction) {
unoObject = xAccessibleAction;
}
public boolean doAccessibleAction(int param) {
try {
return unoObject.doAccessibleAction(param);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
public java.lang.String getAccessibleActionDescription(int param) {
try {
return unoObject.getAccessibleActionDescription(param);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public int getAccessibleActionCount() {
try {
return unoObject.getAccessibleActionCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleComponentImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleComponentImpl.java
deleted file mode 100644
index 03e1fa5..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleComponentImpl.java
+++ /dev/null
@@ -1,223 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.AccessibleStateType;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.accessibility.XAccessibleComponent;
// import com.sun.star.accessibility.XAccessibleExtendedComponent;
import com.sun.star.uno.UnoRuntime;
public class AccessibleComponentImpl implements javax.accessibility.AccessibleComponent {
protected XAccessibleComponent unoObject;
// protected XAccessibleExtendedComponent unoAccessibleExtendedComponent = null;
/** Creates new AccessibleComponentImpl */
public AccessibleComponentImpl(XAccessibleComponent xAccessibleComponent) {
unoObject = xAccessibleComponent;
}
protected boolean hasState(short state) {
try {
XAccessibleContext unoAccessibleContext = UnoRuntime.queryInterface(XAccessibleContext.class, unoObject);
// All UNO accessibility implementations must support XAccessibleContext
// and return a valid XAccessibleStateSet ..
return unoAccessibleContext.getAccessibleStateSet().contains(state);
} catch (com.sun.star.uno.RuntimeException e) {
return false;
} catch (java.lang.NullPointerException e) {
System.err.println("XAccessibleContext unsupported or no XAccessibleStateSet returned.");
return false;
}
}
/*
* XAccessibleComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoObject.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoObject.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return hasState(AccessibleStateType.ENABLED);
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return hasState(AccessibleStateType.VISIBLE);
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return hasState(AccessibleStateType.SHOWING);
}
public boolean contains(java.awt.Point p) {
try {
return unoObject.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoObject.getLocationOnScreen();
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoObject.getLocation();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoObject.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoObject.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
// Not supported by this implementation
return null;
}
public boolean isFocusTraversable() {
return hasState(AccessibleStateType.FOCUSABLE);
}
public void requestFocus() {
unoObject.grabFocus();
}
/**
* Adds the specified focus listener to receive focus events from
* this component when this component gains input focus.
* If listener <code>l</code> is <code>null</code>,
* no exception is thrown and no action is performed.
*/
public void addFocusListener(java.awt.event.FocusListener l) {
// Not supported by this implementation
}
/**
* Removes the specified focus listener so that it no longer
* receives focus events from this component. This method performs
* no function, nor does it throw an exception, if the listener
* specified by the argument was not previously added to this component.
* If listener <code>l</code> is <code>null</code>,
* no exception is thrown and no action is performed.
*/
public void removeFocusListener(java.awt.event.FocusListener l) {
// Not supported by this implementation
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java
deleted file mode 100644
index 8dd7e36..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java
+++ /dev/null
@@ -1,351 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.awt.*;
import com.sun.star.style.*;
import com.sun.star.accessibility.XAccessibleEditableText;
import com.sun.star.beans.PropertyValue;
import javax.swing.text.StyleConstants;
/** The GenericAccessibleEditableText mapps the calls to the java AccessibleEditableText
* interface to the corresponding methods of the UNO XAccessibleEditableText interface.
*/
public class AccessibleEditableTextImpl extends AccessibleTextImpl implements javax.accessibility.AccessibleEditableText {
final static double toPointFactor = 1 / (7/10 + 34.5);
/** Creates new GenericAccessibleEditableText object */
public AccessibleEditableTextImpl(XAccessibleEditableText xAccessibleEditableText) {
super(xAccessibleEditableText);
}
/** Cuts the text between two indices into the system clipboard */
public void cut(int startIndex, int endIndex) {
try {
((XAccessibleEditableText) unoObject).cutText(startIndex, endIndex);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Deletes the text between two indices */
public void delete(int startIndex, int endIndex) {
try {
((XAccessibleEditableText) unoObject).deleteText(startIndex, endIndex);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the text range between two indices */
public String getTextRange(int startIndex, int endIndex) {
try {
return unoObject.getTextRange(startIndex, endIndex);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
/** Inserts the specified string at the given index */
public void insertTextAtIndex(int index, String s){
try {
((XAccessibleEditableText) unoObject).insertText(s, index);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Pastes the text form the system clipboard into the text starting at the specified index */
public void paste(int startIndex) {
try {
((XAccessibleEditableText) unoObject).pasteText(startIndex);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Replaces the text between two indices with the specified string */
public void replaceText(int startIndex, int endIndex, String s) {
try {
((XAccessibleEditableText) unoObject).replaceText(startIndex, endIndex, s);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Selects the text between two indices */
public void selectText(int startIndex, int endIndex) {
try {
unoObject.setSelection(startIndex, endIndex);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Sets the attributes for the text between two indices */
public void setAttributes(int startIndex, int endIndex, javax.swing.text.AttributeSet as) {
java.util.ArrayList<PropertyValue> propertyValues = new java.util.ArrayList<PropertyValue>();
// Convert Alignment attribute
Object attribute = as.getAttribute(StyleConstants.Alignment);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaAdjust";
switch (StyleConstants.getAlignment(as)) {
case StyleConstants.ALIGN_RIGHT:
propertyValue.Value = ParagraphAdjust.RIGHT;
break;
case StyleConstants.ALIGN_CENTER:
propertyValue.Value = ParagraphAdjust.CENTER;
break;
case StyleConstants.ALIGN_JUSTIFIED:
propertyValue.Value = ParagraphAdjust.BLOCK;
break;
default:
propertyValue.Value = ParagraphAdjust.LEFT;
break;
}
propertyValues.add(propertyValue);
}
// Convert Background attribute
attribute = as.getAttribute(StyleConstants.Background);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharBackColor";
propertyValue.Value = new Integer(StyleConstants.getBackground(as).getRGB());
propertyValues.add(propertyValue);
}
// FIXME: BidiLevel
// Set Bold attribute
attribute = as.getAttribute(StyleConstants.Bold);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharWeight";
if (StyleConstants.isBold(as)) {
propertyValue.Value = new Float(150);
} else {
propertyValue.Value = new Float(100);
}
propertyValues.add(propertyValue);
}
// FIXME: Java 1.4 ComponentAttribute, ComponentElementName, ComposedTextAttribute
// Set FirstLineIndent attribute
attribute = as.getAttribute(StyleConstants.FirstLineIndent);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaFirstLineIndent";
propertyValue.Value = new Double(StyleConstants.getFirstLineIndent(as) / toPointFactor);
propertyValues.add(propertyValue);
}
// Set font family attribute
attribute = as.getAttribute(StyleConstants.FontFamily);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharFontName";
propertyValue.Value = new String(StyleConstants.getFontFamily(as));
propertyValues.add(propertyValue);
}
// Set font size attribute
attribute = as.getAttribute(StyleConstants.FontSize);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharHeight";
propertyValue.Value = new Integer(StyleConstants.getFontSize(as));
propertyValues.add(propertyValue);
}
// Map foreground color
attribute = as.getAttribute(StyleConstants.Foreground);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharColor";
propertyValue.Value = new Integer (StyleConstants.getForeground(as).getRGB());
propertyValues.add(propertyValue);
}
// FIXME: IconAttribute, IconElementName
// Set italic attribute
attribute = as.getAttribute(StyleConstants.Italic);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharPosture";
if (StyleConstants.isItalic(as)) {
propertyValue.Value = FontSlant.ITALIC;
} else {
propertyValue.Value = FontSlant.DONTKNOW;
}
propertyValues.add(propertyValue);
}
// Set left indent attribute
attribute = as.getAttribute(StyleConstants.LeftIndent);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaFirstLeftMargin";
propertyValue.Value = new Integer(new Double(StyleConstants.getLeftIndent(as) / toPointFactor).intValue());
propertyValues.add(propertyValue);
}
// Set right indent attribute
attribute = as.getAttribute(StyleConstants.RightIndent);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaFirstRightMargin";
propertyValue.Value = new Integer(new Double(StyleConstants.getRightIndent(as) / toPointFactor).intValue());
propertyValues.add(propertyValue);
}
// Set line spacing attribute
attribute = as.getAttribute(StyleConstants.LineSpacing);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaLineSpacing";
propertyValue.Value = new Integer(new Double(StyleConstants.getLineSpacing(as) / toPointFactor).intValue());
propertyValues.add(propertyValue);
}
// FIXME: Java 1.4 NameAttribute, Orientation, ResolveAttribute
// Set space above attribute
attribute = as.getAttribute(StyleConstants.SpaceAbove);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaTopMargin";
propertyValue.Value = new Integer(new Double( StyleConstants.getSpaceAbove(as) / toPointFactor).intValue());
propertyValues.add(propertyValue);
}
// Set space below attribute
attribute = as.getAttribute(StyleConstants.SpaceBelow);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaBottomMargin";
propertyValue.Value = new Integer(new Double(StyleConstants.getSpaceBelow(as) / toPointFactor).intValue());
propertyValues.add(propertyValue);
}
// Set strike through attribute
attribute = as.getAttribute(StyleConstants.StrikeThrough);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharPosture";
if (StyleConstants.isStrikeThrough(as)) {
propertyValue.Value = new Short(FontStrikeout.SINGLE);
} else {
propertyValue.Value = new Short(FontStrikeout.NONE);
}
propertyValues.add(propertyValue);
}
// Set sub-/superscript attribute
attribute = as.getAttribute(StyleConstants.Superscript);
if (null == attribute) {
attribute = as.getAttribute(StyleConstants.Subscript);
}
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharEscapement";
if (StyleConstants.isSuperscript(as)) {
propertyValue.Value = new Short( "1" );
} else if (StyleConstants.isSubscript(as)) {
propertyValue.Value = new Short( "-1" );
} else {
propertyValue.Value = new Short( "0" );
}
propertyValues.add(propertyValue);
}
// Set tabset attribute
attribute = as.getAttribute(StyleConstants.TabSet);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "ParaTabStops";
javax.swing.text.TabSet tabSet = StyleConstants.getTabSet(as);
java.util.ArrayList<TabStop> tabStops = new java.util.ArrayList<TabStop>(tabSet.getTabCount());
for (int i = 0, max = tabSet.getTabCount(); i < max; i++) {
javax.swing.text.TabStop tab = tabSet.getTab(i);
com.sun.star.style.TabStop unoTab = new com.sun.star.style.TabStop();
unoTab.Position = new Double(tab.getPosition() / toPointFactor).intValue();
switch (tab.getAlignment()) {
case javax.swing.text.TabStop.ALIGN_CENTER:
unoTab.Alignment = TabAlign.CENTER;
break;
case javax.swing.text.TabStop.ALIGN_RIGHT:
unoTab.Alignment = TabAlign.RIGHT;
break;
case javax.swing.text.TabStop.ALIGN_DECIMAL:
unoTab.Alignment = TabAlign.DECIMAL;
break;
default:
unoTab.Alignment = TabAlign.LEFT;
break;
}
tabStops.add(unoTab);
}
propertyValue.Value = tabStops.toArray();
propertyValues.add(propertyValue);
}
// Set underline attribute
attribute = as.getAttribute(StyleConstants.Underline);
if (null != attribute) {
com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
propertyValue.Name = "CharUnderline";
if (StyleConstants.isUnderline(as)) {
propertyValue.Value = new Short(FontUnderline.SINGLE);
} else {
propertyValue.Value = new Short(FontUnderline.NONE);
}
propertyValues.add(propertyValue);
}
try {
((XAccessibleEditableText) unoObject).setAttributes(startIndex, endIndex, (com.sun.star.beans.PropertyValue[]) propertyValues.toArray());
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Sets the text contents to the specified string */
public void setTextContents(String s) {
try {
((XAccessibleEditableText) unoObject).setText(s);
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleExtendedState.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleExtendedState.java
deleted file mode 100644
index 300b5a9..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleExtendedState.java
+++ /dev/null
@@ -1,44 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleState;
public class AccessibleExtendedState extends AccessibleState {
public static final AccessibleState DEFUNCT;
public static final AccessibleState INDETERMINATE;
public static final AccessibleState MANAGES_DESCENDANTS;
public static final AccessibleState SENSITIVE;
public static final AccessibleState STALE;
static {
DEFUNCT = new AccessibleExtendedState("defunct");
// JAVA 1.5: will come with manages_descendants and indeterminate
INDETERMINATE = new AccessibleExtendedState("indeterminate");
MANAGES_DESCENDANTS = new AccessibleExtendedState("managesDescendants");
SENSITIVE = new AccessibleExtendedState("sensitive");
STALE = new AccessibleExtendedState("stale");
}
protected AccessibleExtendedState(String key) {
super(key);
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleHypertextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleHypertextImpl.java
deleted file mode 100644
index 24ab5ef..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleHypertextImpl.java
+++ /dev/null
@@ -1,180 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import org.openoffice.java.accessibility.logging.*;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/** The AccessibleHypertextImpl mapps all calls to the java AccessibleHypertext
* interface to the corresponding methods of the UNO XAccessibleHypertext
* interface.
*/
public class AccessibleHypertextImpl extends AccessibleTextImpl
implements javax.accessibility.AccessibleHypertext {
protected class Hyperlink extends javax.accessibility.AccessibleHyperlink {
protected XAccessibleHyperlink unoObject;
public Hyperlink(XAccessibleHyperlink xHyperlink) {
unoObject = xHyperlink;
}
public int getStartIndex() {
try {
System.err.println("StartIndex: " + unoObject.getStartIndex());
return unoObject.getStartIndex();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
public Object getAccessibleActionObject(int param) {
System.err.println("getActionObject");
try {
Object any = unoObject.getAccessibleActionObject(param);
if (AnyConverter.isString(any)) {
String url = AnyConverter.toString(any);
if (null != url) {
return new java.net.URL(url);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.lang.IllegalArgumentException e) {
} catch (java.net.MalformedURLException exception) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
public int getEndIndex() {
try {
System.err.println("StartIndex: " + unoObject.getEndIndex());
return unoObject.getEndIndex();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
public Object getAccessibleActionAnchor(int param) {
System.err.println("getActionAnchor");
try {
Object any = unoObject.getAccessibleActionObject(param);
if (AnyConverter.isString(any)) {
System.err.println("Anchor: " + AnyConverter.toString(any));
return AnyConverter.toString(any);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.lang.IllegalArgumentException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
public boolean isValid() {
return unoObject.isValid();
}
public boolean doAccessibleAction(int param) {
try {
return unoObject.doAccessibleAction(param);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
public String getAccessibleActionDescription(int param) {
try {
return unoObject.getAccessibleActionDescription(param);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
}
}
public int getAccessibleActionCount() {
try {
return unoObject.getAccessibleActionCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
}
/** Creates new AccessibleHypertextImpl */
public AccessibleHypertextImpl(XAccessibleHypertext xAccessibleHypertext) {
if (Build.PRODUCT) {
unoObject = xAccessibleHypertext;
} else {
String property = System.getProperty("AccessBridgeLogging");
if ((property != null) && (property.indexOf("text") != -1)) {
unoObject = new XAccessibleHypertextLog(xAccessibleHypertext);
} else {
unoObject = xAccessibleHypertext;
}
}
}
public static javax.accessibility.AccessibleText get(com.sun.star.uno.XInterface unoObject) {
try {
XAccessibleHypertext unoAccessibleHypertext = UnoRuntime.queryInterface(XAccessibleHypertext.class, unoObject);
if (unoAccessibleHypertext != null) {
return new AccessibleHypertextImpl(unoAccessibleHypertext);
}
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class, unoObject);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
public javax.accessibility.AccessibleHyperlink getLink(int param) {
try {
return new Hyperlink(((XAccessibleHypertext) unoObject).getHyperLink(param));
}
catch(com.sun.star.lang.IndexOutOfBoundsException exception) {
throw new IndexOutOfBoundsException(exception.getMessage());
}
}
public int getLinkCount() {
try {
return ((XAccessibleHypertext) unoObject).getHyperLinkCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
public int getLinkIndex(int param) {
try {
return ((XAccessibleHypertext) unoObject).getHyperLinkIndex(param);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleIconImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleIconImpl.java
deleted file mode 100644
index 8e12392..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleIconImpl.java
+++ /dev/null
@@ -1,64 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.XAccessibleImage;
/**
*/
public class AccessibleIconImpl implements javax.accessibility.AccessibleIcon {
XAccessibleImage unoAccessibleImage;
public AccessibleIconImpl(XAccessibleImage xImage) {
unoAccessibleImage = xImage;
}
/** Gets the description of the icon */
public String getAccessibleIconDescription() {
try {
return unoAccessibleImage.getAccessibleImageDescription();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the height of the icon */
public int getAccessibleIconHeight() {
try {
return unoAccessibleImage.getAccessibleImageHeight();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Gets the width of the icon */
public int getAccessibleIconWidth() {
try {
return unoAccessibleImage.getAccessibleImageWidth();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Sets the description of the icon */
public void setAccessibleIconDescription(String s) {
// Not supported
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java
deleted file mode 100644
index 560f5f8..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleKeyBinding.java
+++ /dev/null
@@ -1,376 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.awt.KeyStroke;
/**
*
*/
public class AccessibleKeyBinding extends Object implements javax.accessibility.AccessibleKeyBinding {
XAccessibleKeyBinding unoAccessibleKeybinding;
public AccessibleKeyBinding(XAccessibleKeyBinding unoKB) {
unoAccessibleKeybinding = unoKB;
}
public static int convertModifiers(short s) {
int modifiers = 0;
if ((s & com.sun.star.awt.KeyModifier.SHIFT) != 0) {
modifiers = modifiers | java.awt.event.KeyEvent.SHIFT_DOWN_MASK;
}
if ((s & com.sun.star.awt.KeyModifier.MOD1) != 0) {
modifiers = modifiers | java.awt.event.KeyEvent.CTRL_DOWN_MASK;
}
if ((s & com.sun.star.awt.KeyModifier.MOD2) != 0) {
modifiers = modifiers | java.awt.event.KeyEvent.ALT_DOWN_MASK;
}
if ((s & com.sun.star.awt.KeyModifier.MOD3) != 0) {
modifiers = modifiers | java.awt.event.KeyEvent.META_DOWN_MASK;
}
return modifiers;
}
public static int convertKeyCode(short s) {
int keycode = java.awt.event.KeyEvent.VK_UNDEFINED;
switch(s) {
case com.sun.star.awt.Key.NUM0:
keycode = java.awt.event.KeyEvent.VK_0;
break;
case com.sun.star.awt.Key.NUM1:
keycode = java.awt.event.KeyEvent.VK_1;
break;
case com.sun.star.awt.Key.NUM2:
keycode = java.awt.event.KeyEvent.VK_2;
break;
case com.sun.star.awt.Key.NUM3:
keycode = java.awt.event.KeyEvent.VK_3;
break;
case com.sun.star.awt.Key.NUM4:
keycode = java.awt.event.KeyEvent.VK_4;
break;
case com.sun.star.awt.Key.NUM5:
keycode = java.awt.event.KeyEvent.VK_5;
break;
case com.sun.star.awt.Key.NUM6:
keycode = java.awt.event.KeyEvent.VK_6;
break;
case com.sun.star.awt.Key.NUM7:
keycode = java.awt.event.KeyEvent.VK_7;
break;
case com.sun.star.awt.Key.NUM8:
keycode = java.awt.event.KeyEvent.VK_8;
break;
case com.sun.star.awt.Key.NUM9:
keycode = java.awt.event.KeyEvent.VK_9;
break;
case com.sun.star.awt.Key.A:
keycode = java.awt.event.KeyEvent.VK_A;
break;
case com.sun.star.awt.Key.B:
keycode = java.awt.event.KeyEvent.VK_B;
break;
case com.sun.star.awt.Key.C:
keycode = java.awt.event.KeyEvent.VK_C;
break;
case com.sun.star.awt.Key.D:
keycode = java.awt.event.KeyEvent.VK_D;
break;
case com.sun.star.awt.Key.E:
keycode = java.awt.event.KeyEvent.VK_E;
break;
case com.sun.star.awt.Key.F:
keycode = java.awt.event.KeyEvent.VK_F;
break;
case com.sun.star.awt.Key.G:
keycode = java.awt.event.KeyEvent.VK_G;
break;
case com.sun.star.awt.Key.H:
keycode = java.awt.event.KeyEvent.VK_H;
break;
case com.sun.star.awt.Key.I:
keycode = java.awt.event.KeyEvent.VK_I;
break;
case com.sun.star.awt.Key.J:
keycode = java.awt.event.KeyEvent.VK_J;
break;
case com.sun.star.awt.Key.K:
keycode = java.awt.event.KeyEvent.VK_K;
break;
case com.sun.star.awt.Key.L:
keycode = java.awt.event.KeyEvent.VK_L;
break;
case com.sun.star.awt.Key.M:
keycode = java.awt.event.KeyEvent.VK_M;
break;
case com.sun.star.awt.Key.N:
keycode = java.awt.event.KeyEvent.VK_N;
break;
case com.sun.star.awt.Key.O:
keycode = java.awt.event.KeyEvent.VK_O;
break;
case com.sun.star.awt.Key.P:
keycode = java.awt.event.KeyEvent.VK_P;
break;
case com.sun.star.awt.Key.Q:
keycode = java.awt.event.KeyEvent.VK_Q;
break;
case com.sun.star.awt.Key.R:
keycode = java.awt.event.KeyEvent.VK_R;
break;
case com.sun.star.awt.Key.S:
keycode = java.awt.event.KeyEvent.VK_S;
break;
case com.sun.star.awt.Key.T:
keycode = java.awt.event.KeyEvent.VK_T;
break;
case com.sun.star.awt.Key.U:
keycode = java.awt.event.KeyEvent.VK_U;
break;
case com.sun.star.awt.Key.V:
keycode = java.awt.event.KeyEvent.VK_V;
break;
case com.sun.star.awt.Key.W:
keycode = java.awt.event.KeyEvent.VK_W;
break;
case com.sun.star.awt.Key.X:
keycode = java.awt.event.KeyEvent.VK_X;
break;
case com.sun.star.awt.Key.Y:
keycode = java.awt.event.KeyEvent.VK_Y;
break;
case com.sun.star.awt.Key.Z:
keycode = java.awt.event.KeyEvent.VK_Z;
break;
case com.sun.star.awt.Key.F1:
keycode = java.awt.event.KeyEvent.VK_F1;
break;
case com.sun.star.awt.Key.F2:
keycode = java.awt.event.KeyEvent.VK_F2;
break;
case com.sun.star.awt.Key.F3:
keycode = java.awt.event.KeyEvent.VK_F3;
break;
case com.sun.star.awt.Key.F4:
keycode = java.awt.event.KeyEvent.VK_F4;
break;
case com.sun.star.awt.Key.F5:
keycode = java.awt.event.KeyEvent.VK_F5;
break;
case com.sun.star.awt.Key.F6:
keycode = java.awt.event.KeyEvent.VK_F6;
break;
case com.sun.star.awt.Key.F7:
keycode = java.awt.event.KeyEvent.VK_F7;
break;
case com.sun.star.awt.Key.F8:
keycode = java.awt.event.KeyEvent.VK_F8;
break;
case com.sun.star.awt.Key.F9:
keycode = java.awt.event.KeyEvent.VK_F9;
break;
case com.sun.star.awt.Key.F10:
keycode = java.awt.event.KeyEvent.VK_F10;
break;
case com.sun.star.awt.Key.F11:
keycode = java.awt.event.KeyEvent.VK_F11;
break;
case com.sun.star.awt.Key.F12:
keycode = java.awt.event.KeyEvent.VK_F12;
break;
case com.sun.star.awt.Key.F13:
keycode = java.awt.event.KeyEvent.VK_F13;
break;
case com.sun.star.awt.Key.F14:
keycode = java.awt.event.KeyEvent.VK_F14;
break;
case com.sun.star.awt.Key.F15:
keycode = java.awt.event.KeyEvent.VK_F15;
break;
case com.sun.star.awt.Key.F16:
keycode = java.awt.event.KeyEvent.VK_F16;
break;
case com.sun.star.awt.Key.F17:
keycode = java.awt.event.KeyEvent.VK_F17;
break;
case com.sun.star.awt.Key.F18:
keycode = java.awt.event.KeyEvent.VK_F18;
break;
case com.sun.star.awt.Key.F19:
keycode = java.awt.event.KeyEvent.VK_F19;
break;
case com.sun.star.awt.Key.F20:
keycode = java.awt.event.KeyEvent.VK_F20;
break;
case com.sun.star.awt.Key.F21:
keycode = java.awt.event.KeyEvent.VK_F21;
break;
case com.sun.star.awt.Key.F22:
keycode = java.awt.event.KeyEvent.VK_F22;
break;
case com.sun.star.awt.Key.F23:
keycode = java.awt.event.KeyEvent.VK_F23;
break;
case com.sun.star.awt.Key.F24:
keycode = java.awt.event.KeyEvent.VK_F24;
break;
case com.sun.star.awt.Key.DOWN:
keycode = java.awt.event.KeyEvent.VK_DOWN;
break;
case com.sun.star.awt.Key.UP:
keycode = java.awt.event.KeyEvent.VK_UP;
break;
case com.sun.star.awt.Key.LEFT:
keycode = java.awt.event.KeyEvent.VK_LEFT;
break;
case com.sun.star.awt.Key.RIGHT:
keycode = java.awt.event.KeyEvent.VK_RIGHT;
break;
case com.sun.star.awt.Key.HOME:
keycode = java.awt.event.KeyEvent.VK_HOME;
break;
case com.sun.star.awt.Key.END:
keycode = java.awt.event.KeyEvent.VK_END;
break;
case com.sun.star.awt.Key.PAGEUP:
keycode = java.awt.event.KeyEvent.VK_PAGE_UP;
break;
case com.sun.star.awt.Key.PAGEDOWN:
keycode = java.awt.event.KeyEvent.VK_PAGE_DOWN;
break;
case com.sun.star.awt.Key.RETURN:
keycode = java.awt.event.KeyEvent.VK_ENTER;
break;
case com.sun.star.awt.Key.ESCAPE:
keycode = java.awt.event.KeyEvent.VK_ESCAPE;
break;
case com.sun.star.awt.Key.TAB:
keycode = java.awt.event.KeyEvent.VK_TAB;
break;
case com.sun.star.awt.Key.BACKSPACE:
keycode = java.awt.event.KeyEvent.VK_BACK_SPACE;
break;
case com.sun.star.awt.Key.SPACE:
keycode = java.awt.event.KeyEvent.VK_SPACE;
break;
case com.sun.star.awt.Key.INSERT:
keycode = java.awt.event.KeyEvent.VK_INSERT;
break;
case com.sun.star.awt.Key.DELETE:
keycode = java.awt.event.KeyEvent.VK_DELETE;
break;
case com.sun.star.awt.Key.ADD:
keycode = java.awt.event.KeyEvent.VK_ADD;
break;
case com.sun.star.awt.Key.SUBTRACT:
keycode = java.awt.event.KeyEvent.VK_SUBTRACT;
break;
case com.sun.star.awt.Key.MULTIPLY:
keycode = java.awt.event.KeyEvent.VK_MULTIPLY;
break;
case com.sun.star.awt.Key.DIVIDE:
keycode = java.awt.event.KeyEvent.VK_DIVIDE;
break;
case com.sun.star.awt.Key.POINT:
keycode = java.awt.event.KeyEvent.VK_PERIOD;
break;
case com.sun.star.awt.Key.COMMA:
keycode = java.awt.event.KeyEvent.VK_COMMA;
break;
case com.sun.star.awt.Key.LESS:
keycode = java.awt.event.KeyEvent.VK_LESS;
break;
case com.sun.star.awt.Key.GREATER:
keycode = java.awt.event.KeyEvent.VK_GREATER;
break;
case com.sun.star.awt.Key.EQUAL:
keycode = java.awt.event.KeyEvent.VK_EQUALS;
break;
case com.sun.star.awt.Key.CUT:
keycode = java.awt.event.KeyEvent.VK_CUT;
break;
case com.sun.star.awt.Key.COPY:
keycode = java.awt.event.KeyEvent.VK_COPY;
break;
case com.sun.star.awt.Key.PASTE:
keycode = java.awt.event.KeyEvent.VK_PASTE;
break;
case com.sun.star.awt.Key.UNDO:
keycode = java.awt.event.KeyEvent.VK_UNDO;
break;
case com.sun.star.awt.Key.FIND:
keycode = java.awt.event.KeyEvent.VK_FIND;
break;
case com.sun.star.awt.Key.PROPERTIES:
keycode = java.awt.event.KeyEvent.VK_PROPS;
break;
case com.sun.star.awt.Key.HELP:
keycode = java.awt.event.KeyEvent.VK_HELP;
break;
default:
}
return keycode;
}
/*
* AccessibleKeyBinding
*/
/** Returns a key binding for this object */
public Object getAccessibleKeyBinding(int i) {
try {
KeyStroke[] keys = unoAccessibleKeybinding.getAccessibleKeyBinding(i);
javax.swing.KeyStroke[] data = new javax.swing.KeyStroke[keys.length];
for (int j=0; j < keys.length; j++) {
int keyCode = convertKeyCode(keys[j].KeyCode);
if (keyCode != java.awt.event.KeyEvent.VK_UNDEFINED) {
data[j] = javax.swing.KeyStroke.getKeyStroke(keyCode, convertModifiers(keys[j].Modifiers));
} else {
data[j] = null;
}
}
if (keys.length == 1) {
return data[0];
} else {
return data;
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the number of key bindings for this object */
public int getAccessibleKeyBindingCount() {
try {
return unoAccessibleKeybinding.getAccessibleKeyBindingCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
deleted file mode 100644
index 4023ee9..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
+++ /dev/null
@@ -1,534 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import java.awt.Component;
import java.awt.EventQueue;
import java.lang.ref.WeakReference;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
import org.openoffice.java.accessibility.logging.XAccessibleEventLog;
/**
*/
public class AccessibleObjectFactory {
// This type is needed for conversions from/to uno Any
public static final Type XAccessibleType = new Type(XAccessible.class);
private static java.util.HashMap<String, WeakReference<Component>> objectList = new java.util.HashMap<String, WeakReference<Component>>();
private static java.awt.FocusTraversalPolicy focusTraversalPolicy = new FocusTraversalPolicy();
private static java.awt.EventQueue theEventQueue = java.awt.Toolkit.getDefaultToolkit().
getSystemEventQueue();
public static java.awt.EventQueue getEventQueue() {
return theEventQueue;
}
public static void postFocusGained(java.awt.Component c) {
getEventQueue().postEvent(new java.awt.event.FocusEvent(c, java.awt.event.FocusEvent.FOCUS_GAINED));
}
public static void postWindowGainedFocus(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_GAINED_FOCUS);
}
public static void postWindowLostFocus(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_LOST_FOCUS);
}
public static void postWindowActivated(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_ACTIVATED);
}
public static void postWindowDeactivated(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_DEACTIVATED);
}
public static void postWindowOpened(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_OPENED);
}
public static void postWindowClosed(java.awt.Window w) {
postWindowEvent(w, java.awt.event.WindowEvent.WINDOW_CLOSED);
}
public static void invokeAndWait() {
try {
EventQueue.invokeAndWait( new java.lang.Runnable () {
public void run() {
}
});
} catch (java.lang.reflect.InvocationTargetException e) {
} catch (java.lang.InterruptedException e) {
}
}
private static void postWindowEvent(java.awt.Window w, int i) {
theEventQueue.postEvent(new java.awt.event.WindowEvent(w, i));
}
public static java.awt.Component getAccessibleComponent(XAccessible xAccessible) {
java.awt.Component c = null;
if (xAccessible != null) {
// Retrieve unique id for the original UNO object to be used as a hash key
String oid = UnoRuntime.generateOid(xAccessible);
// Check if we already have a wrapper object for this context
synchronized (objectList) {
WeakReference<java.awt.Component> r = objectList.get(oid);
if(r != null) {
c = r.get();
}
}
}
return c;
}
public static void addChild(java.awt.Container parent, Object any) {
try {
addChild(parent, (XAccessible) AnyConverter.toObject(XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
}
}
public static void addChild(java.awt.Container parent, XAccessible child) {
try {
if (child != null) {
XAccessibleContext childAC = child.getAccessibleContext();
if (childAC != null) {
XAccessibleStateSet stateSet = childAC.getAccessibleStateSet();
if (stateSet != null) {
java.awt.Component c = getAccessibleComponent(child);
// Re-use existing wrapper if possible, create a new one otherwise
if (c != null) {
// Seems to be already in child list
if (parent.equals(c.getParent()))
return;
// Update general component states
c.setEnabled(stateSet.contains(AccessibleStateType.ENABLED));
c.setVisible(stateSet.contains(AccessibleStateType.VISIBLE));
} else {
c = createAccessibleComponentImpl(child, childAC, stateSet);
}
if (c != null) {
if (c instanceof java.awt.Container) {
populateContainer((java.awt.Container) c, childAC);
}
parent.add(c);
// Simulate focus gained event for new child
if (stateSet.contains(AccessibleStateType.FOCUSED)) {
postFocusGained(c);
}
}
}
}
}
} catch (com.sun.star.uno.RuntimeException e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
e.printStackTrace();
}
}
protected static void removeChild(java.awt.Container parent, Object any) {
try {
XAccessible xAccessible = (XAccessible) AnyConverter.toObject(XAccessibleType, any);
java.awt.Component c = getAccessibleComponent(xAccessible);
if (c != null) {
parent.remove(c);
if (c instanceof java.awt.Container) {
clearContainer((java.awt.Container) c);
}
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
}
}
/**
* Removes all children from the container parent
*/
protected static void clearContainer(java.awt.Container parent) {
// Purge all children from this container
int count = parent.getComponentCount();
for (int i = 0; i < count; i++) {
java.awt.Component c = parent.getComponent(i);
if (c instanceof java.awt.Container) {
clearContainer((java.awt.Container) c);
}
}
parent.removeAll();
}
/**
* Populates the given Container parent with wrapper objects for all children of parentAC. This method is
* intended to be called when a container is added using a CHILDREN_CHANGED event.
*/
protected static void populateContainer(java.awt.Container parent, XAccessibleContext parentAC) {
if (parentAC != null) {
try {
int childCount = parentAC.getAccessibleChildCount();
for (int i=0; i<childCount; i++) {
addChild(parent, parentAC.getAccessibleChild(i));
}
} catch (java.lang.Exception e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
e.printStackTrace();
}
}
}
/**
* Populates the given Container parent with wrapper objects for all children of parentAC. This method is
* intended to be called when a new window has been opened.
*/
protected static void populateContainer(java.awt.Container parent, XAccessibleContext parentAC, java.awt.Window frame) {
if (parentAC != null) {
try {
int childCount = parentAC.getAccessibleChildCount();
for (int i=0; i<childCount; i++) {
XAccessible child = parentAC.getAccessibleChild(i);
if (child != null) {
XAccessibleContext childAC = child.getAccessibleContext();
java.awt.Component c = createAccessibleComponent(child, childAC, frame);
if (c != null) {
if (c instanceof java.awt.Container) {
populateContainer((java.awt.Container) c, childAC, frame);
}
parent.add(c);
}
} else if (Build.DEBUG) {
System.err.println("ignoring not accessible child " + i);
}
}
}
catch (java.lang.Exception e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
e.printStackTrace();
}
}
}
protected static java.awt.Component createAccessibleComponent(XAccessible xAccessible) {
try {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
return createAccessibleComponentImpl(xAccessible, xAccessibleContext, xAccessibleContext.getAccessibleStateSet());
}
} catch (com.sun.star.uno.RuntimeException e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
e.printStackTrace();
}
return null;
}
protected static java.awt.Component createAccessibleComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext,
java.awt.Window frame) {
if (xAccessibleContext != null) {
try {
XAccessibleStateSet xAccessibleStateSet = xAccessibleContext.getAccessibleStateSet();
java.awt.Component c = createAccessibleComponentImpl(xAccessible, xAccessibleContext, xAccessibleStateSet);
if (c != null) {
// Set this component as initial component
if (xAccessibleStateSet.contains(AccessibleStateType.FOCUSED)) {
if (frame instanceof NativeFrame) {
((NativeFrame) frame).setInitialComponent(c);
}
}
return c;
}
} catch (com.sun.star.uno.RuntimeException e) {
System.err.println(e.getClass().getName() + " caught: " + e.getMessage());
e.printStackTrace();
}
}
return null;
}
protected static java.awt.Component createAccessibleComponentImpl(XAccessible xAccessible, XAccessibleContext xAccessibleContext,
XAccessibleStateSet xAccessibleStateSet) {
java.awt.Component c = null;
short role = xAccessibleContext.getAccessibleRole();
switch (role) {
case AccessibleRole.CANVAS:
c = new Container(javax.accessibility.AccessibleRole.CANVAS,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.CHECK_BOX:
c = new CheckBox(xAccessible, xAccessibleContext);
break;
case AccessibleRole.COMBO_BOX:
c = new ComboBox(xAccessible, xAccessibleContext);
break;
case AccessibleRole.DOCUMENT:
c = new Container(javax.accessibility.AccessibleRole.CANVAS,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.EMBEDDED_OBJECT:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.END_NOTE:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.FILLER:
c = new Container(javax.accessibility.AccessibleRole.FILLER,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.FOOTNOTE:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.FOOTER:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.GRAPHIC:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.HEADER:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.ICON:
c = new Icon(xAccessible, xAccessibleContext);
break;
case AccessibleRole.LABEL:
c = new Label(xAccessible, xAccessibleContext);
break;
case AccessibleRole.LAYERED_PANE:
c = new Container(javax.accessibility.AccessibleRole.LAYERED_PANE,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.LIST:
if (xAccessibleStateSet.contains(AccessibleStateType.MANAGES_DESCENDANTS)) {
c = new List(xAccessible, xAccessibleContext);
} else {
c = new Container(javax.accessibility.AccessibleRole.LIST,
xAccessible, xAccessibleContext);
}
break;
case AccessibleRole.MENU:
c = new Menu(xAccessible, xAccessibleContext);
break;
case AccessibleRole.MENU_BAR:
c = new MenuContainer(javax.accessibility.AccessibleRole.MENU_BAR, xAccessible, xAccessibleContext);
break;
case AccessibleRole.MENU_ITEM:
c = new MenuItem(xAccessible, xAccessibleContext);
break;
case AccessibleRole.POPUP_MENU:
c = new MenuContainer(javax.accessibility.AccessibleRole.POPUP_MENU, xAccessible, xAccessibleContext);
break;
case AccessibleRole.OPTION_PANE:
c = new Container(javax.accessibility.AccessibleRole.OPTION_PANE,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.PAGE_TAB:
c = new Container(javax.accessibility.AccessibleRole.PAGE_TAB, xAccessible, xAccessibleContext);
break;
case AccessibleRole.PAGE_TAB_LIST:
c = new Container(javax.accessibility.AccessibleRole.PAGE_TAB_LIST, xAccessible, xAccessibleContext);
break;
case AccessibleRole.PARAGRAPH:
case AccessibleRole.HEADING:
c = new Paragraph(xAccessible, xAccessibleContext);
break;
case AccessibleRole.PANEL:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.PUSH_BUTTON:
c = new Button(xAccessible, xAccessibleContext);
break;
case AccessibleRole.RADIO_BUTTON:
c = new RadioButton(xAccessible, xAccessibleContext);
break;
case AccessibleRole.ROOT_PANE:
c = new Container(javax.accessibility.AccessibleRole.ROOT_PANE,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.SCROLL_BAR:
c = new ScrollBar(xAccessible, xAccessibleContext);
break;
case AccessibleRole.SCROLL_PANE:
c = new Container(javax.accessibility.AccessibleRole.SCROLL_PANE,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.SEPARATOR:
c = new Separator(xAccessible, xAccessibleContext);
break;
case AccessibleRole.SHAPE:
c = new Container(javax.accessibility.AccessibleRole.CANVAS,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.SPLIT_PANE:
c = new Container(javax.accessibility.AccessibleRole.SPLIT_PANE,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.STATUS_BAR:
c = new Container(javax.accessibility.AccessibleRole.STATUS_BAR,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.COLUMN_HEADER:
case AccessibleRole.TABLE:
if (xAccessibleStateSet.contains(AccessibleStateType.MANAGES_DESCENDANTS)) {
c = new Table(xAccessible, xAccessibleContext,
xAccessibleStateSet.contains(AccessibleStateType.MULTI_SELECTABLE));
} else {
c = new Container(javax.accessibility.AccessibleRole.TABLE,
xAccessible, xAccessibleContext);
}
break;
case AccessibleRole.TABLE_CELL:
if( xAccessibleContext.getAccessibleChildCount() > 0 )
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
else
c = new Label(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TEXT:
c = new TextComponent(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TEXT_FRAME:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.TOGGLE_BUTTON:
c = new ToggleButton(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TOOL_BAR:
c = new Container(javax.accessibility.AccessibleRole.TOOL_BAR,
xAccessible, xAccessibleContext);
break;
case AccessibleRole.TOOL_TIP:
c = new ToolTip(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TREE:
c = new Tree(xAccessible, xAccessibleContext);
break;
case AccessibleRole.VIEW_PORT:
c = new Container(javax.accessibility.AccessibleRole.VIEWPORT,
xAccessible, xAccessibleContext);
break;
default:
System.err.println("Unmapped accessible object " + role);
System.err.println("usually mapped to " + AccessibleRoleAdapter.getAccessibleRole(role));
c = new Container(AccessibleRoleAdapter.getAccessibleRole(role),
xAccessible, xAccessibleContext);
break;
}
if (c != null) {
// Add the newly created object to the cache list
synchronized (objectList) {
objectList.put(c.toString(), new WeakReference<Component>(c));
if (Build.DEBUG) {
// System.out.println("Object cache now contains " + objectList.size() + " objects.");
}
}
AccessibleStateAdapter.setComponentState(c, xAccessibleStateSet);
if (! Build.PRODUCT) {
String property = System.getProperty("AccessBridgeLogging");
if ((property != null) && (property.indexOf("event") != -1)) {
XAccessibleEventLog.addEventListener(xAccessibleContext, c);
}
}
}
return c;
}
protected static void disposing(java.awt.Component c) {
if (c != null) {
synchronized (objectList) {
objectList.remove(c.toString());
}
}
}
public static java.awt.Window getTopWindow(XAccessible xAccessible) {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
short role = xAccessibleContext.getAccessibleRole();
XAccessibleStateSet xAccessibleStateSet = xAccessibleContext.getAccessibleStateSet();
XAccessibleComponent xAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class, xAccessibleContext);
java.awt.Window w;
if (role == AccessibleRole.DIALOG) {
w = new Dialog(new Application(),
xAccessibleContext.getAccessibleName(),
xAccessibleStateSet.contains(AccessibleStateType.MODAL),
xAccessibleComponent);
} else if (role == AccessibleRole.ALERT) {
w = new Alert(new Application(),
xAccessibleContext.getAccessibleName(),
xAccessibleStateSet.contains(AccessibleStateType.MODAL),
xAccessibleComponent);
} else if (role == AccessibleRole.FRAME) {
w = new Frame(xAccessibleContext.getAccessibleName(),
xAccessibleComponent);
} else if (role == AccessibleRole.WINDOW) {
java.awt.Window activeWindow =
java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
if (activeWindow != null) {
w = new Window(activeWindow, xAccessibleComponent);
} else {
if (Build.DEBUG) {
System.err.println("no active frame found for Window: " + role);
}
return null;
}
} else {
if (Build.DEBUG) {
System.err.println("invalid role for toplevel window: " + role);
}
return null;
}
populateContainer(w, xAccessibleContext, w);
w.setFocusTraversalPolicy(focusTraversalPolicy);
w.setVisible(true);
// Make the new window the focused one if it has an initialy focused object set.
java.awt.Component c = ((NativeFrame) w).getInitialComponent();
if (c != null) {
postWindowGainedFocus(w);
}
return w;
}
return null;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleRoleAdapter.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleRoleAdapter.java
deleted file mode 100644
index b0b7ea4..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleRoleAdapter.java
+++ /dev/null
@@ -1,139 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleContext;
/** This class maps the AccessibleRole(s) of the UNO accessibility API
* to the corresponding javax.accessibility objects.
*/
public abstract class AccessibleRoleAdapter {
/* This array is used as a mapping between the UNO AccessibleRole
* and the AccessibleRole objects of the Java accessibility API.
*/
public static final javax.accessibility.AccessibleRole[] data = {
javax.accessibility.AccessibleRole.UNKNOWN,
javax.accessibility.AccessibleRole.ALERT,
javax.accessibility.AccessibleRole.COLUMN_HEADER,
javax.accessibility.AccessibleRole.CANVAS,
javax.accessibility.AccessibleRole.CHECK_BOX,
javax.accessibility.AccessibleRole.CHECK_BOX, // CHECK_MENU_ITEM
javax.accessibility.AccessibleRole.COLOR_CHOOSER,
javax.accessibility.AccessibleRole.COMBO_BOX,
javax.accessibility.AccessibleRole.DATE_EDITOR,
javax.accessibility.AccessibleRole.DESKTOP_ICON,
javax.accessibility.AccessibleRole.DESKTOP_PANE,
javax.accessibility.AccessibleRole.DIRECTORY_PANE,
javax.accessibility.AccessibleRole.DIALOG,
javax.accessibility.AccessibleRole.CANVAS, // DOCUMENT
javax.accessibility.AccessibleRole.PANEL, // EMBEDDED_OBJECT
javax.accessibility.AccessibleRole.PANEL, // ENDNOTE
javax.accessibility.AccessibleRole.FILE_CHOOSER,
javax.accessibility.AccessibleRole.FILLER,
javax.accessibility.AccessibleRole.FONT_CHOOSER,
javax.accessibility.AccessibleRole.FOOTER,
javax.accessibility.AccessibleRole.PANEL, // FOOTNOTE
javax.accessibility.AccessibleRole.FRAME,
javax.accessibility.AccessibleRole.GLASS_PANE,
javax.accessibility.AccessibleRole.PANEL, // GRAPHIC
javax.accessibility.AccessibleRole.GROUP_BOX,
javax.accessibility.AccessibleRole.HEADER,
javax.accessibility.AccessibleRole.TEXT, // HEADING
javax.accessibility.AccessibleRole.HYPERLINK,
javax.accessibility.AccessibleRole.ICON,
javax.accessibility.AccessibleRole.INTERNAL_FRAME,
javax.accessibility.AccessibleRole.LABEL,
javax.accessibility.AccessibleRole.LAYERED_PANE,
javax.accessibility.AccessibleRole.LIST,
javax.accessibility.AccessibleRole.LABEL, // LIST_ITEM - required by Zoomtext
javax.accessibility.AccessibleRole.MENU,
javax.accessibility.AccessibleRole.MENU_BAR,
javax.accessibility.AccessibleRole.MENU_ITEM,
javax.accessibility.AccessibleRole.OPTION_PANE,
javax.accessibility.AccessibleRole.PAGE_TAB,
javax.accessibility.AccessibleRole.PAGE_TAB_LIST,
javax.accessibility.AccessibleRole.PANEL,
javax.accessibility.AccessibleRole.PARAGRAPH,
javax.accessibility.AccessibleRole.PASSWORD_TEXT,
javax.accessibility.AccessibleRole.POPUP_MENU,
javax.accessibility.AccessibleRole.PUSH_BUTTON,
javax.accessibility.AccessibleRole.PROGRESS_BAR,
javax.accessibility.AccessibleRole.RADIO_BUTTON,
javax.accessibility.AccessibleRole.RADIO_BUTTON, // RADIO_MENU_ITEM
javax.accessibility.AccessibleRole.ROW_HEADER,
javax.accessibility.AccessibleRole.ROOT_PANE,
javax.accessibility.AccessibleRole.SCROLL_BAR,
javax.accessibility.AccessibleRole.SCROLL_PANE,
javax.accessibility.AccessibleRole.CANVAS, // SHAPE
javax.accessibility.AccessibleRole.SEPARATOR,
javax.accessibility.AccessibleRole.SLIDER,
javax.accessibility.AccessibleRole.SPIN_BOX,
javax.accessibility.AccessibleRole.SPLIT_PANE,
javax.accessibility.AccessibleRole.STATUS_BAR,
javax.accessibility.AccessibleRole.TABLE,
javax.accessibility.AccessibleRole.LABEL, // TABLE_CELL - required by ZoomText
javax.accessibility.AccessibleRole.TEXT,
javax.accessibility.AccessibleRole.PANEL, // TEXT_FRAME
javax.accessibility.AccessibleRole.TOGGLE_BUTTON,
javax.accessibility.AccessibleRole.TOOL_BAR,
javax.accessibility.AccessibleRole.TOOL_TIP,
javax.accessibility.AccessibleRole.TREE,
javax.accessibility.AccessibleRole.VIEWPORT,
javax.accessibility.AccessibleRole.WINDOW,
javax.accessibility.AccessibleRole.RADIO_BUTTON, // BUTTON_DROPDOWN
javax.accessibility.AccessibleRole.RADIO_BUTTON, // BUTTON_MENU
javax.accessibility.AccessibleRole.PANEL, // CAPTION
javax.accessibility.AccessibleRole.PANEL, // CHART
javax.accessibility.AccessibleRole.EDITBAR,
javax.accessibility.AccessibleRole.PANEL, // FORM
javax.accessibility.AccessibleRole.PANEL, // IMAGE_MAP
javax.accessibility.AccessibleRole.PANEL, // NOTE
javax.accessibility.AccessibleRole.PANEL, // PAGE
javax.accessibility.AccessibleRole.RULER,
javax.accessibility.AccessibleRole.PANEL, // SECTION
javax.accessibility.AccessibleRole.LABEL, // TREE_ITEM
javax.accessibility.AccessibleRole.TABLE // TREE_TABLE
};
public static javax.accessibility.AccessibleRole getAccessibleRole(short role) {
if(role < data.length) {
if(data[role] == null) {
System.err.println("Unmapped role: " + role);
}
return data[role];
}
// FIXME: remove debug out
System.err.println("Unmappable role: " + role);
return null;
}
public static javax.accessibility.AccessibleRole getAccessibleRole(XAccessible unoAccessible) {
try {
XAccessibleContext unoAccessibleContext = unoAccessible.getAccessibleContext();
if (unoAccessibleContext != null) {
return getAccessibleRole(unoAccessibleContext.getAccessibleRole());
}
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return javax.accessibility.AccessibleRole.UNKNOWN;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleSelectionImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleSelectionImpl.java
deleted file mode 100644
index 80d07fd..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleSelectionImpl.java
+++ /dev/null
@@ -1,90 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
class AccessibleSelectionImpl implements javax.accessibility.AccessibleSelection {
XAccessibleSelection unoAccessibleSelection;
AccessibleSelectionImpl(XAccessibleSelection xAccessibleSelection) {
unoAccessibleSelection = xAccessibleSelection;
}
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
try {
return (javax.accessibility.Accessible) AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleSelection.getSelectedAccessibleChild(i));
} catch (com.sun.star.uno.Exception e) {
return null;
}
}
/** Adds the specified Accessible child of the object to the object's selection */
public void addAccessibleSelection(int i) {
try {
unoAccessibleSelection.selectAccessibleChild(i);
} catch (com.sun.star.uno.Exception e) {
}
}
/** Clears the selection in the object, so that no children in the object are selected */
public void clearAccessibleSelection() {
try {
unoAccessibleSelection.clearAccessibleSelection();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the number of Accessible children currently selected */
public int getAccessibleSelectionCount() {
try {
return unoAccessibleSelection.getSelectedAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Determines if the current child of this object is selected */
public boolean isAccessibleChildSelected(int i) {
try {
return unoAccessibleSelection.isAccessibleChildSelected(i);
} catch (com.sun.star.uno.Exception e) {
return false;
}
}
/** Removes the specified child of the object from the object's selection */
public void removeAccessibleSelection(int i) {
try {
unoAccessibleSelection.deselectAccessibleChild(i);
} catch (com.sun.star.uno.Exception e) {
}
}
/** Causes every child of the object to be selected if the object supports multiple selection */
public void selectAllAccessibleSelection() {
try {
unoAccessibleSelection.selectAllAccessibleChildren();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleStateAdapter.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleStateAdapter.java
deleted file mode 100644
index cd8373f..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleStateAdapter.java
+++ /dev/null
@@ -1,205 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import com.sun.star.uno.AnyConverter;
import com.sun.star.accessibility.AccessibleStateType;
import com.sun.star.accessibility.XAccessibleStateSet;
public class AccessibleStateAdapter {
private static final AccessibleState[] stateTypeMap = {
null,
AccessibleState.ACTIVE,
AccessibleState.ARMED,
AccessibleState.BUSY,
AccessibleState.CHECKED,
AccessibleExtendedState.DEFUNCT,
AccessibleState.EDITABLE,
AccessibleState.ENABLED,
AccessibleState.EXPANDABLE,
AccessibleState.EXPANDED,
AccessibleState.FOCUSABLE,
AccessibleState.FOCUSED,
AccessibleState.HORIZONTAL,
AccessibleState.ICONIFIED,
AccessibleExtendedState.INDETERMINATE,
AccessibleExtendedState.MANAGES_DESCENDANTS,
AccessibleState.MODAL,
AccessibleState.MULTI_LINE,
AccessibleState.MULTISELECTABLE,
AccessibleState.OPAQUE,
AccessibleState.PRESSED,
AccessibleState.RESIZABLE,
AccessibleState.SELECTABLE,
AccessibleState.SELECTED,
AccessibleExtendedState.SENSITIVE,
AccessibleState.SHOWING,
AccessibleState.SINGLE_LINE,
AccessibleExtendedState.STALE,
AccessibleState.TRANSIENT,
AccessibleState.VERTICAL,
AccessibleState.VISIBLE
};
private static void printToplevelStateMessage(AccessibleState s, java.awt.Component c) {
System.err.println("*** ERROR *** " + s + " state is a toplevel window state " + c);
}
private static String getDisplayName(java.awt.Component c) {
javax.accessibility.Accessible a = (javax.accessibility.Accessible) c;
if( a != null) {
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
return "[" + ac.getAccessibleRole() + "] " + ac.getAccessibleName();
} else {
return c.toString();
}
}
private static void printOutOfSyncMessage(AccessibleState s, java.awt.Component c, boolean enabled) {
System.err.println("*** ERROR *** " + s + " state out of sync (UNO state set: " + !enabled + ", Java component state: " + enabled + ") for " + getDisplayName(c));
}
public static AccessibleState getAccessibleState(Object any) {
try {
if (AnyConverter.isShort(any)) {
return getAccessibleState(AnyConverter.toShort(any));
}
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
}
public static AccessibleState getAccessibleState(short unoStateType) {
if (unoStateType > 0 && unoStateType < stateTypeMap.length) {
return stateTypeMap[unoStateType];
}
return null;
}
public static AccessibleStateSet getDefunctStateSet() {
AccessibleStateSet ass = new AccessibleStateSet();
ass.add(AccessibleExtendedState.DEFUNCT);
return ass;
}
public static void setComponentState(java.awt.Component c,
XAccessibleStateSet xAccessibleStateSet) {
try {
if (xAccessibleStateSet != null) {
// Set the boundings of the component if it is visible ..
if (!xAccessibleStateSet.contains(AccessibleStateType.VISIBLE)) {
c.setVisible(false);
}
// Set the components' enabled state ..
if (!xAccessibleStateSet.contains(AccessibleStateType.ENABLED)) {
c.setEnabled(false);
}
// Set the components' focusable state ..
if (!xAccessibleStateSet.contains(AccessibleStateType.FOCUSABLE)) {
c.setFocusable(false);
}
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
public static AccessibleStateSet getAccessibleStateSet(java.awt.Component c,
XAccessibleStateSet xAccessibleStateSet) {
try {
if (xAccessibleStateSet != null) {
AccessibleStateSet as = new AccessibleStateSet();
short[] unoStateTypes = xAccessibleStateSet.getStates();
for (int i=0; i<unoStateTypes.length; i++) {
if (unoStateTypes[i] > 0 &&
unoStateTypes[i] < stateTypeMap.length) {
as.add(stateTypeMap[unoStateTypes[i]]);
}
}
// Note: COLLAPSED does not exists in the UAA.
if (as.contains(AccessibleState.EXPANDABLE) &&
! as.contains(AccessibleState.EXPANDED)) {
as.add(AccessibleState.COLLAPSED);
}
// Sync office and Java FOCUSED state
boolean isFocusInSync;
if (c.isFocusOwner()) {
isFocusInSync = !as.add(AccessibleState.FOCUSED);
} else {
isFocusInSync = !as.remove(AccessibleState.FOCUSED);
}
// Sync office and Java ACTIVE state
boolean isActiveInSync;
if (c instanceof java.awt.Window && ((java.awt.Window) c).isActive()) {
isActiveInSync = !as.add(AccessibleState.ACTIVE);
} else {
isActiveInSync = !as.remove(AccessibleState.ACTIVE);
}
// Report out-of-sync messages
if (!Build.PRODUCT) {
if (!isFocusInSync) {
printOutOfSyncMessage(AccessibleState.FOCUSED, c, c.isFocusOwner());
}
if (!isActiveInSync) {
printOutOfSyncMessage(AccessibleState.ACTIVE, c, ((java.awt.Window) c).isActive());
}
if (as.contains(AccessibleState.ENABLED) != c.isEnabled()) {
printOutOfSyncMessage(AccessibleState.ENABLED, c, c.isEnabled());
}
if (as.contains(AccessibleState.FOCUSABLE) != c.isFocusable()) {
printOutOfSyncMessage(AccessibleState.FOCUSABLE, c, c.isFocusable());
}
if (as.contains(AccessibleState.SHOWING) != c.isShowing()) {
printOutOfSyncMessage(AccessibleState.SHOWING, c, c.isShowing());
}
if (as.contains(AccessibleState.VISIBLE) != c.isVisible()) {
printOutOfSyncMessage(AccessibleState.VISIBLE, c, c.isVisible());
}
// The following states are for toplevel windows only
if (! (c instanceof java.awt.Window)) {
if (as.contains(AccessibleState.ACTIVE)) {
printToplevelStateMessage(AccessibleState.ACTIVE, c);
}
if (as.contains(AccessibleState.ICONIFIED)) {
printToplevelStateMessage(AccessibleState.ICONIFIED, c);
}
if (as.contains(AccessibleState.MODAL)) {
printToplevelStateMessage(AccessibleState.MODAL, c);
}
}
}
return as;
}
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return getDefunctStateSet();
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java
deleted file mode 100644
index 92c10de..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java
+++ /dev/null
@@ -1,663 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.awt.*;
import com.sun.star.style.*;
import com.sun.star.uno.*;
import org.openoffice.java.accessibility.logging.*;
import java.text.BreakIterator;
import javax.accessibility.AccessibleText;
import javax.swing.text.StyleConstants;
/** The GenericAccessibleEditableText mapps the calls to the java AccessibleEditableText
* interface to the corresponding methods of the UNO XAccessibleEditableText interface.
*/
public class AccessibleTextImpl implements javax.accessibility.AccessibleText {
final static double toPointFactor = 1 / ((7 / 10) + 34.5);
final static String[] attributeList = {
"ParaAdjust", "CharBackColor", "CharWeight", "ParaFirstLineIndent",
"CharFontName", "CharHeight", "CharColor", "CharPosture",
"ParaLeftMargin", "ParaLineSpacing", "ParaTopMargin", "ParaBottomMargin",
"CharStrikeout", "CharEscapement", "ParaTabStops", "CharUnderline"
};
final static String[] localeAttributeList = {
"CharLocale", "CharLocaleAsian", "CharLocaleComplex"
};
XAccessibleText unoObject;
private javax.swing.text.TabSet tabSet = null;
private javax.swing.text.TabStop[] tabStops = null;
private static Type TextSegmentType = new Type(TextSegment.class);
private static Type UnoLocaleType = new Type(com.sun.star.lang.Locale.class);
/** Creates new GenericAccessibleEditableText object */
public AccessibleTextImpl(XAccessibleText xAccessibleText) {
if (Build.PRODUCT) {
unoObject = xAccessibleText;
} else {
String property = System.getProperty("AccessBridgeLogging");
if ((property != null) && (property.indexOf("text") != -1)) {
unoObject = new XAccessibleTextLog(xAccessibleText);
} else {
unoObject = xAccessibleText;
}
}
}
public AccessibleTextImpl() {
}
public static javax.accessibility.AccessibleText get(com.sun.star.uno.XInterface unoObject) {
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class, unoObject);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
protected static Object convertTextSegment(Object any) {
try {
if (AnyConverter.isObject(any)) {
TextSegment ts = (TextSegment)
AnyConverter.toObject(TextSegmentType, any);
if (ts != null) {
// Since there is nothing like a "range" object in the JAA yet,
// the Object[3] is a private negotiation with the JABG
Object[] array = { new Integer(ts.SegmentStart),
new Integer(ts.SegmentEnd), ts.SegmentText };
return array;
}
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
return null;
}
/** Returns the locale object.
*
* Since switching the UI language only takes effect on the next
* office start, UI elements can return a cached value here - given
* that Java UNO initializes the default locale correctly, this is
* the perfect place to grab this cached values.
*
* However, since there are more sophisticated components with
* potentially more than one locale, we first check for the
* CharLocale[Asian|Complex] property.
*/
protected java.util.Locale getLocale(int index) {
try {
com.sun.star.beans.PropertyValue[] propertyValues =
unoObject.getCharacterAttributes(index, localeAttributeList);
if (null != propertyValues) {
for (int i = 0; i < propertyValues.length; i++) {
com.sun.star.lang.Locale unoLocale = (com.sun.star.lang.Locale)
AnyConverter.toObject(UnoLocaleType, propertyValues[i]);
if (unoLocale != null) {
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
}
}
}
return java.util.Locale.getDefault();
} catch (com.sun.star.lang.IllegalArgumentException e) {
return java.util.Locale.getDefault();
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return java.util.Locale.getDefault();
}
}
/** Returns the string after a given index
*
* The Java word iterator has a different understanding of what
* a word is than the word iterator used by OOo, so we use the
* Java iterators to ensure maximal compatibility with Java.
*/
public String getAfterIndex(int part, int index) {
switch (part) {
case AccessibleText.CHARACTER:
try {
String s = unoObject.getText();
return s.substring(index+1, index+2);
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.WORD:
try {
String s = unoObject.getText();
BreakIterator words = BreakIterator.getWordInstance(getLocale(index));
words.setText(s);
int start = words.following(index);
if (start == BreakIterator.DONE || start >= s.length()) {
return null;
}
int end = words.following(start);
if (end == BreakIterator.DONE || end >= s.length()) {
return null;
}
return s.substring(start, end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.SENTENCE:
try {
String s = unoObject.getText();
BreakIterator sentence =
BreakIterator.getSentenceInstance(getLocale(index));
sentence.setText(s);
int start = sentence.following(index);
if (start == BreakIterator.DONE || start >= s.length()) {
return null;
}
int end = sentence.following(start);
if (end == BreakIterator.DONE || end >= s.length()) {
return null;
}
return s.substring(start, end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case 4:
try {
TextSegment ts = unoObject.getTextBehindIndex(index, AccessibleTextType.LINE);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
// Workaround for #104847#
if (index > 0 && getCharCount() == index) {
return getAfterIndex(part, index - 1);
}
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
case 5:
try {
TextSegment ts = unoObject.getTextBehindIndex(index, AccessibleTextType.ATTRIBUTE_RUN);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
default:
return null;
}
}
/** Returns the zero-based offset of the caret */
public int getCaretPosition() {
try {
return unoObject.getCaretPosition();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the start offset within the selected text */
public int getSelectionStart() {
try {
int index = unoObject.getSelectionStart();
if (index == -1) {
index = getCaretPosition();
}
return index;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
protected void setAttribute(javax.swing.text.MutableAttributeSet as,
com.sun.star.beans.PropertyValue property) {
try {
// Map alignment attribute
if (property.Name.equals("ParaAdjust")) {
ParagraphAdjust adjust = null;
if (property.Value instanceof ParagraphAdjust) {
adjust = (ParagraphAdjust) property.Value;
} else if (property.Value instanceof Any) {
adjust = (ParagraphAdjust) AnyConverter.toObject(new Type(
ParagraphAdjust.class), property.Value);
} else {
adjust = ParagraphAdjust.fromInt(AnyConverter.toInt(
property.Value));
}
if (adjust != null) {
if (adjust.equals(ParagraphAdjust.LEFT)) {
StyleConstants.setAlignment(as,
StyleConstants.ALIGN_LEFT);
} else if (adjust.equals(ParagraphAdjust.RIGHT)) {
StyleConstants.setAlignment(as,
StyleConstants.ALIGN_RIGHT);
} else if (adjust.equals(ParagraphAdjust.CENTER)) {
StyleConstants.setAlignment(as,
StyleConstants.ALIGN_CENTER);
} else if (adjust.equals(ParagraphAdjust.BLOCK) ||
adjust.equals(ParagraphAdjust.STRETCH)) {
StyleConstants.setAlignment(as,
StyleConstants.ALIGN_JUSTIFIED);
}
} else if (Build.DEBUG) {
System.err.println(
"Invalid property value for key ParaAdjust: " +
property.Value.getClass().getName());
}
// Map background color
} else if (property.Name.equals("CharBackColor")) {
StyleConstants.setBackground(as,
new java.awt.Color(AnyConverter.toInt(property.Value)));
// FIXME: BidiLevel
// Set bold attribute
} else if (property.Name.equals("CharWeight")) {
boolean isBold = AnyConverter.toFloat(property.Value) > 125;
StyleConstants.setBold(as, isBold);
// FIXME: Java 1.4 ComponentAttribute, ComponentElementName, ComposedTextAttribute
// Set FirstLineIndent attribute
} else if (property.Name.equals("ParaFirstLineIndent")) {
StyleConstants.setFirstLineIndent(as,
(float) (toPointFactor * AnyConverter.toInt(property.Value)));
// Set font family attribute
} else if (property.Name.equals("CharFontName")) {
StyleConstants.setFontFamily(as, AnyConverter.toString(property.Value));
// Set font size attribute
} else if (property.Name.equals("CharHeight")) {
StyleConstants.setFontSize(as,
(int) AnyConverter.toFloat(property.Value));
// Map foreground color
} else if (property.Name.equals("CharColor")) {
StyleConstants.setForeground(as,
new java.awt.Color(AnyConverter.toInt(property.Value)));
// FIXME: IconAttribute, IconElementName
// Set italic attribute
} else if (property.Name.equals("CharPosture")) {
FontSlant fs = null;
if (property.Value instanceof FontSlant) {
fs = (FontSlant) property.Value;
} else if (property.Value instanceof Any) {
fs = (FontSlant) AnyConverter.toObject(new Type(
FontSlant.class), property.Value);
}
if (fs != null) {
StyleConstants.setItalic(as, FontSlant.ITALIC.equals(fs));
}
// Set left indent attribute
} else if (property.Name.equals("ParaLeftMargin")) {
StyleConstants.setLeftIndent(as,
(float) (toPointFactor * AnyConverter.toInt(property.Value)));
// Set right indent attribute
} else if (property.Name.equals("ParaRightMargin")) {
StyleConstants.setRightIndent(as,
(float) (toPointFactor * AnyConverter.toInt(property.Value)));
}
// Set line spacing attribute
else if (property.Name.equals("ParaLineSpacing")) {
LineSpacing ls = null;
if (property.Value instanceof LineSpacing) {
ls = (LineSpacing) property.Value;
} else if (property.Value instanceof Any) {
ls = (LineSpacing) AnyConverter.toObject(new Type(
LineSpacing.class), property.Value);
}
if (ls != null) {
StyleConstants.setLineSpacing(as,
(float) (toPointFactor * ls.Height));
}
}
// FIXME: Java 1.4 NameAttribute, Orientation, ResolveAttribute
// Set space above attribute
else if (property.Name.equals("ParaTopMargin")) {
StyleConstants.setSpaceAbove(as,
(float) (toPointFactor * AnyConverter.toInt(property.Value)));
}
// Set space below attribute
else if (property.Name.equals("ParaBottomMargin")) {
StyleConstants.setSpaceBelow(as,
(float) (toPointFactor * AnyConverter.toInt(property.Value)));
// Set strike through attribute
} else if (property.Name.equals("CharStrikeout")) {
boolean isStrikeThrough = (FontStrikeout.NONE != AnyConverter.toShort(property.Value));
StyleConstants.setStrikeThrough(as, isStrikeThrough);
// Set sub-/superscript attribute
} else if (property.Name.equals("CharEscapement")) {
short value = AnyConverter.toShort(property.Value);
if (value > 0) {
StyleConstants.setSuperscript(as, true);
} else if (value < 0) {
StyleConstants.setSubscript(as, true);
}
// Set tabset attribute
} else if (property.Name.equals("ParaTabStops")) {
TabStop[] unoTabStops = (TabStop[]) AnyConverter.toArray(property.Value);
javax.swing.text.TabStop[] tabStops = new javax.swing.text.TabStop[unoTabStops.length];
for (int index2 = 0; index2 < unoTabStops.length; index2++) {
float pos = (float) (toPointFactor * unoTabStops[index2].Position);
if (unoTabStops[index2].Alignment.equals(TabAlign.LEFT)) {
tabStops[index2] = new javax.swing.text.TabStop(pos,
javax.swing.text.TabStop.ALIGN_LEFT,
javax.swing.text.TabStop.LEAD_NONE);
} else if (unoTabStops[index2].Alignment.equals(
TabAlign.CENTER)) {
tabStops[index2] = new javax.swing.text.TabStop(pos,
javax.swing.text.TabStop.ALIGN_CENTER,
javax.swing.text.TabStop.LEAD_NONE);
} else if (unoTabStops[index2].Alignment.equals(
TabAlign.RIGHT)) {
tabStops[index2] = new javax.swing.text.TabStop(pos,
javax.swing.text.TabStop.ALIGN_RIGHT,
javax.swing.text.TabStop.LEAD_NONE);
} else if (unoTabStops[index2].Alignment.equals(
TabAlign.DECIMAL)) {
tabStops[index2] = new javax.swing.text.TabStop(pos,
javax.swing.text.TabStop.ALIGN_DECIMAL,
javax.swing.text.TabStop.LEAD_NONE);
} else {
tabStops[index2] = new javax.swing.text.TabStop(pos);
}
}
// Re-use tabSet object if possible to make AttributeSet.equals work
if ((this.tabSet == null) ||
!java.util.Arrays.equals(tabStops, this.tabStops)) {
this.tabStops = tabStops;
this.tabSet = new javax.swing.text.TabSet(tabStops);
}
StyleConstants.setTabSet(as, this.tabSet);
// Set underline attribute
} else if (property.Name.equals("CharUnderline")) {
boolean isUnderline = (FontUnderline.NONE != AnyConverter.toShort(property.Value));
StyleConstants.setUnderline(as, isUnderline);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
if (Build.DEBUG) {
System.err.println("*** ERROR *** " + e.getClass().getName() +
" caught for property " + property.Name + ": " +
e.getMessage());
System.err.println(" value is of type " +
property.Value.getClass().getName());
}
}
}
/** Returns the AttributSet for a given character at a given index */
public javax.swing.text.AttributeSet getCharacterAttribute(int index) {
try {
com.sun.star.beans.PropertyValue[] propertyValues = unoObject.getCharacterAttributes(index,
attributeList);
javax.swing.text.SimpleAttributeSet attributeSet = new javax.swing.text.SimpleAttributeSet();
if (null != propertyValues) {
for (int i = 0; i < propertyValues.length; i++) {
setAttribute(attributeSet, propertyValues[i]);
}
}
return attributeSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
if ((index > 0) && (getCharCount() == index)) {
return getCharacterAttribute(index - 1);
}
return null;
}
}
/** Given a point in local coordinates, return the zero-based index of the character under that point */
public int getIndexAtPoint(java.awt.Point point) {
try {
return unoObject.getIndexAtPoint(new Point(point.x, point.y));
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the end offset within the selected text */
public int getSelectionEnd() {
try {
int index = unoObject.getSelectionEnd();
if (index == -1) {
index = getCaretPosition();
}
return index;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the string before a given index
*
* The Java word iterator has a different understanding of what
* a word is than the word iterator used by OOo, so we use the
* Java iterators to ensure maximal compatibility with Java.
*/
public java.lang.String getBeforeIndex(int part, int index) {
switch (part) {
case AccessibleText.CHARACTER:
try {
String s = unoObject.getText();
return s.substring(index-1, index);
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.WORD:
try {
String s = unoObject.getText();
BreakIterator words = BreakIterator.getWordInstance(getLocale(index));
words.setText(s);
int end = words.following(index);
end = words.previous();
int start = words.previous();
if (start == BreakIterator.DONE) {
return null;
}
return s.substring(start, end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.SENTENCE:
try {
String s = unoObject.getText();
BreakIterator sentence =
BreakIterator.getSentenceInstance(getLocale(index));
sentence.setText(s);
int end = sentence.following(index);
end = sentence.previous();
int start = sentence.previous();
if (start == BreakIterator.DONE) {
return null;
}
return s.substring(start, end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case 4:
try {
TextSegment ts = unoObject.getTextBeforeIndex(index, AccessibleTextType.LINE);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
// Workaround for #104847#
if (index > 0 && getCharCount() == index) {
return getBeforeIndex(part, index - 1);
}
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
case 5:
try {
TextSegment ts = unoObject.getTextBeforeIndex(index, AccessibleTextType.ATTRIBUTE_RUN);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
default:
return null;
}
}
/** Returns the string at a given index
*
* The Java word iterator has a different understanding of what
* a word is than the word iterator used by OOo, so we use the
* Java iterators to ensure maximal compatibility with Java.
*/
public java.lang.String getAtIndex(int part, int index) {
switch (part) {
case AccessibleText.CHARACTER:
try {
String s = unoObject.getText();
return s.substring(index, index + 1);
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.WORD:
try {
String s = unoObject.getText();
BreakIterator words = BreakIterator.getWordInstance(getLocale(index));
words.setText(s);
int end = words.following(index);
return s.substring(words.previous(), end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case AccessibleText.SENTENCE:
try {
String s = unoObject.getText();
BreakIterator sentence =
BreakIterator.getSentenceInstance(getLocale(index));
sentence.setText(s);
int end = sentence.following(index);
return s.substring(sentence.previous(), end);
} catch (IllegalArgumentException e) {
return null;
} catch (IndexOutOfBoundsException e) {
return null;
}
case 4:
try {
TextSegment ts = unoObject.getTextAtIndex(index, AccessibleTextType.LINE);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
// Workaround for #104847#
if (index > 0 && getCharCount() == index) {
return getAtIndex(part, index - 1);
}
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
case 5:
try {
TextSegment ts = unoObject.getTextAtIndex(index, AccessibleTextType.ATTRIBUTE_RUN);
return ts.SegmentText;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
default:
return null;
}
}
/** Returns the number of characters (valid indicies) */
public int getCharCount() {
try {
return unoObject.getCharacterCount();
} catch (com.sun.star.uno.RuntimeException e) {
}
return 0;
}
/** Returns the portion of the text that is selected */
public java.lang.String getSelectedText() {
try {
return unoObject.getSelectedText();
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
/** Determines the bounding box of the character at the given index into the string */
public java.awt.Rectangle getCharacterBounds(int index) {
try {
Rectangle unoRect = unoObject.getCharacterBounds(index);
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
if ((index > 0) && (getCharCount() == index)) {
return getCharacterBounds(index - 1);
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return new java.awt.Rectangle();
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleValueImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleValueImpl.java
deleted file mode 100644
index 32722e3..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleValueImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.XAccessibleValue;
import com.sun.star.uno.AnyConverter;
/** The AccessibleValueImpl mappes the calls to the java AccessibleValue
* interface to the corresponding methods of the UNO XAccessibleValue interface
*/
public class AccessibleValueImpl implements javax.accessibility.AccessibleValue {
protected XAccessibleValue unoObject;
/** Creates new AccessibleValueImpl */
public AccessibleValueImpl(XAccessibleValue xAccessibleValue) {
unoObject = xAccessibleValue;
}
public static java.lang.Number toNumber(java.lang.Object any) {
try {
if(AnyConverter.isByte(any)) {
return new Byte(AnyConverter.toByte(any));
} else if (AnyConverter.isShort(any)) {
return new Short(AnyConverter.toShort(any));
} else if (AnyConverter.isInt(any)) {
return new Integer(AnyConverter.toInt(any));
} else if (AnyConverter.isLong(any)) {
return new Long(AnyConverter.toLong(any));
} else if (AnyConverter.isFloat(any)) {
return new Float(AnyConverter.toFloat(any));
} else if (AnyConverter.isDouble(any)) {
return new Double(AnyConverter.toDouble(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
return null;
}
public java.lang.Number getMinimumAccessibleValue() {
try {
return toNumber(unoObject.getMinimumValue());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public java.lang.Number getCurrentAccessibleValue() {
try {
return toNumber(unoObject.getCurrentValue());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public java.lang.Number getMaximumAccessibleValue() {
try {
return toNumber(unoObject.getMaximumValue());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public boolean setCurrentAccessibleValue(java.lang.Number number) {
try {
return unoObject.setCurrentValue(number);
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Alert.java b/accessibility/bridge/org/openoffice/java/accessibility/Alert.java
deleted file mode 100644
index 5782515..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Alert.java
+++ /dev/null
@@ -1,57 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleRole;
import com.sun.star.accessibility.*;
public class Alert extends Dialog {
protected Alert(java.awt.Frame owner, XAccessibleComponent xAccessibleComponent) {
super(owner, xAccessibleComponent);
}
protected Alert(java.awt.Frame owner, String name, XAccessibleComponent xAccessibleComponent) {
super(owner, name, xAccessibleComponent);
}
protected Alert(java.awt.Frame owner, String name, boolean modal, XAccessibleComponent xAccessibleComponent) {
super(owner, name, modal, xAccessibleComponent);
}
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleAlert();
accessibleContext.setAccessibleName(getTitle());
}
return accessibleContext;
}
protected class AccessibleAlert extends AccessibleDialog {
protected AccessibleAlert() {
super();
}
public AccessibleRole getAccessibleRole() {
return AccessibleRole.ALERT;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Application.java b/accessibility/bridge/org/openoffice/java/accessibility/Application.java
deleted file mode 100644
index 2705bf2..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Application.java
+++ /dev/null
@@ -1,36 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
public class Application extends java.awt.Frame implements Accessible {
protected AccessibleContext accessibleContext = null;
protected Application() {
super();
}
public boolean isShowing() {
return true;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Button.java b/accessibility/bridge/org/openoffice/java/accessibility/Button.java
deleted file mode 100644
index e0895ad..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Button.java
+++ /dev/null
@@ -1,148 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
class Button extends AbstractButton implements javax.accessibility.Accessible {
public Button(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleButtonListener();
}
protected class AccessibleButtonListener
extends AccessibleUNOComponentListener {
protected AccessibleButtonListener() {
super();
}
protected javax.accessibility.AccessibleContext getContext( Object any ) {
try {
XAccessible xAccessible = (XAccessible)
AnyConverter.toObject( AccessibleObjectFactory.XAccessibleType, any );
javax.accessibility.Accessible accessible =
(javax.accessibility.Accessible) Button.this.getComponent( xAccessible );
return accessible.getAccessibleContext();
} catch (com.sun.star.lang.IllegalArgumentException e) {
return null;
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.CHILD:
java.awt.Component c = getComponent(unoAccessible);
Object values[] = { null, null };
if (AnyConverter.isObject(event.OldValue)) {
values[0] = getContext( event.OldValue );
}
if (AnyConverter.isObject(event.NewValue)) {
values[1] = getContext( event.NewValue);
}
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
values[0], values[1]);
break;
default:
super.notifyEvent(event);
}
}
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleButton();
}
protected java.awt.Component getComponent(XAccessible unoAccessible) {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(unoAccessible);
if (c == null) {
c = AccessibleObjectFactory.createAccessibleComponent(unoAccessible);
if (c instanceof javax.accessibility.Accessible) {
((javax.accessibility.Accessible) c).getAccessibleContext()
.setAccessibleParent(this);
}
if( c instanceof java.awt.Container ) {
AccessibleObjectFactory.populateContainer((java.awt.Container) c, unoAccessible.getAccessibleContext() );
}
}
return c;
}
protected class AccessibleButton extends AccessibleAbstractButton {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.PUSH_BUTTON;
}
/** Returns the number of accessible children of the object */
public int getAccessibleChildrenCount() {
try {
return unoAccessibleContext.getAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the specified Accessible child of the object */
public synchronized javax.accessibility.Accessible getAccessibleChild( int i) {
try {
return (javax.accessibility.Accessible) getComponent( unoAccessibleContext.getAccessibleChild(i) );
} catch (com.sun.star.uno.RuntimeException e) {
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
}
return null;
}
/*
* AccessibleComponent
*/
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = getComponent(unoAccessibleComponent.getAccessibleAtPoint(
new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/CheckBox.java b/accessibility/bridge/org/openoffice/java/accessibility/CheckBox.java
deleted file mode 100644
index db12c24..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/CheckBox.java
+++ /dev/null
@@ -1,41 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
class CheckBox extends ToggleButton {
public CheckBox(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleCheckBox();
}
protected class AccessibleCheckBox extends AccessibleToggleButton {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.CHECK_BOX;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/ComboBox.java b/accessibility/bridge/org/openoffice/java/accessibility/ComboBox.java
deleted file mode 100644
index a23967c..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/ComboBox.java
+++ /dev/null
@@ -1,114 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/**
*/
public class ComboBox extends Container {
private XAccessibleAction unoAccessibleAction = null;
public ComboBox(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(javax.accessibility.AccessibleRole.COMBO_BOX, xAccessible,
xAccessibleContext);
}
/** Appends the specified component to the end of this container */
public java.awt.Component add(java.awt.Component c) {
// List should be always the first child
if (c instanceof List) {
return super.add(c, 0);
} else {
return super.add(c);
}
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleComboBox();
}
protected class AccessibleComboBox extends AccessibleContainer
implements javax.accessibility.AccessibleAction {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleComboBox() {
super();
}
/*
* AccessibleContext
*/
/** Gets the AccessibleAction associated with this object that supports one or more actions */
public javax.accessibility.AccessibleAction getAccessibleAction() {
if (unoAccessibleAction == null) {
unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class,
unoAccessibleContext);
if (unoAccessibleAction == null) {
return null;
}
}
return this;
}
/*
* AccessibleAction
*/
/** Performs the specified Action on the object */
public boolean doAccessibleAction(int param) {
if (param == 0) {
try {
return unoAccessibleAction.doAccessibleAction(0);
} catch (com.sun.star.uno.Exception e) {
}
}
return false;
}
/** Returns a description of the specified action of the object */
public java.lang.String getAccessibleActionDescription(int param) {
return javax.swing.UIManager.getString("ComboBox.togglePopupText");
}
/** Returns the number of accessible actions available in this object */
public int getAccessibleActionCount() {
return 1;
}
}
/**
* Returns whether this Component can be focused.
*
* @return <code>true</code> if this Component is focusable;
* <code>false</code> otherwise.
* @see #setFocusable
* @since 1.4
*/
public boolean isFocusable() {
return true;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Component.java b/accessibility/bridge/org/openoffice/java/accessibility/Component.java
deleted file mode 100644
index 821d2e9..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Component.java
+++ /dev/null
@@ -1,728 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import java.awt.EventQueue;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleState;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
public abstract class Component extends java.awt.Component {
public static final Type RectangleType = new Type(com.sun.star.awt.Rectangle.class);
public static final Type SelectionType = new Type(com.sun.star.awt.Selection.class);
protected XAccessible unoAccessible;
protected XAccessibleContext unoAccessibleContext;
protected XAccessibleComponent unoAccessibleComponent;
protected boolean disposed = false;
protected Component(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super();
unoAccessible = xAccessible;
unoAccessibleContext = xAccessibleContext;
unoAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class, xAccessibleContext);
// Add the event listener right away, because the global focus notification doesn't
// work yet ..
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
unoAccessibleComponent);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(createEventListener());
}
}
/**
* Determines whether this <code>Component</code> is showing on screen.
* This means that the component must be visible, and it must be in a
* <code>container</code> that is visible and showing.
* @see #addNotify
* @see #removeNotify
* @since JDK1.0
*/
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
/**
* Makes this <code>Component</code> displayable by connecting it to a
* native screen resource.
* This method is called internally by the toolkit and should
* not be called directly by programs.
* @see #isDisplayable
* @see #removeNotify
* @since JDK1.0
*/
public void addNotify() {
}
/**
* Makes this <code>Component</code> undisplayable by destroying it native
* screen resource.
* This method is called by the toolkit internally and should
* not be called directly by programs.
* @see #isDisplayable
* @see #addNotify
* @since JDK1.0
*/
public void removeNotify() {
}
/*
* Fake the java focus handling. This is necessary to keep OOo focus
* in sync with the java focus. See java.awt.DefaultKeyboardFocusManager
* for implementation details.
**/
/** Requests focus for this object */
public void requestFocus() {
}
/** Requests focus for this object */
public boolean requestFocus(boolean temporary) {
// Must be a no-op to make focus handling work
return true;
}
/** Requests the focus for this object in the containing window */
public boolean requestFocusInWindow() {
return requestFocusInWindow(false);
}
/** Requests the focus for this object in the containing window */
protected boolean requestFocusInWindow(boolean temporary) {
if (isFocusable() && isVisible()) {
getEventQueue().postEvent(new java.awt.event.FocusEvent(this, java.awt.event.FocusEvent.FOCUS_GAINED, temporary));
return true;
}
return false;
}
public Object[] getAccessibleComponents(Object[] targetSet) {
try {
java.util.ArrayList<java.awt.Component> list = new java.util.ArrayList<java.awt.Component>(targetSet.length);
for (int i=0; i < targetSet.length; i++) {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
UnoRuntime.queryInterface(XAccessible.class, targetSet[i]));
if (c != null) {
list.add(c);
}
}
list.trimToSize();
return list.toArray();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
protected java.awt.EventQueue getEventQueue() {
return java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
}
protected class PropertyChangeBroadcaster implements Runnable {
String propertyName;
Object oldValue;
Object newValue;
public PropertyChangeBroadcaster(String name, Object param1, Object param2) {
propertyName = name;
oldValue = param1;
newValue = param2;
}
public void run() {
// Because this code is executed in the DispatchThread, it is better to catch every
// exception that might occur
try {
AccessibleContext ac = accessibleContext;
if (ac != null) {
ac.firePropertyChange(propertyName, oldValue, newValue);
}
} catch (java.lang.Exception e) {
if (Build.DEBUG) {
System.err.println(e.getClass().getName() + " caught propagating " + propertyName + " event: " + e.getMessage());
e.printStackTrace();
}
}
}
}
protected void firePropertyChange(String property, Object oldValue, Object newValue) {
EventQueue.invokeLater(new PropertyChangeBroadcaster(property, oldValue, newValue));
}
protected void fireStatePropertyChange(AccessibleState state, boolean set) {
PropertyChangeBroadcaster broadcaster;
// if (Build.DEBUG) {
// System.err.println("[" + AccessibleRoleAdapter.getAccessibleRole(unoAccessibleContext.getAccessibleRole()) + "] " +
// unoAccessibleContext.getAccessibleName() + " is " + (set ? "now " : "no longer ") + state);
// }
if (set) {
broadcaster = new PropertyChangeBroadcaster(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, state);
} else {
broadcaster = new PropertyChangeBroadcaster(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
state, null);
}
EventQueue.invokeLater(broadcaster);
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleUNOComponentListener implements XAccessibleEventListener {
protected AccessibleUNOComponentListener() {
}
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.ACTIVE:
// Only frames should be active
break;
case AccessibleStateType.ARMED:
fireStatePropertyChange(AccessibleState.ARMED, enable);
break;
case AccessibleStateType.CHECKED:
fireStatePropertyChange(AccessibleState.CHECKED, enable);
break;
case AccessibleStateType.ENABLED:
setEnabled(enable);
// Since we can't access awt.Componet.accessibleContext, we need to fire
// this event manually ..
fireStatePropertyChange(AccessibleState.ENABLED, enable);
break;
case AccessibleStateType.FOCUSED:
getEventQueue().postEvent(new java.awt.event.FocusEvent(
Component.this, enable ?
java.awt.event.FocusEvent.FOCUS_GAINED :
java.awt.event.FocusEvent.FOCUS_LOST));
break;
case AccessibleStateType.PRESSED:
fireStatePropertyChange(AccessibleState.PRESSED, enable);
break;
case AccessibleStateType.SELECTED:
fireStatePropertyChange(AccessibleState.SELECTED, enable);
break;
case AccessibleStateType.SENSITIVE:
// This state equals ENABLED in OOo (but not in Gtk+) and does not exist in Java 1.5
break;
case AccessibleStateType.SHOWING:
// fireStatePropertyChange(AccessibleState.SHOWING, enable);
break;
case AccessibleStateType.VISIBLE:
Component.this.setVisible(enable);
break;
default:
if (Build.DEBUG) {
System.err.println("[component]: " + getName() + "unexpected state change " + state);
}
break;
}
}
/** Updates the accessible name and fires the appropriate PropertyChangedEvent */
protected void handleNameChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
if (accessibleContext != null) {
accessibleContext.setAccessibleName(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the accessible description and fires the appropriate PropertyChangedEvent */
protected void handleDescriptionChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
if (accessibleContext != null) {
accessibleContext.setAccessibleDescription(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the internal states and fires the appropriate PropertyChangedEvent */
protected void handleStateChangedEvent(Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
setComponentState(AnyConverter.toShort(any1), false);
}
if (AnyConverter.isShort(any2)) {
setComponentState(AnyConverter.toShort(any2), true);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
if ( !disposed ) {
switch (event.EventId) {
case AccessibleEventId.ACTION_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_ACTION_PROPERTY,
toNumber(event.OldValue), toNumber(event.NewValue));
break;
case AccessibleEventId.NAME_CHANGED:
// Set the accessible name for the corresponding context, which will fire a property
// change event itself
handleNameChangedEvent(event.NewValue);
break;
case AccessibleEventId.DESCRIPTION_CHANGED:
// Set the accessible description for the corresponding context, which will fire a property
// change event itself - so do not set propertyName !
handleDescriptionChangedEvent(event.NewValue);
break;
case AccessibleEventId.CHILD:
if (Build.DEBUG) {
System.out.println("Unexpected child event for object of role " + getAccessibleContext().getAccessibleRole());
}
break;
case AccessibleEventId.STATE_CHANGED:
// Update the internal state set and fire the appropriate PropertyChangedEvent
handleStateChangedEvent(event.OldValue, event.NewValue);
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, null);
break;
case AccessibleEventId.TEXT_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_TEXT_PROPERTY,
AccessibleTextImpl.convertTextSegment(event.OldValue),
AccessibleTextImpl.convertTextSegment(event.NewValue));
break;
/*
* the Java AccessBridge for GNOME maps SELECTION_PROPERTY change events
* for objects of role TEXT to object:text-selection-changed
*/
case AccessibleEventId.TEXT_SELECTION_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY, null, null);
break;
case AccessibleEventId.CARET_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_CARET_PROPERTY, toNumber(event.OldValue), toNumber(event.NewValue));
break;
case AccessibleEventId.VALUE_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, toNumber(event.OldValue), toNumber(event.NewValue));
default:
// Warn about unhandled events
if(Build.DEBUG) {
System.out.println(this + ": unhandled accessibility event id=" + event.EventId);
}
}
}
}
/** Called by OpenOffice process to notify that the UNO component is disposing */
public void disposing(com.sun.star.lang.EventObject eventObject) {
disposed = true;
AccessibleObjectFactory.disposing(Component.this);
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleUNOComponentListener();
}
protected javax.accessibility.AccessibleContext accessibleContext = null;
/** This method actually creates the AccessibleContext object returned by
* getAccessibleContext().
*/
protected javax.accessibility.AccessibleContext createAccessibleContext() {
return null;
}
/** Returns the AccessibleContext associated with this object */
public final javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
try {
AccessibleContext ac = createAccessibleContext();
if (ac != null) {
// Set accessible name and description here to avoid
// unnecessary property change events later ..
ac.setAccessibleName(unoAccessibleContext.getAccessibleName());
ac.setAccessibleDescription(unoAccessibleContext.getAccessibleDescription());
accessibleContext = ac;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
return accessibleContext;
}
protected abstract class AccessibleUNOComponent extends java.awt.Component.AccessibleAWTComponent
implements javax.accessibility.AccessibleExtendedComponent {
protected java.awt.event.ComponentListener accessibleComponentHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when shown/hidden..
*/
protected class AccessibleComponentHandler implements java.awt.event.ComponentListener {
public void componentHidden(java.awt.event.ComponentEvent e) {
AccessibleUNOComponent.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.VISIBLE, null);
}
public void componentShown(java.awt.event.ComponentEvent e) {
AccessibleUNOComponent.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, AccessibleState.VISIBLE);
}
public void componentMoved(java.awt.event.ComponentEvent e) {
}
public void componentResized(java.awt.event.ComponentEvent e) {
}
} // inner class AccessibleComponentHandler
protected java.awt.event.FocusListener accessibleFocusHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when focus events happen
*/
protected class AccessibleFocusHandler implements java.awt.event.FocusListener {
public void focusGained(java.awt.event.FocusEvent event) {
AccessibleUNOComponent.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, AccessibleState.FOCUSED);
if (Build.DEBUG) {
System.err.println("[" + getAccessibleRole() + "] " + getAccessibleName() + " is now focused");
}
}
public void focusLost(java.awt.event.FocusEvent event) {
AccessibleUNOComponent.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.FOCUSED, null);
if (Build.DEBUG) {
System.err.println("[" + getAccessibleRole() + "] " + getAccessibleName() + " is no longer focused");
}
}
} // inner class AccessibleFocusHandler
protected int propertyChangeListenerCount = 0;
/**
* Add a PropertyChangeListener to the listener list.
*
* @param listener The PropertyChangeListener to be added
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (propertyChangeListenerCount++ == 0) {
accessibleComponentHandler = new AccessibleComponentHandler();
Component.this.addComponentListener(accessibleComponentHandler);
accessibleFocusHandler = new AccessibleFocusHandler();
Component.this.addFocusListener(accessibleFocusHandler);
}
super.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed
*/
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (--propertyChangeListenerCount == 0) {
Component.this.removeComponentListener(accessibleComponentHandler);
accessibleComponentHandler = null;
Component.this.removeFocusListener(accessibleFocusHandler);
accessibleFocusHandler = null;
}
super.removePropertyChangeListener(listener);
}
/**
* Gets the current state set of this object.
*
* @return an instance of <code>AccessibleStateSet</code>
* containing the current state set of the object
* @see AccessibleState
*/
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
if (disposed)
return AccessibleStateAdapter.getDefunctStateSet();
try {
return AccessibleStateAdapter.getAccessibleStateSet(Component.this,
unoAccessibleContext.getAccessibleStateSet());
} catch (com.sun.star.uno.RuntimeException e) {
return AccessibleStateAdapter.getDefunctStateSet();
}
}
/** Gets the locale of the component */
public java.util.Locale getLocale() throws java.awt.IllegalComponentStateException {
try {
com.sun.star.lang.Locale unoLocale = unoAccessible.getAccessibleContext().getLocale();
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
} catch (IllegalAccessibleComponentStateException e) {
throw new java.awt.IllegalComponentStateException(e.getMessage());
} catch (com.sun.star.uno.RuntimeException e) {
return java.util.Locale.getDefault();
}
}
/*
* AccessibleExtendedComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoAccessibleComponent.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoAccessibleComponent.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return Component.this.isEnabled();
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return Component.this.isVisible();
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return Component.this.isShowing();
}
public boolean contains(java.awt.Point p) {
try {
return unoAccessibleComponent.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
// if (Build.DEBUG) {
// System.err.println("Returning location on screen( " + unoPoint.X + ", " + unoPoint.Y + " )" );
// }
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocation();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoAccessibleComponent.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoAccessibleComponent.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
// Not supported by this implementation
return null;
}
public boolean isFocusTraversable() {
return Component.this.isFocusable();
}
public void requestFocus() {
unoAccessibleComponent.grabFocus();
}
public String getToolTipText() {
try {
XAccessibleExtendedComponent unoAccessibleExtendedComponent = UnoRuntime.queryInterface(XAccessibleExtendedComponent.class, unoAccessibleComponent);
if (unoAccessibleExtendedComponent != null) {
return unoAccessibleExtendedComponent.getToolTipText();
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
return null;
}
public String getTitledBorderText() {
try {
XAccessibleExtendedComponent unoAccessibleExtendedComponent = UnoRuntime.queryInterface(XAccessibleExtendedComponent.class, unoAccessibleComponent);
if (unoAccessibleExtendedComponent != null) {
return unoAccessibleExtendedComponent.getTitledBorderText();
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
return null;
}
public javax.accessibility.AccessibleKeyBinding getAccessibleKeyBinding() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleComponent);
if (unoAccessibleAction != null) {
XAccessibleKeyBinding unoAccessibleKeyBinding = unoAccessibleAction.getAccessibleActionKeyBinding(0);
if (unoAccessibleKeyBinding != null) {
return new AccessibleKeyBinding(unoAccessibleKeyBinding);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
return null;
}
}
// Extract a number from a UNO any
public static java.lang.Number toNumber(java.lang.Object any) {
try {
if (AnyConverter.isByte(any)) {
return new Byte(AnyConverter.toByte(any));
} else if (AnyConverter.isShort(any)) {
return new Short(AnyConverter.toShort(any));
} else if (AnyConverter.isInt(any)) {
return new Integer(AnyConverter.toInt(any));
} else if (AnyConverter.isLong(any)) {
return new Long(AnyConverter.toLong(any));
} else if (AnyConverter.isFloat(any)) {
return new Float(AnyConverter.toFloat(any));
} else if (AnyConverter.isDouble(any)) {
return new Double(AnyConverter.toDouble(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
throw new IllegalArgumentException(e.getMessage());
}
return null;
}
public String toString() {
return UnoRuntime.generateOid(unoAccessible);
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Container.java b/accessibility/bridge/org/openoffice/java/accessibility/Container.java
deleted file mode 100644
index 4b447c9..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Container.java
+++ /dev/null
@@ -1,754 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import java.awt.Component;
import java.awt.EventQueue;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleState;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
public class Container extends java.awt.Container implements javax.accessibility.Accessible {
protected XAccessible unoAccessible;
protected XAccessibleContext unoAccessibleContext;
protected XAccessibleComponent unoAccessibleComponent = null;
protected javax.accessibility.AccessibleRole accessibleRole;
protected javax.accessibility.AccessibleText accessibleText;
protected boolean disposed = false;
protected Container(javax.accessibility.AccessibleRole role,
XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
accessibleRole = role;
unoAccessible = xAccessible;
unoAccessibleContext = xAccessibleContext;
unoAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class,
xAccessibleContext);
// Add the event listener right away, because the global focus notification doesn't
// work yet ..
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
unoAccessibleContext);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(createEventListener());
}
}
/**
* Determines whether this <code>Container</code> is showing on screen.
* This means that the component must be visible, and it must be in a
* <code>container</code> that is visible and showing.
* @see #addNotify
* @see #removeNotify
* @since JDK1.0
*/
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
/**
* Makes this <code>Container</code> displayable by connecting it to a
* native screen resource.
* This method is called internally by the toolkit and should
* not be called directly by programs.
* @see #isDisplayable
* @see #removeNotify
* @since JDK1.0
*/
public void addNotify() {
}
/**
* Makes this <code>Container</code> undisplayable by destroying it native
* screen resource.
* This method is called by the toolkit internally and should
* not be called directly by programs.
* @see #isDisplayable
* @see #addNotify
* @since JDK1.0
*/
public void removeNotify() {
}
/*
* Fake the java focus handling. This is necessary to keep OOo focus
* in sync with the java focus. See java.awt.DefaultKeyboardFocusManager
* for implementation details.
**/
/** Requests focus for this object */
public void requestFocus() {
}
/** Requests focus for this object */
public boolean requestFocus(boolean temporary) {
// Must be a no-op to make focus handling work
return true;
}
/** Requests the focus for this object in the containing window */
public boolean requestFocusInWindow() {
return requestFocusInWindow(false);
}
/** Requests the focus for this object in the containing window */
protected boolean requestFocusInWindow(boolean temporary) {
if (isFocusable() && isVisible()) {
getEventQueue().postEvent(new java.awt.event.FocusEvent(this, java.awt.event.FocusEvent.FOCUS_GAINED, temporary));
return true;
}
return false;
}
public Object[] getAccessibleComponents(Object[] targetSet) {
try {
java.util.ArrayList<Component> list = new java.util.ArrayList<Component>(targetSet.length);
for (int i=0; i < targetSet.length; i++) {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
UnoRuntime.queryInterface(XAccessible.class, targetSet[i]));
if (c != null) {
list.add(c);
}
}
list.trimToSize();
return list.toArray();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
protected java.awt.EventQueue getEventQueue() {
return java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
}
protected class PropertyChangeBroadcaster implements Runnable {
String propertyName;
Object oldValue;
Object newValue;
public PropertyChangeBroadcaster(String name, Object param1, Object param2) {
propertyName = name;
oldValue = param1;
newValue = param2;
}
public void run() {
// Because this code is executed in the DispatchThread, it is better tocatch every
// exception that might occur
try {
AccessibleContext ac = Container.this.accessibleContext;
if (ac != null) {
ac.firePropertyChange(propertyName, oldValue, newValue);
}
} catch (java.lang.Exception e) {
if (Build.DEBUG) {
System.err.println(e.getClass().getName() + " caught propagating " + propertyName + " event: " + e.getMessage());
e.printStackTrace();
}
}
}
}
protected void firePropertyChange(String property, Object oldValue, Object newValue) {
EventQueue.invokeLater(new PropertyChangeBroadcaster(property, oldValue, newValue));
}
protected void fireStatePropertyChange(AccessibleState state, boolean set) {
PropertyChangeBroadcaster broadcaster;
if (set) {
broadcaster = new PropertyChangeBroadcaster(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, state);
} else {
broadcaster = new PropertyChangeBroadcaster(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
state, null);
}
EventQueue.invokeLater(broadcaster);
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleContainerListener implements XAccessibleEventListener {
protected AccessibleContainerListener() {
}
protected java.awt.EventQueue getEventQueue() {
return java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
}
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.ACTIVE:
// Only frames should be active
break;
case AccessibleStateType.ENABLED:
setEnabled(enable);
// Since we can't access awt.Componet.accessibleContext, we need to fire
// this event manually ..
fireStatePropertyChange(AccessibleState.ENABLED, enable);
break;
case AccessibleStateType.FOCUSED:
getEventQueue().postEvent(new java.awt.event.FocusEvent(
Container.this, enable ?
java.awt.event.FocusEvent.FOCUS_GAINED :
java.awt.event.FocusEvent.FOCUS_LOST));
break;
case AccessibleStateType.SELECTED:
fireStatePropertyChange(AccessibleState.SELECTED, enable);
break;
case AccessibleStateType.SENSITIVE:
// This state equals ENABLED in OOo (but not in Gtk+) and does not exist in Java 1.5
break;
case AccessibleStateType.SHOWING:
case AccessibleStateType.VISIBLE:
setVisible(enable);
break;
default:
if (Build.DEBUG) {
System.err.println(Container.this + "unexpected state change " + state);
}
break;
}
}
/** Updates the accessible name and fires the appropriate PropertyChangedEvent */
protected void handleNameChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
if (accessibleContext != null) {
accessibleContext.setAccessibleName(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the accessible description and fires the appropriate PropertyChangedEvent */
protected void handleDescriptionChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
if (accessibleContext != null) {
accessibleContext.setAccessibleDescription(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the internal states and fires the appropriate PropertyChangedEvent */
protected void handleStateChangedEvent(Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
setComponentState(AnyConverter.toShort(any1), false);
}
if (AnyConverter.isShort(any2)) {
setComponentState(AnyConverter.toShort(any2), true);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/* This event is only necessary because some objects in the office don't know their parent
* and are therefor unable to revoke and re-insert themselves.
*/
protected void handleAllChildrenChangedEvent() {
javax.accessibility.Accessible parent = (javax.accessibility.Accessible) getParent();
if (parent != null) {
javax.accessibility.AccessibleContext parentAC = parent.getAccessibleContext();
if (parentAC != null) {
parentAC.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
Container.this,
null);
AccessibleObjectFactory.clearContainer(Container.this);
AccessibleObjectFactory.populateContainer(Container.this, unoAccessibleContext);
parentAC.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null,
Container.this);
}
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
if ( !disposed ) {
switch (event.EventId) {
case AccessibleEventId.NAME_CHANGED:
// Set the accessible name for the corresponding context, which will fire a property
// change event itself
handleNameChangedEvent(event.NewValue);
break;
case AccessibleEventId.DESCRIPTION_CHANGED:
// Set the accessible description for the corresponding context, which will fire a property
// change event itself - so do not set propertyName !
handleDescriptionChangedEvent(event.NewValue);
break;
case AccessibleEventId.STATE_CHANGED:
// Update the internal state set and fire the appropriate PropertyChangedEvent
handleStateChangedEvent(event.OldValue, event.NewValue);
break;
case AccessibleEventId.TEXT_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_TEXT_PROPERTY,
AccessibleTextImpl.convertTextSegment(event.OldValue),
AccessibleTextImpl.convertTextSegment(event.NewValue));
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
AccessibleObjectFactory.removeChild(Container.this, event.OldValue);
} else if (AnyConverter.isObject(event.NewValue)) {
AccessibleObjectFactory.addChild(Container.this, event.NewValue);
}
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, null);
break;
/*
* the Java AccessBridge for GNOME maps SELECTION_PROPERTY change events
* for objects of role TEXT to object:text-selection-changed
*/
case AccessibleEventId.TEXT_SELECTION_CHANGED:
case AccessibleEventId.SELECTION_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY, null, null);
break;
case AccessibleEventId.INVALIDATE_ALL_CHILDREN:
handleAllChildrenChangedEvent();
break;
default:
// Warn about unhandled events
if(Build.DEBUG) {
System.out.println(this + ": unhandled accessibility event id=" + event.EventId);
}
}
}
}
/** Called by OpenOffice process to notify that the UNO component is disposing */
public void disposing(com.sun.star.lang.EventObject eventObject) {
disposed = true;
AccessibleObjectFactory.disposing(Container.this);
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleContainerListener();
}
protected javax.accessibility.AccessibleContext accessibleContext = null;
/** This method actually creates the AccessibleContext object returned by
* getAccessibleContext().
*/
protected javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleContainer();
}
/** Returns the AccessibleContext associated with this object */
public final javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
try {
AccessibleContext ac = createAccessibleContext();
if (ac != null) {
// Set accessible name and description here to avoid
// unnecessary property change events later ..
ac.setAccessibleName(unoAccessibleContext.getAccessibleName());
ac.setAccessibleDescription(unoAccessibleContext.getAccessibleDescription());
accessibleContext = ac;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
return accessibleContext;
}
protected class AccessibleContainer extends java.awt.Container.AccessibleAWTContainer {
protected AccessibleContainer() {
/* Since getAccessibleText() is heavily used by the java access
* bridge for gnome and the gnome at-tools, we do a query interface
* here and remember the result.
*/
accessibleText = AccessibleTextImpl.get(unoAccessibleContext);
}
protected AccessibleContainer(boolean query) {
/* This constructor is explicitly for subclasses that implement
* AccessibleHypertext and therefor the default constructor would
* bring unnecessary overhead.
*/
}
protected java.awt.event.ComponentListener accessibleComponentHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when shown/hidden..
*/
protected class AccessibleComponentHandler implements java.awt.event.ComponentListener {
public void componentHidden(java.awt.event.ComponentEvent e) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.VISIBLE, null);
}
public void componentShown(java.awt.event.ComponentEvent e) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, AccessibleState.VISIBLE);
}
public void componentMoved(java.awt.event.ComponentEvent e) {
}
public void componentResized(java.awt.event.ComponentEvent e) {
}
} // inner class AccessibleContainerHandler
protected java.awt.event.FocusListener accessibleFocusHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when focus events happen
*/
protected class AccessibleFocusHandler implements java.awt.event.FocusListener {
public void focusGained(java.awt.event.FocusEvent event) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, AccessibleState.FOCUSED);
if (Build.DEBUG) {
System.err.println("[" + getAccessibleRole() + "] " + getAccessibleName() + " is now focused");
}
}
public void focusLost(java.awt.event.FocusEvent event) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.FOCUSED, null);
if (Build.DEBUG) {
System.err.println("[" + getAccessibleRole() + "] " + getAccessibleName() + " is no longer focused");
}
}
} // inner class AccessibleFocusHandler
protected java.awt.event.ContainerListener accessibleContainerHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when children added/removed.
*/
protected class AccessibleContainerHandler implements java.awt.event.ContainerListener {
public void componentAdded(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, ((javax.accessibility.Accessible) c).getAccessibleContext());
}
}
public void componentRemoved(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleContainer.this.firePropertyChange(
AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
((javax.accessibility.Accessible) c).getAccessibleContext(), null);
}
}
}
protected int propertyChangeListenerCount = 0;
/**
* Add a PropertyChangeListener to the listener list.
*
* @param listener The PropertyChangeListener to be added
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (propertyChangeListenerCount++ == 0) {
accessibleFocusHandler = new AccessibleFocusHandler();
Container.this.addFocusListener(accessibleFocusHandler);
accessibleContainerHandler = new AccessibleContainerHandler();
Container.this.addContainerListener(accessibleContainerHandler);
accessibleComponentHandler = new AccessibleComponentHandler();
Container.this.addComponentListener(accessibleComponentHandler);
}
super.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed
*/
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (--propertyChangeListenerCount == 0) {
Container.this.removeComponentListener(accessibleComponentHandler);
accessibleComponentHandler = null;
Container.this.removeContainerListener(accessibleContainerHandler);
accessibleContainerHandler = null;
Container.this.removeFocusListener(accessibleFocusHandler);
accessibleFocusHandler = null;
}
super.removePropertyChangeListener(listener);
}
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return accessibleRole;
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
return accessibleText;
}
/**
* Gets the current state set of this object.
*
* @return an instance of <code>AccessibleStateSet</code>
* containing the current state set of the object
* @see AccessibleState
*/
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
if (disposed)
return AccessibleStateAdapter.getDefunctStateSet();
try {
return AccessibleStateAdapter.getAccessibleStateSet(Container.this,
unoAccessibleContext.getAccessibleStateSet());
} catch (com.sun.star.uno.RuntimeException e) {
return AccessibleStateAdapter.getDefunctStateSet();
}
}
/** Returns the AccessibleSelection interface for this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
try {
XAccessibleSelection unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class, unoAccessibleContext);
if (unoAccessibleSelection != null) {
return new AccessibleSelectionImpl(unoAccessibleSelection);
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
/** Gets the locale of the component */
public java.util.Locale getLocale() throws java.awt.IllegalComponentStateException {
try {
com.sun.star.lang.Locale unoLocale = unoAccessible.getAccessibleContext().getLocale();
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
} catch (IllegalAccessibleComponentStateException e) {
throw new java.awt.IllegalComponentStateException(e.getMessage());
} catch (com.sun.star.uno.RuntimeException e) {
return super.getLocale();
}
}
/*
* AccessibleComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoAccessibleComponent.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoAccessibleComponent.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return Container.this.isEnabled();
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return Container.this.isVisible();
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return Container.this.isShowing();
}
public boolean contains(java.awt.Point p) {
try {
return unoAccessibleComponent.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocation();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoAccessibleComponent.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoAccessibleComponent.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public boolean isFocusTraversable() {
return Container.this.isFocusable();
}
public void requestFocus() {
unoAccessibleComponent.grabFocus();
}
}
public String toString() {
return UnoRuntime.generateOid(unoAccessible);
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/DescendantManager.java b/accessibility/bridge/org/openoffice/java/accessibility/DescendantManager.java
deleted file mode 100644
index 4e0aaaf..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/DescendantManager.java
+++ /dev/null
@@ -1,149 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.UnoRuntime;
public abstract class DescendantManager extends Component {
protected XAccessibleSelection unoAccessibleSelection = null;
protected javax.accessibility.Accessible activeDescendant = null;
protected boolean multiselectable = false;
protected DescendantManager(XAccessible xAccessible,
XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected DescendantManager(XAccessible xAccessible,
XAccessibleContext xAccessibleContext, boolean multiselectable) {
super(xAccessible, xAccessibleContext);
this.multiselectable = multiselectable;
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleDescendantManagerListener
extends AccessibleUNOComponentListener {
protected AccessibleDescendantManagerListener() {
unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class,
unoAccessibleContext);
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.SELECTION_CHANGED:
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_SELECTION_PROPERTY,
null, null);
break;
default:
super.notifyEvent(event);
}
}
}
protected abstract class AccessibleDescendantManager
extends AccessibleUNOComponent
implements javax.accessibility.AccessibleSelection {
protected AccessibleDescendantManager() {
unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class,
unoAccessibleContext);
}
/*
* AccessibleContext
*/
/** Returns the number of accessible children of the object */
public int getAccessibleChildrenCount() {
try {
return unoAccessibleContext.getAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the AccessibleSelection interface for this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
return (unoAccessibleSelection != null) ? this : null;
}
/*
* AccessibleSelection
*/
/** Adds the specified Accessible child of the object to the object's selection */
public void addAccessibleSelection(int i) {
try {
unoAccessibleSelection.selectAccessibleChild(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Clears the selection in the object, so that no children in the object are selected */
public void clearAccessibleSelection() {
try {
unoAccessibleSelection.clearAccessibleSelection();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the number of Accessible children currently selected */
public int getAccessibleSelectionCount() {
try {
return unoAccessibleSelection.getSelectedAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Determines if the current child of this object is selected */
public boolean isAccessibleChildSelected(int i) {
try {
return unoAccessibleSelection.isAccessibleChildSelected(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Removes the specified child of the object from the object's selection */
public void removeAccessibleSelection(int i) {
try {
unoAccessibleSelection.deselectAccessibleChild(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Causes every child of the object to be selected if the object supports multiple selection */
public void selectAllAccessibleSelection() {
try {
unoAccessibleSelection.selectAllAccessibleChildren();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Dialog.java b/accessibility/bridge/org/openoffice/java/accessibility/Dialog.java
deleted file mode 100644
index a9b2d51..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Dialog.java
+++ /dev/null
@@ -1,642 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
public class Dialog extends java.awt.Dialog implements javax.accessibility.Accessible, NativeFrame {
protected XAccessibleComponent unoAccessibleComponent;
boolean opened = false;
boolean visible = false;
boolean active = false;
java.awt.EventQueue eventQueue = null;
protected Dialog(java.awt.Frame owner, XAccessibleComponent xAccessibleComponent) {
super(owner);
initialize(xAccessibleComponent);
}
protected Dialog(java.awt.Frame owner, String name, XAccessibleComponent xAccessibleComponent) {
super(owner, name);
initialize(xAccessibleComponent);
}
protected Dialog(java.awt.Frame owner, String name, boolean modal, XAccessibleComponent xAccessibleComponent) {
super(owner, name, modal);
initialize(xAccessibleComponent);
}
private void initialize(XAccessibleComponent xAccessibleComponent) {
unoAccessibleComponent = xAccessibleComponent;
eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
xAccessibleComponent);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(new AccessibleDialogListener());
}
}
java.awt.Component initialComponent = null;
public java.awt.Component getInitialComponent() {
return initialComponent;
}
public void setInitialComponent(java.awt.Component c) {
initialComponent = c;
}
public Integer getHWND() {
return null;
}
/**
* Determines whether this <code>Component</code> is showing on screen.
* This means that the component must be visible, and it must be in a
* <code>container</code> that is visible and showing.
* @see #addNotify
* @see #removeNotify
* @since JDK1.0
*/
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
/**
* Makes this <code>Component</code> displayable by connecting it to a
* native screen resource.
* This method is called internally by the toolkit and should
* not be called directly by programs.
* @see #isDisplayable
* @see #removeNotify
* @since JDK1.0
*/
public void addNotify() {
// createHierarchyEvents(0, null, null, 0, false);
}
/**
* Makes this <code>Component</code> undisplayable by destroying it native
* screen resource.
* This method is called by the toolkit internally and should
* not be called directly by programs.
* @see #isDisplayable
* @see #addNotify
* @since JDK1.0
*/
public void removeNotify() {
}
/**
* Determines if the object is visible. Note: this means that the
* object intends to be visible; however, it may not in fact be
* showing on the screen because one of the objects that this object
* is contained by is not visible. To determine if an object is
* showing on the screen, use <code>isShowing</code>.
*
* @return true if object is visible; otherwise, false
*/
public boolean isVisible(){
return visible;
}
/**
* Determines whether this component is displayable. A component is
* displayable when it is connected to a native screen resource.
* <p>
* A component is made displayable either when it is added to
* a displayable containment hierarchy or when its containment
* hierarchy is made displayable.
* A containment hierarchy is made displayable when its ancestor
* window is either packed or made visible.
* <p>
* A component is made undisplayable either when it is removed from
* a displayable containment hierarchy or when its containment hierarchy
* is made undisplayable. A containment hierarchy is made
* undisplayable when its ancestor window is disposed.
*
* @return <code>true</code> if the component is displayable
*/
public boolean isDisplayable() {
return true;
}
/**
* Shows or hides this component depending on the value of parameter
* <code>b</code>.
* @param b if <code>true</code>, shows this component;
* otherwise, hides this component
* @see #isVisible
* @since JDK1.1
*/
public void setVisible(boolean b) {
if (visible != b){
visible = b;
if (b) {
// If it is the first show, fire WINDOW_OPENED event
if (!opened) {
postWindowEvent(java.awt.event.WindowEvent.WINDOW_OPENED);
opened = true;
}
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_SHOWN);
} else {
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_HIDDEN);
}
}
}
public void dispose() {
setVisible(false);
postWindowEvent(java.awt.event.WindowEvent.WINDOW_CLOSED);
}
protected void postWindowEvent(int i) {
eventQueue.postEvent(new java.awt.event.WindowEvent(this, i));
}
protected void postComponentEvent(int i) {
eventQueue.postEvent(new java.awt.event.ComponentEvent(this, i));
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleDialogListener implements XAccessibleEventListener {
protected AccessibleDialogListener() {
}
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.ACTIVE:
active = enable;
if (enable) {
AccessibleObjectFactory.postWindowActivated(Dialog.this);
} else {
AccessibleObjectFactory.postWindowLostFocus(Dialog.this);
}
break;
case AccessibleStateType.ICONIFIED:
postWindowEvent(enable ?
java.awt.event.WindowEvent.WINDOW_ICONIFIED :
java.awt.event.WindowEvent.WINDOW_DEICONIFIED);
break;
case AccessibleStateType.VISIBLE:
Dialog.this.setVisible(enable);
break;
default:
if (Build.DEBUG) {
System.err.println("[dialog]: " + getTitle() + "unexpected state change " + state);
}
break;
}
}
/** Updates the accessible name and fires the appropriate PropertyChangedEvent */
protected void handleNameChangedEvent(Object any) {
try {
String title = AnyConverter.toString(any);
setTitle(title);
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac!= null) {
ac.setAccessibleName(title);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the accessible description and fires the appropriate PropertyChangedEvent */
protected void handleDescriptionChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac!= null) {
ac.setAccessibleDescription(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the internal states and fires the appropriate PropertyChangedEvent */
protected void handleStateChangedEvent(Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
setComponentState(AnyConverter.toShort(any1), false);
}
if (AnyConverter.isShort(any2)) {
setComponentState(AnyConverter.toShort(any2), true);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Fires a visible data property change event */
protected void handleVisibleDataEvent() {
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac != null) {
ac.firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, null);
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.NAME_CHANGED:
// Set the accessible name for the corresponding context, which will fire a property
// change event itself
handleNameChangedEvent(event.NewValue);
break;
case AccessibleEventId.DESCRIPTION_CHANGED:
// Set the accessible description for the corresponding context, which will fire a property
// change event itself - so do not set propertyName !
handleDescriptionChangedEvent(event.NewValue);
break;
case AccessibleEventId.STATE_CHANGED:
// Update the internal state set and fire the appropriate PropertyChangedEvent
handleStateChangedEvent(event.OldValue, event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
AccessibleObjectFactory.removeChild(Dialog.this, event.OldValue);
} else if (AnyConverter.isObject(event.NewValue)) {
AccessibleObjectFactory.addChild(Dialog.this, event.NewValue);
}
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
handleVisibleDataEvent();
break;
default:
// Warn about unhandled events
if(Build.DEBUG) {
System.out.println(this + ": unhandled accessibility event id=" + event.EventId);
}
}
}
/** Called by OpenOffice process to notify that the UNO component is disposing */
public void disposing(com.sun.star.lang.EventObject eventObject) {
}
}
javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleDialog();
accessibleContext.setAccessibleName(getTitle());
}
return accessibleContext;
}
protected class AccessibleDialog extends java.awt.Dialog.AccessibleAWTDialog {
protected AccessibleDialog() {
super();
}
protected java.awt.event.ComponentListener accessibleComponentHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when shown/hidden..
*/
protected class AccessibleComponentHandler implements java.awt.event.ComponentListener {
public void componentHidden(java.awt.event.ComponentEvent e) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
javax.accessibility.AccessibleState.VISIBLE, null);
}
public void componentShown(java.awt.event.ComponentEvent e) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, javax.accessibility.AccessibleState.VISIBLE);
}
public void componentMoved(java.awt.event.ComponentEvent e) {
}
public void componentResized(java.awt.event.ComponentEvent e) {
}
} // inner class AccessibleComponentHandler
protected java.awt.event.WindowListener accessibleWindowHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when window events happen
*/
protected class AccessibleWindowHandler implements java.awt.event.WindowListener {
/** Invoked when the Window is set to be the active Window. */
public void windowActivated(java.awt.event.WindowEvent e) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, javax.accessibility.AccessibleState.ACTIVE);
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " is now active");
}
}
/** Invoked when a window has been closed as the result of calling dispose on the window. */
public void windowClosed(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " has been closed");
}
}
/** Invoked when the user attempts to close the window from the window's system menu. */
public void windowClosing(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " is closing");
}
}
/** Invoked when a Window is no longer the active Window. */
public void windowDeactivated(java.awt.event.WindowEvent e) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
javax.accessibility.AccessibleState.ACTIVE, null);
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " is no longer active");
}
}
/** Invoked when a window is changed from a minimized to a normal state. */
public void windowDeiconified(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " has been deiconified");
}
}
/** Invoked when a window is changed from a normal to a minimized state. */
public void windowIconified(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " has been iconified");
}
}
/** Invoked the first time a window is made visible. */
public void windowOpened(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[Dialog] " + getTitle() + " has been opened");
}
}
} // inner class AccessibleWindowHandler
protected java.awt.event.ContainerListener accessibleContainerHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when children added/removed.
*/
protected class AccessibleContainerHandler implements java.awt.event.ContainerListener {
public void componentAdded(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, ((javax.accessibility.Accessible) c).getAccessibleContext());
}
}
public void componentRemoved(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleDialog.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
((javax.accessibility.Accessible) c).getAccessibleContext(), null);
}
}
}
protected int propertyChangeListenerCount = 0;
/**
* Add a PropertyChangeListener to the listener list.
*
* @param listener The PropertyChangeListener to be added
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (propertyChangeListenerCount++ == 0) {
accessibleWindowHandler = new AccessibleWindowHandler();
Dialog.this.addWindowListener(accessibleWindowHandler);
accessibleContainerHandler = new AccessibleContainerHandler();
Dialog.this.addContainerListener(accessibleContainerHandler);
accessibleComponentHandler = new AccessibleComponentHandler();
Dialog.this.addComponentListener(accessibleComponentHandler);
}
super.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed
*/
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (--propertyChangeListenerCount == 0) {
Dialog.this.removeComponentListener(accessibleComponentHandler);
accessibleComponentHandler = null;
Dialog.this.removeContainerListener(accessibleContainerHandler);
accessibleContainerHandler = null;
Dialog.this.removeWindowListener(accessibleWindowHandler);
accessibleWindowHandler = null;
}
super.removePropertyChangeListener(listener);
}
/*
* AccessibleComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoAccessibleComponent.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoAccessibleComponent.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return Dialog.this.isEnabled();
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return Dialog.this.isVisible();
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return Dialog.this.isShowing();
}
public boolean contains(java.awt.Point p) {
try {
return unoAccessibleComponent.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocation();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoAccessibleComponent.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoAccessibleComponent.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public boolean isFocusTraversable() {
return Dialog.this.isFocusable();
}
public void requestFocus() {
unoAccessibleComponent.grabFocus();
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/FocusTraversalPolicy.java b/accessibility/bridge/org/openoffice/java/accessibility/FocusTraversalPolicy.java
deleted file mode 100644
index 5da2803..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/FocusTraversalPolicy.java
+++ /dev/null
@@ -1,80 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
public class FocusTraversalPolicy extends java.awt.FocusTraversalPolicy {
protected javax.accessibility.Accessible getSelectedAccessibleChild(javax.accessibility.Accessible a) {
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
if (ac != null) {
javax.accessibility.AccessibleSelection as = ac.getAccessibleSelection();
if (as != null) {
return as.getAccessibleSelection(0);
}
}
return null;
}
/** Returns the Component that should receive the focus after aComponent */
public java.awt.Component getComponentAfter(java.awt.Container focusCycleRoot,
java.awt.Component aComponent) {
return null;
}
/** Returns the Component that should receive the focus before aComponent */
public java.awt.Component getComponentBefore(java.awt.Container focusCycleRoot,
java.awt.Component aComponent) {
return null;
}
/** Returns the default Component to focus */
public java.awt.Component getDefaultComponent(java.awt.Container focusCycleRoot) {
// getDefaultComponent must not return null for Windows to make them focusable.
if (focusCycleRoot instanceof NativeFrame) {
java.awt.Component c = ((NativeFrame) focusCycleRoot).getInitialComponent();
if (c != null) {
return c;
}
}
if (focusCycleRoot instanceof javax.accessibility.Accessible) {
return (java.awt.Component) getSelectedAccessibleChild((javax.accessibility.Accessible) focusCycleRoot);
}
return null;
}
/** Returns the first Component in the traversal cycle */
public java.awt.Component getFirstComponent(java.awt.Container focusCycleRoot) {
return null;
}
/** Returns the Component that should receive the focus when a Window is made visible for the first time */
public java.awt.Component getInitialComponent(java.awt.Window window) {
if (window instanceof NativeFrame) {
return ((NativeFrame) window).getInitialComponent();
}
return null;
}
/** Returns the last Component in the traversal cycle */
public java.awt.Component getLastComponent(java.awt.Container focusCycleRoot) {
return null;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Frame.java b/accessibility/bridge/org/openoffice/java/accessibility/Frame.java
deleted file mode 100644
index fe927cb..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Frame.java
+++ /dev/null
@@ -1,659 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
public class Frame extends java.awt.Frame implements javax.accessibility.Accessible, NativeFrame {
protected XAccessibleComponent unoAccessibleComponent;
boolean opened = false;
boolean visible = false;
boolean active = false;
java.awt.EventQueue eventQueue = null;
protected Frame(XAccessibleComponent xAccessibleComponent) {
initialize(xAccessibleComponent);
}
protected Frame(String name, XAccessibleComponent xAccessibleComponent) {
super(name);
initialize(xAccessibleComponent);
}
private void initialize(XAccessibleComponent xAccessibleComponent) {
unoAccessibleComponent = xAccessibleComponent;
eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
unoAccessibleComponent);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(new AccessibleFrameListener());
}
}
java.awt.Component initialComponent = null;
public java.awt.Component getInitialComponent() {
return initialComponent;
}
public void setInitialComponent(java.awt.Component c) {
initialComponent = c;
}
public Integer getHWND() {
return null;
}
/**
* Determines whether this <code>Component</code> is showing on screen.
* This means that the component must be visible, and it must be in a
* <code>container</code> that is visible and showing.
* @see #addNotify
* @see #removeNotify
* @since JDK1.0
*/
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
/**
* Makes this <code>Component</code> displayable by connecting it to a
* native screen resource.
* This method is called internally by the toolkit and should
* not be called directly by programs.
* @see #isDisplayable
* @see #removeNotify
* @since JDK1.0
*/
public void addNotify() {
// createHierarchyEvents(0, null, null, 0, false);
}
/**
* Makes this <code>Component</code> undisplayable by destroying it native
* screen resource.
* This method is called by the toolkit internally and should
* not be called directly by programs.
* @see #isDisplayable
* @see #addNotify
* @since JDK1.0
*/
public void removeNotify() {
}
/**
* Determines if the object is visible. Note: this means that the
* object intends to be visible; however, it may not in fact be
* showing on the screen because one of the objects that this object
* is contained by is not visible. To determine if an object is
* showing on the screen, use <code>isShowing</code>.
*
* @return true if object is visible; otherwise, false
*/
public boolean isVisible(){
return visible;
}
/**
* Shows or hides this component depending on the value of parameter
* <code>b</code>.
* @param b if <code>true</code>, shows this component;
* otherwise, hides this component
* @see #isVisible
* @since JDK1.1
*/
public void setVisible(boolean b) {
if (visible != b){
visible = b;
if (b) {
// If it is the first show, fire WINDOW_OPENED event
if (!opened) {
postWindowEvent(java.awt.event.WindowEvent.WINDOW_OPENED);
opened = true;
}
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_SHOWN);
} else {
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_HIDDEN);
}
}
}
public void dispose() {
setVisible(false);
postWindowEvent(java.awt.event.WindowEvent.WINDOW_CLOSED);
}
protected void postWindowEvent(int i) {
eventQueue.postEvent(new java.awt.event.WindowEvent(this, i));
}
protected void postComponentEvent(int i) {
eventQueue.postEvent(new java.awt.event.ComponentEvent(this, i));
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleFrameListener implements XAccessibleEventListener {
protected AccessibleFrameListener() {
}
// The only expected state changes are ACTIVE and VISIBLE
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.ACTIVE:
active = enable;
if (enable) {
AccessibleObjectFactory.postWindowActivated(Frame.this);
} else {
AccessibleObjectFactory.postWindowLostFocus(Frame.this);
}
break;
case AccessibleStateType.ICONIFIED:
if (Build.DEBUG) {
System.err.println("[frame]" + getTitle() + (enable ? " is now " : " is no longer ") + "iconified");
}
postWindowEvent(enable ?
java.awt.event.WindowEvent.WINDOW_ICONIFIED :
java.awt.event.WindowEvent.WINDOW_DEICONIFIED);
break;
case AccessibleStateType.VISIBLE:
Frame.this.setVisible(enable);
break;
default:
if (Build.DEBUG) {
System.err.println("[frame]: " + getTitle() + "unexpected state change " + state);
}
break;
}
}
/** Updates the accessible name and fires the appropriate PropertyChangedEvent */
protected void handleNameChangedEvent(Object any) {
try {
String title = AnyConverter.toString(any);
setTitle(title);
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac!= null) {
ac.setAccessibleName(title);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the accessible description and fires the appropriate PropertyChangedEvent */
protected void handleDescriptionChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac!= null) {
ac.setAccessibleDescription(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the internal states and fires the appropriate PropertyChangedEvent */
protected void handleStateChangedEvent(Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
setComponentState(AnyConverter.toShort(any1), false);
}
if (AnyConverter.isShort(any2)) {
setComponentState(AnyConverter.toShort(any2), true);
}
}
catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Fires a visible data property change event */
protected void handleVisibleDataEvent() {
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac != null) {
ac.firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, null);
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.NAME_CHANGED:
// Set the accessible name for the corresponding context, which will fire a property
// change event itself
handleNameChangedEvent(event.NewValue);
break;
case AccessibleEventId.DESCRIPTION_CHANGED:
// Set the accessible description for the corresponding context, which will fire a property
// change event itself - so do not set propertyName !
handleDescriptionChangedEvent(event.NewValue);
break;
case AccessibleEventId.STATE_CHANGED:
// Update the internal state set and fire the appropriate PropertyChangedEvent
handleStateChangedEvent(event.OldValue, event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
AccessibleObjectFactory.removeChild(Frame.this, event.OldValue);
} else if (AnyConverter.isObject(event.NewValue)) {
AccessibleObjectFactory.addChild(Frame.this, event.NewValue);
}
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
handleVisibleDataEvent();
break;
default:
// Warn about unhandled events
if(Build.DEBUG) {
System.out.println(this + ": unhandled accessibility event id=" + event.EventId);
}
}
}
/** Called by OpenOffice process to notify that the UNO component is disposing */
public void disposing(com.sun.star.lang.EventObject eventObject) {
}
}
protected javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleFrame();
accessibleContext.setAccessibleName(getTitle());
}
return accessibleContext;
}
protected class AccessibleFrame extends java.awt.Frame.AccessibleAWTFrame {
protected AccessibleFrame() {
super();
}
protected java.awt.event.ComponentListener accessibleComponentHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when shown/hidden..
*/
protected class AccessibleComponentHandler implements java.awt.event.ComponentListener {
public void componentHidden(java.awt.event.ComponentEvent e) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
javax.accessibility.AccessibleState.VISIBLE, null);
}
public void componentShown(java.awt.event.ComponentEvent e) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, javax.accessibility.AccessibleState.VISIBLE);
}
public void componentMoved(java.awt.event.ComponentEvent e) {
}
public void componentResized(java.awt.event.ComponentEvent e) {
}
} // inner class AccessibleComponentHandler
protected java.awt.event.WindowListener accessibleWindowHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when window events happen
*/
protected class AccessibleWindowHandler implements java.awt.event.WindowListener {
/** Invoked when the Window is set to be the active Window. */
public void windowActivated(java.awt.event.WindowEvent e) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, javax.accessibility.AccessibleState.ACTIVE);
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " is now active");
}
}
/** Invoked when a window has been closed as the result of calling dispose on the window. */
public void windowClosed(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " has been closed");
}
}
/** Invoked when the user attempts to close the window from the window's system menu. */
public void windowClosing(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " is closing");
}
}
/** Invoked when a Window is no longer the active Window. */
public void windowDeactivated(java.awt.event.WindowEvent e) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
javax.accessibility.AccessibleState.ACTIVE, null);
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " is no longer active");
}
}
/** Invoked when a window is changed from a minimized to a normal state. */
public void windowDeiconified(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " is no longer iconified");
}
}
/** Invoked when a window is changed from a normal to a minimized state. */
public void windowIconified(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " has been iconified");
}
}
/** Invoked the first time a window is made visible. */
public void windowOpened(java.awt.event.WindowEvent e) {
if (Build.DEBUG) {
System.err.println("[frame] " + getTitle() + " has been opened");
}
}
} // inner class AccessibleWindowHandler
protected java.awt.event.ContainerListener accessibleContainerHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when children added/removed.
*/
protected class AccessibleContainerHandler implements java.awt.event.ContainerListener {
public void componentAdded(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, ((javax.accessibility.Accessible) c).getAccessibleContext());
}
}
public void componentRemoved(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleFrame.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
((javax.accessibility.Accessible) c).getAccessibleContext(), null);
}
}
}
protected int propertyChangeListenerCount = 0;
/**
* Add a PropertyChangeListener to the listener list.
*
* @param listener The PropertyChangeListener to be added
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (propertyChangeListenerCount++ == 0) {
accessibleWindowHandler = new AccessibleWindowHandler();
Frame.this.addWindowListener(accessibleWindowHandler);
accessibleContainerHandler = new AccessibleContainerHandler();
Frame.this.addContainerListener(accessibleContainerHandler);
accessibleComponentHandler = new AccessibleComponentHandler();
Frame.this.addComponentListener(accessibleComponentHandler);
}
super.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed
*/
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (--propertyChangeListenerCount == 0) {
Frame.this.removeComponentListener(accessibleComponentHandler);
accessibleComponentHandler = null;
Frame.this.removeContainerListener(accessibleContainerHandler);
accessibleContainerHandler = null;
Frame.this.removeWindowListener(accessibleWindowHandler);
accessibleWindowHandler = null;
}
super.removePropertyChangeListener(listener);
}
/**
* Get the state set of this object.
*
* @return an instance of AccessibleState containing the current state
* of the object
* @see javax.accessibility.AccessibleState
*/
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
javax.accessibility.AccessibleStateSet states = super.getAccessibleStateSet();
if ((getExtendedState() & java.awt.Frame.ICONIFIED) > 0) {
states.add(javax.accessibility.AccessibleState.ICONIFIED);
}
return states;
}
/*
* AccessibleComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoAccessibleComponent.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoAccessibleComponent.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return Frame.this.isEnabled();
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return Frame.this.isVisible();
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return Frame.this.isShowing();
}
public boolean contains(java.awt.Point p) {
try {
return unoAccessibleComponent.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocation();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoAccessibleComponent.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoAccessibleComponent.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public boolean isFocusTraversable() {
return Frame.this.isFocusable();
}
public void requestFocus() {
unoAccessibleComponent.grabFocus();
}
}
/**
* Determines whether this component is displayable. A component is
* displayable when it is connected to a native screen resource.
* <p>
* A component is made displayable either when it is added to
* a displayable containment hierarchy or when its containment
* hierarchy is made displayable.
* A containment hierarchy is made displayable when its ancestor
* window is either packed or made visible.
* <p>
* A component is made undisplayable either when it is removed from
* a displayable containment hierarchy or when its containment hierarchy
* is made undisplayable. A containment hierarchy is made
* undisplayable when its ancestor window is disposed.
*
* @return <code>true</code> if the component is displayable
*/
@Override
public boolean isDisplayable() {
return true;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Icon.java b/accessibility/bridge/org/openoffice/java/accessibility/Icon.java
deleted file mode 100644
index 9889fa3..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Icon.java
+++ /dev/null
@@ -1,64 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/**
*/
public class Icon extends Component implements javax.accessibility.Accessible {
protected Icon(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleIcon();
}
protected class AccessibleIcon extends AccessibleUNOComponent {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleIcon() {
super();
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleIcon[] getAccessibleIcon() {
try {
XAccessibleImage unoAccessibleImage = UnoRuntime.queryInterface(XAccessibleImage.class,
unoAccessibleComponent);
if (unoAccessibleImage != null) {
javax.accessibility.AccessibleIcon[] icons = {
new AccessibleIconImpl(unoAccessibleImage)
};
return icons;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Label.java b/accessibility/bridge/org/openoffice/java/accessibility/Label.java
deleted file mode 100644
index 70e0628..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Label.java
+++ /dev/null
@@ -1,118 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/**
*/
public class Label extends Component implements javax.accessibility.Accessible {
protected Label(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleLabel();
}
protected class AccessibleLabel extends AccessibleUNOComponent {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleLabel() {
super();
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.LABEL;
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class,
unoAccessibleContext);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the relation set of this object */
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet = unoAccessibleContext.getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return null;
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.LABEL_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABEL_FOR,
getAccessibleComponents(
unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
getAccessibleComponents(
unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/List.java b/accessibility/bridge/org/openoffice/java/accessibility/List.java
deleted file mode 100644
index cfa9e19..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/List.java
+++ /dev/null
@@ -1,434 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleContext;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.accessibility.*;
public class List extends DescendantManager implements javax.accessibility.Accessible {
protected List(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected void setActiveDescendant(javax.accessibility.Accessible descendant) {
javax.accessibility.Accessible oldAD = activeDescendant;
activeDescendant = descendant;
firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
oldAD, descendant);
}
protected void setActiveDescendant(Object any) {
javax.accessibility.Accessible descendant = null;
try {
if (AnyConverter.isObject(any)) {
XAccessible unoAccessible = (XAccessible) AnyConverter.toObject(
AccessibleObjectFactory.XAccessibleType, any);
if (unoAccessible != null) {
// FIXME: have to handle non transient objects here ..
descendant = new ListItem(unoAccessible);
if (Build.DEBUG) {
try {
if (Build.DEBUG) {
System.err.println("[List] retrieved active descendant event: new descendant is " +
unoAccessible.getAccessibleContext().getAccessibleName());
}
} catch (java.lang.NullPointerException e) {
System.err.println("*** ERROR *** new active descendant not accessible");
}
}
}
}
setActiveDescendant(descendant);
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void add(XAccessible unoAccessible) {
if (unoAccessible != null) {
ListItem item = new ListItem(unoAccessible);
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, item.getAccessibleContext());
}
}
protected void remove(XAccessible unoAccessible) {
if (unoAccessible != null) {
ListItem item = new ListItem(unoAccessible);
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
item.getAccessibleContext(), null);
}
}
protected void add(Object any) {
try {
add((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void remove(Object any) {
try {
remove((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleListListener extends AccessibleDescendantManagerListener {
protected AccessibleListListener() {
super();
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.ACTIVE_DESCENDANT_CHANGED:
setActiveDescendant(event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
remove(event.OldValue);
}
if (AnyConverter.isObject(event.NewValue)) {
add(event.NewValue);
}
break;
case AccessibleEventId.INVALIDATE_ALL_CHILDREN:
// Since List items a transient a child events are mostly used
// to attach/detach listeners, it is save to ignore it here
break;
default:
super.notifyEvent(event);
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleListListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleList();
}
protected class AccessibleList extends AccessibleDescendantManager {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.LIST;
}
/** Returns the specified Accessible child of the object */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = List.this.activeDescendant;
if ((activeDescendant instanceof ListItem) && xAccessible.equals(((ListItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new ListItem(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleComponent
*/
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, p.y));
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = List.this.activeDescendant;
if ((activeDescendant instanceof ListItem) && xAccessible.equals(((ListItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new ListItem(xAccessible);
}
}
return child;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleSelection.getSelectedAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = List.this.activeDescendant;
if ((activeDescendant instanceof ListItem) && xAccessible.equals(((ListItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new ListItem(xAccessible);
}
} else if (Build.DEBUG) {
System.out.println(i + "th selected child is not accessible");
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
if (Build.DEBUG) {
System.err.println("IndexOutOfBoundsException caught for AccessibleList.getAccessibleSelection(" + i + ")");
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
}
class ListItem extends java.awt.Component implements javax.accessibility.Accessible {
protected XAccessible unoAccessible;
public ListItem(XAccessible xAccessible) {
unoAccessible = xAccessible;
}
public Object[] create(Object[] targetSet) {
try {
java.util.ArrayList<ListItem> list = new java.util.ArrayList<ListItem>(targetSet.length);
for (int i=0; i < targetSet.length; i++) {
XAccessible xAccessible = UnoRuntime.queryInterface(
XAccessible.class, targetSet[i]);
if (xAccessible != null) {
list.add(new ListItem(xAccessible));
}
}
list.trimToSize();
return list.toArray();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
try {
XAccessibleContext xAccessibleContext = unoAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
javax.accessibility.AccessibleContext ac = new AccessibleListItem(xAccessibleContext);
ac.setAccessibleParent(List.this);
accessibleContext = ac;
AccessibleStateAdapter.setComponentState(this, xAccessibleContext.getAccessibleStateSet());
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
return accessibleContext;
}
protected class AccessibleListItem extends javax.accessibility.AccessibleContext {
XAccessibleContext unoAccessibleContext;
public AccessibleListItem(XAccessibleContext xAccessibleContext) {
unoAccessibleContext = xAccessibleContext;
}
/** Returns the accessible name of this object */
public String getAccessibleName() {
try {
return unoAccessibleContext.getAccessibleName();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleName(String name) {
// Not supported
}
/** Returns the accessible name of this object */
public String getAccessibleDescription() {
try {
return unoAccessibleContext.getAccessibleDescription();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleDescription(String name) {
// Not supported
}
/** Returns the accessible role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
try {
javax.accessibility.AccessibleRole role = AccessibleRoleAdapter.getAccessibleRole(
unoAccessibleContext.getAccessibleRole());
return (role != null) ? role : javax.accessibility.AccessibleRole.LABEL;
} catch(com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the locale of the component */
public java.util.Locale getLocale() throws java.awt.IllegalComponentStateException {
try {
com.sun.star.lang.Locale unoLocale = unoAccessibleContext.getLocale();
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
} catch (IllegalAccessibleComponentStateException e) {
throw new java.awt.IllegalComponentStateException(e.getMessage());
} catch (com.sun.star.uno.RuntimeException e) {
return List.this.getLocale();
}
}
/** Gets the 0-based index of this object in its accessible parent */
public int getAccessibleIndexInParent() {
try {
return unoAccessibleContext.getAccessibleIndexInParent();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the number of accessible children of the object. */
public int getAccessibleChildrenCount() {
try {
return unoAccessibleContext.getAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the specified Accessible child of the object. */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = List.this.activeDescendant;
if ((activeDescendant instanceof ListItem) && ((ListItem) activeDescendant).unoAccessible.equals(xAccessible)) {
child = activeDescendant;
} else if (xAccessible != null) {
child = new ListItem(xAccessible);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Returns the state set of this object */
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
try {
return AccessibleStateAdapter.getAccessibleStateSet(ListItem.this,
unoAccessibleContext.getAccessibleStateSet());
} catch (com.sun.star.uno.RuntimeException e) {
return AccessibleStateAdapter.getDefunctStateSet();
}
}
/** Gets the AccessibleComponent associated with this object that has a graphical representation */
public javax.accessibility.AccessibleComponent getAccessibleComponent() {
try {
XAccessibleComponent unoAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class, unoAccessibleContext);
return (unoAccessibleComponent != null) ?
new AccessibleComponentImpl(unoAccessibleComponent) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleAction associated with this object that has a graphical representation */
public javax.accessibility.AccessibleAction getAccessibleAction() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleContext);
return (unoAccessibleAction != null) ?
new AccessibleActionImpl(unoAccessibleAction) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object that has a graphical representation */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class, unoAccessibleContext);
return (unoAccessibleText != null) ?
new AccessibleTextImpl(unoAccessibleText) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleValue associated with this object that has a graphical representation */
public javax.accessibility.AccessibleValue getAccessibleValue() {
try {
XAccessibleValue unoAccessibleValue = UnoRuntime.queryInterface(XAccessibleValue.class, unoAccessibleContext);
return (unoAccessibleValue != null) ?
new AccessibleValueImpl(unoAccessibleValue) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleIcon[] getAccessibleIcon() {
try {
XAccessibleImage unoAccessibleImage = UnoRuntime.queryInterface(XAccessibleImage.class, unoAccessibleContext);
if (unoAccessibleImage != null) {
javax.accessibility.AccessibleIcon[] icons = { new AccessibleIconImpl(unoAccessibleImage) };
return icons;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Menu.java b/accessibility/bridge/org/openoffice/java/accessibility/Menu.java
deleted file mode 100644
index 0056571..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Menu.java
+++ /dev/null
@@ -1,321 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import java.awt.Component;
import com.sun.star.accessibility.*;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.UnoRuntime;
public class Menu extends AbstractButton
implements javax.accessibility.Accessible {
private java.util.ArrayList<Component> children;
protected XAccessibleSelection unoAccessibleSelection = null;
protected Menu(XAccessible xAccessible,
XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
try {
// Create a vector with the correct initial capacity
int count = unoAccessibleContext.getAccessibleChildCount();
children = new java.util.ArrayList<Component>(count);
// Fill the vector with objects
for (int i = 0; i < count; i++) {
java.awt.Component c = getComponent(unoAccessibleContext.getAccessibleChild(i));
if (c != null) {
children.add(c);
}
}
} catch (com.sun.star.uno.RuntimeException e) {
if (Build.DEBUG) {
System.err.println(
"RuntimeException caught during menu initialization: " +
e.getMessage());
}
if (children == null) {
children = new java.util.ArrayList<Component>(0);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
}
}
protected synchronized void add(XAccessible unoAccessible) {
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
java.awt.Component c = getComponent(unoAccessible);
if (c != null) {
try {
children.add(unoAccessible.getAccessibleContext()
.getAccessibleIndexInParent(), c);
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null,
((javax.accessibility.Accessible) c).getAccessibleContext());
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
protected synchronized void remove(XAccessible unoAccessible) {
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
java.awt.Component c = getComponent(unoAccessible);
if (c != null) {
try {
children.remove(c);
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
((javax.accessibility.Accessible) c).getAccessibleContext(),
null);
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
protected void add(Object any) {
try {
add((XAccessible) AnyConverter.toObject(
AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void remove(Object any) {
try {
remove((XAccessible) AnyConverter.toObject(
AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected synchronized int indexOf(Object child) {
return children.indexOf(child);
}
protected java.awt.Component getComponent(XAccessible unoAccessible) {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(unoAccessible);
if (c == null) {
c = AccessibleObjectFactory.createAccessibleComponent(unoAccessible);
if (c instanceof javax.accessibility.Accessible) {
((javax.accessibility.Accessible) c).getAccessibleContext()
.setAccessibleParent(this);
}
}
return c;
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleMenuListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleMenu();
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleMenuListener
extends AccessibleUNOComponentListener {
protected AccessibleMenuListener() {
super();
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
remove(event.OldValue);
}
if (AnyConverter.isObject(event.NewValue)) {
add(event.NewValue);
}
break;
// #i56539# Java 1.5 does not fire ACCESSIBLE_SELECTION_PROPERTY for menus
case AccessibleEventId.SELECTION_CHANGED:
break;
default:
super.notifyEvent(event);
}
}
}
protected class AccessibleMenu extends AccessibleAbstractButton
implements javax.accessibility.AccessibleSelection {
protected AccessibleMenu() {
unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class,
unoAccessibleContext);
}
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.MENU;
}
/** Gets the 0-based index of this object in its accessible parent */
public int getAccessibleIndexInParent() {
if (getAccessibleParent() instanceof Menu) {
return ((Menu) getAccessibleParent()).indexOf(Menu.this);
} else {
return super.getAccessibleIndexInParent();
}
}
/** Returns the number of accessible children of the object */
public synchronized int getAccessibleChildrenCount() {
return children.size();
}
/** Returns the specified Accessible child of the object */
public synchronized javax.accessibility.Accessible getAccessibleChild(
int i) {
try {
if (i < children.size()) {
return (javax.accessibility.Accessible) children.get(i);
} else {
return null;
}
} catch (ArrayIndexOutOfBoundsException e) {
return null;
}
}
/** Returns the AccessibleSelection interface for this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
// This method is called to determine the SELECTABLE state of every
// child, so don't do the query interface here.
return this;
}
/*
* AccessibleComponent
*/
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(unoAccessibleComponent.getAccessibleAtPoint(
new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
try {
return (javax.accessibility.Accessible) getComponent(unoAccessibleSelection.getSelectedAccessibleChild(
i));
} catch (java.lang.Exception e) {
/*
* Possible exceptions are:
* java.lang.NullPointerException
* com.sun.star.uno.RuntimeException
* com.sun.star.lang.IndexOutOfBoundsException
*/
return null;
}
}
/** Adds the specified Accessible child of the object to the object's selection */
public void addAccessibleSelection(int i) {
try {
javax.accessibility.Accessible a = getAccessibleChild(i);
// selecting menu items invokes the click action in Java 1.5
if( a instanceof MenuItem )
a.getAccessibleContext().getAccessibleAction().doAccessibleAction(0);
else
unoAccessibleSelection.selectAccessibleChild(i);
} catch (java.lang.Exception e) {
/*
* Possible exceptions are:
* java.lang.NullPointerException
* com.sun.star.uno.RuntimeException
* com.sun.star.lang.IndexOutOfBoundsException
*/
}
}
/** Clears the selection in the object, so that no children in the object are selected */
public void clearAccessibleSelection() {
try {
unoAccessibleSelection.clearAccessibleSelection();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the number of Accessible children currently selected */
public int getAccessibleSelectionCount() {
try {
return unoAccessibleSelection.getSelectedAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Determines if the current child of this object is selected */
public boolean isAccessibleChildSelected(int i) {
try {
return unoAccessibleSelection.isAccessibleChildSelected(i);
} catch (java.lang.Exception e) {
/*
* Possible exceptions are:
* java.lang.NullPointerException
* com.sun.star.uno.RuntimeException
* com.sun.star.lang.IndexOutOfBoundsException
*/
return false;
}
}
/** Removes the specified child of the object from the object's selection */
public void removeAccessibleSelection(int i) {
if (isAccessibleChildSelected(i)) {
clearAccessibleSelection();
}
}
/** Causes every child of the object to be selected if the object supports multiple selection */
public void selectAllAccessibleSelection() {
// not supported
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/MenuContainer.java b/accessibility/bridge/org/openoffice/java/accessibility/MenuContainer.java
deleted file mode 100644
index 946ad27..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/MenuContainer.java
+++ /dev/null
@@ -1,156 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
/**
* Specialized container for MenuBar and Popup-Menu(s)
* FIXME: join with Menu ?
*/
public class MenuContainer extends Container implements javax.accessibility.Accessible {
protected XAccessibleSelection unoAccessibleSelection = null;
protected MenuContainer(javax.accessibility.AccessibleRole role, XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(role, xAccessible, xAccessibleContext);
}
protected class AccessibleMenuContainerListener extends AccessibleContainerListener {
protected AccessibleMenuContainerListener() {
super();
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
// #i56539# Java 1.5 does not fire ACCESSIBLE_SELECTION_PROPERTY for menus
case AccessibleEventId.SELECTION_CHANGED:
break;
default:
super.notifyEvent(event);
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleMenuContainerListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleMenuContainer();
}
protected class AccessibleMenuContainer extends AccessibleContainer implements javax.accessibility.AccessibleSelection {
protected AccessibleMenuContainer() {
unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class,
unoAccessibleContext);
}
/** Returns the AccessibleSelection interface for this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
return this;
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
try {
return (javax.accessibility.Accessible) AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleSelection.getSelectedAccessibleChild(i));
} catch (com.sun.star.uno.Exception e) {
return null;
}
}
/** Adds the specified Accessible child of the object to the object's selection */
public void addAccessibleSelection(int i) {
try {
javax.accessibility.Accessible a = getAccessibleChild(i);
// selecting menu items invokes the click action in Java 1.5
if( a instanceof MenuItem )
a.getAccessibleContext().getAccessibleAction().doAccessibleAction(0);
else
unoAccessibleSelection.selectAccessibleChild(i);
} catch (java.lang.Exception e) {
/*
* Possible exceptions are:
* java.lang.NullPointerException
* com.sun.star.uno.RuntimeException
* com.sun.star.lang.IndexOutOfBoundsException
*/
}
}
/** Clears the selection in the object, so that no children in the object are selected */
public void clearAccessibleSelection() {
try {
unoAccessibleSelection.clearAccessibleSelection();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the number of Accessible children currently selected */
public int getAccessibleSelectionCount() {
try {
return unoAccessibleSelection.getSelectedAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Determines if the current child of this object is selected */
public boolean isAccessibleChildSelected(int i) {
try {
return unoAccessibleSelection.isAccessibleChildSelected(i);
} catch (java.lang.Exception e) {
/*
* Possible exceptions are:
* java.lang.NullPointerException
* com.sun.star.uno.RuntimeException
* com.sun.star.lang.IndexOutOfBoundsException
*/
return false;
}
}
/** Removes the specified child of the object from the object's selection */
public void removeAccessibleSelection(int i) {
if (isAccessibleChildSelected(i)) {
clearAccessibleSelection();
}
}
/** Causes every child of the object to be selected if the object supports multiple selection */
public void selectAllAccessibleSelection() {
// not supported
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/MenuItem.java b/accessibility/bridge/org/openoffice/java/accessibility/MenuItem.java
deleted file mode 100644
index 6e68b63..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/MenuItem.java
+++ /dev/null
@@ -1,90 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.XAccessible;
import com.sun.star.accessibility.XAccessibleContext;
import com.sun.star.accessibility.XAccessibleEventListener;
class MenuItem extends ToggleButton {
public MenuItem(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected class AccessibleMenuItemListener extends AccessibleUNOComponentListener {
protected AccessibleMenuItemListener() {
}
protected void setComponentState(short state, boolean enable) {
// #i56538# menu items in Java 1.5 are ARMED, not SELECTED
if( state == com.sun.star.accessibility.AccessibleStateType.SELECTED )
fireStatePropertyChange(javax.accessibility.AccessibleState.ARMED, enable);
else
super.setComponentState(state, enable);
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleMenuItemListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleMenuItem();
}
protected class AccessibleMenuItem extends AccessibleToggleButton {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.MENU_ITEM;
}
/** Gets the 0-based index of this object in its accessible parent */
public int getAccessibleIndexInParent() {
if (getAccessibleParent() instanceof Menu) {
return ((Menu) getAccessibleParent()).indexOf(MenuItem.this);
} else {
return super.getAccessibleIndexInParent();
}
}
/**
* Gets the current state set of this object.
*
* @return an instance of <code>AccessibleStateSet</code>
* containing the current state set of the object
* @see javax.accessibility.AccessibleState
*/
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
javax.accessibility.AccessibleStateSet stateSet = super.getAccessibleStateSet();
// #i56538# menu items in Java do not have SELECTABLE ..
stateSet.remove(javax.accessibility.AccessibleState.SELECTABLE);
// .. and also ARMED instead of SELECTED
if( stateSet.remove(javax.accessibility.AccessibleState.SELECTED) )
stateSet.add(javax.accessibility.AccessibleState.ARMED);
return stateSet;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/NativeFrame.java b/accessibility/bridge/org/openoffice/java/accessibility/NativeFrame.java
deleted file mode 100644
index d8e9d29..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/NativeFrame.java
+++ /dev/null
@@ -1,26 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
public interface NativeFrame {
public java.awt.Component getInitialComponent();
public void setInitialComponent(java.awt.Component c);
// public Integer getHWND();
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Paragraph.java b/accessibility/bridge/org/openoffice/java/accessibility/Paragraph.java
deleted file mode 100644
index d339d75..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Paragraph.java
+++ /dev/null
@@ -1,211 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleText;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
/**
*/
public class Paragraph extends Container implements javax.accessibility.Accessible {
protected Paragraph(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(javax.accessibility.AccessibleRole.TEXT, xAccessible, xAccessibleContext);
}
protected class AccessibleParagraphListener extends AccessibleContainerListener {
protected AccessibleParagraphListener() {
super();
}
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.EDITABLE:
fireStatePropertyChange(javax.accessibility.AccessibleState.EDITABLE, enable);
break;
case AccessibleStateType.MULTI_LINE:
fireStatePropertyChange(javax.accessibility.AccessibleState.MULTI_LINE, enable);
break;
case AccessibleStateType.SINGLE_LINE:
break;
default:
super.setComponentState(state, enable);
break;
}
}
protected void handleVisibleDataChanged() {
if (Paragraph.this.isFocusOwner()) {
AccessibleContext ac = accessibleContext;
if (ac != null) {
AccessibleText at = ac.getAccessibleText();
if (at != null) {
int pos = at.getCaretPosition();
// Simulating a caret event here should help at tools
// that re not aware of the paragraph approach of OOo.
firePropertyChange(AccessibleContext.ACCESSIBLE_CARET_PROPERTY,
new Integer(-1), new Integer(pos));
}
}
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.CARET_CHANGED:
firePropertyChange(AccessibleContext.ACCESSIBLE_CARET_PROPERTY,
Component.toNumber(event.OldValue),
Component.toNumber(event.NewValue));
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
// Whenever a paragraph gets inserted above the currently
// focused one, this is the only event that will occur for.
handleVisibleDataChanged();
default:
super.notifyEvent(event);
break;
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleParagraphListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleParagraph();
}
protected class AccessibleParagraph extends AccessibleContainer {
protected AccessibleParagraph() {
// Don't do the queryInterface on XAccessibleText already ..
super(false);
/* Since getAccessibleText() is heavily used by the java access
* bridge for gnome and the gnome at-tools, we do a query interface
* here and remember the result.
*/
accessibleText = AccessibleHypertextImpl.get(unoAccessibleContext);
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TEXT;
}
/** Gets the AccessibleEditableText associated with this object presenting text on the display */
public javax.accessibility.AccessibleEditableText getAccessibleEditableText() {
if (disposed)
return null;
try {
XAccessibleEditableText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleEditableText.class,
unoAccessibleComponent);
if (unoAccessibleText != null) {
return new AccessibleEditableTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleAction associated with this object that has a graphical representation */
public javax.accessibility.AccessibleAction getAccessibleAction() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleComponent);
return (unoAccessibleAction != null) ?
new AccessibleActionImpl(unoAccessibleAction) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the relation set of this object */
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet =
unoAccessible.getAccessibleContext().getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return super.getAccessibleRelationSet();
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.CONTROLLED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLED_BY,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTROLLER_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLER_FOR,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.LABELED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABELED_BY,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTENT_FLOWS_TO:
relationSet.add(new javax.accessibility.AccessibleRelation(
"flowsTo",
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTENT_FLOWS_FROM:
relationSet.add(new javax.accessibility.AccessibleRelation(
"flowsFrom",
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return super.getAccessibleRelationSet();
} catch (com.sun.star.uno.RuntimeException e) {
return super.getAccessibleRelationSet();
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/RadioButton.java b/accessibility/bridge/org/openoffice/java/accessibility/RadioButton.java
deleted file mode 100644
index 2b07576..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/RadioButton.java
+++ /dev/null
@@ -1,40 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
class RadioButton extends ToggleButton {
public RadioButton(XAccessible xAccessible,
XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleRadioButton();
}
protected class AccessibleRadioButton extends AccessibleToggleButton {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.RADIO_BUTTON;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/ScrollBar.java b/accessibility/bridge/org/openoffice/java/accessibility/ScrollBar.java
deleted file mode 100644
index 31f4758..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/ScrollBar.java
+++ /dev/null
@@ -1,114 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.swing.SwingConstants;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
/**
*/
public class ScrollBar extends Component implements SwingConstants, javax.accessibility.Accessible {
public ScrollBar(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleScrollBar();
}
protected class AccessibleScrollBar extends AccessibleUNOComponent implements
javax.accessibility.AccessibleAction {
protected XAccessibleAction unoAccessibleAction;
protected int actionCount = 0;
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleScrollBar() {
super();
unoAccessibleAction = UnoRuntime.queryInterface(
XAccessibleAction.class, unoAccessibleContext);
if (unoAccessibleAction != null) {
actionCount = unoAccessibleAction.getAccessibleActionCount();
}
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.SCROLL_BAR;
}
/** Gets the AccessibleValue associated with this object that has a graphical representation */
public javax.accessibility.AccessibleValue getAccessibleValue() {
try {
XAccessibleValue unoAccessibleValue = UnoRuntime.queryInterface(XAccessibleValue.class, unoAccessibleContext);
return (unoAccessibleValue != null) ?
new AccessibleValueImpl(unoAccessibleValue) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleAction associated with this object that supports one or more actions */
public javax.accessibility.AccessibleAction getAccessibleAction() {
return this;
}
/*
* AccessibleAction
*/
/** Performs the specified Action on the object */
public boolean doAccessibleAction(int param) {
if (param < actionCount) {
try {
return unoAccessibleAction.doAccessibleAction(param);
} catch(com.sun.star.lang.IndexOutOfBoundsException e) {
}
}
return false;
}
/** Returns a description of the specified action of the object */
public java.lang.String getAccessibleActionDescription(int param) {
if(param < actionCount) {
try {
return unoAccessibleAction.getAccessibleActionDescription(param);
} catch(com.sun.star.lang.IndexOutOfBoundsException e) {
}
}
return null;
}
/** Returns the number of accessible actions available in this object */
public int getAccessibleActionCount() {
return actionCount;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Separator.java b/accessibility/bridge/org/openoffice/java/accessibility/Separator.java
deleted file mode 100644
index 4c92fed..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Separator.java
+++ /dev/null
@@ -1,57 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import javax.swing.SwingConstants;
/**
*/
public class Separator extends Component implements SwingConstants,
javax.accessibility.Accessible {
public Separator(XAccessible xAccessible,
XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
setFocusable(false);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleSeparator();
}
protected class AccessibleSeparator extends AccessibleUNOComponent {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleSeparator() {
super();
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.SEPARATOR;
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Table.java b/accessibility/bridge/org/openoffice/java/accessibility/Table.java
deleted file mode 100644
index 5896082..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Table.java
+++ /dev/null
@@ -1,709 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.accessibility.*;
public class Table extends DescendantManager implements javax.accessibility.Accessible {
protected Table(XAccessible xAccessible, XAccessibleContext xAccessibleContext, boolean multiselectable) {
super(xAccessible, xAccessibleContext, multiselectable);
}
protected void setActiveDescendant(javax.accessibility.Accessible descendant) {
javax.accessibility.Accessible oldAD = activeDescendant;
activeDescendant = descendant;
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
oldAD, descendant);
}
protected void setActiveDescendant(Object any) {
javax.accessibility.Accessible descendant = null;
try {
if (AnyConverter.isObject(any)) {
XAccessible unoAccessible = (XAccessible) AnyConverter.toObject(
AccessibleObjectFactory.XAccessibleType, any);
if (unoAccessible != null) {
// FIXME: have to handle non transient objects here ..
descendant = new TableCell(unoAccessible);
}
}
setActiveDescendant(descendant);
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void add(XAccessible unoAccessible) {
if (unoAccessible != null) {
TableCell cell = new TableCell(unoAccessible);
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, cell.getAccessibleContext());
}
}
protected void remove(XAccessible unoAccessible) {
if (unoAccessible != null) {
TableCell cell = new TableCell(unoAccessible);
// The AccessBridge for Windows expects an instance of AccessibleContext
// as parameters
firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
cell.getAccessibleContext(), null);
}
}
protected void add(Object any) {
try {
add((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void remove(Object any) {
try {
remove((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleTableListener extends AccessibleDescendantManagerListener {
protected AccessibleTableListener() {
super();
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.ACTIVE_DESCENDANT_CHANGED:
setActiveDescendant(event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
remove(event.OldValue);
}
if (AnyConverter.isObject(event.NewValue)) {
add(event.NewValue);
}
break;
default:
super.notifyEvent(event);
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleTableListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleTable();
}
protected class AccessibleTable extends AccessibleDescendantManager implements javax.accessibility.AccessibleExtendedTable {
protected XAccessibleTable unoAccessibleTable;
public AccessibleTable() {
unoAccessibleTable = UnoRuntime.queryInterface(XAccessibleTable.class, unoAccessibleContext);
}
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TABLE;
}
/** Returns the AccessibleTable interface of this object */
public javax.accessibility.AccessibleTable getAccessibleTable() {
return this;
}
/** Returns the specified Accessible child of the object */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Table.this.activeDescendant;
if ((activeDescendant instanceof TableCell) && xAccessible.equals(((TableCell) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TableCell(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleComponent
*/
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleComponent.getAccessibleAtPoint(
new com.sun.star.awt.Point(p.x, p.y));
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Table.this.activeDescendant;
if ((activeDescendant instanceof TableCell) && xAccessible.equals(((TableCell) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TableCell(xAccessible);
}
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleSelection.getSelectedAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Table.this.activeDescendant;
if ((activeDescendant instanceof TableCell) && xAccessible.equals(((TableCell) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TableCell(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleTable
*/
/** Returns the Accessible at a specified row and column in the table. */
public javax.accessibility.Accessible getAccessibleAt(int r, int c) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleTable.getAccessibleCellAt(r,c);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Table.this.activeDescendant;
if ((activeDescendant instanceof TableCell) && xAccessible.equals(((TableCell) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TableCell(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Returns the caption for the table. */
public javax.accessibility.Accessible getAccessibleCaption() {
// Not yet supported.
return null;
}
/** Returns the number of columns in the table. */
public int getAccessibleColumnCount() {
try {
return unoAccessibleTable.getAccessibleColumnCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the description text of the specified column in the table. */
public javax.accessibility.Accessible getAccessibleColumnDescription(int c) {
try {
return new javax.swing.JLabel(
unoAccessibleTable.getAccessibleColumnDescription(c));
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/**
* Returns the number of columns occupied by the Accessible
* at a specified row and column in the table.
*/
public int getAccessibleColumnExtentAt(int r, int c) {
try {
return unoAccessibleTable.getAccessibleColumnExtentAt(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return 0;
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the column headers as an AccessibleTable. */
public javax.accessibility.AccessibleTable getAccessibleColumnHeader() {
// Not yet supported
return null;
}
/** Returns the number of rows in the table. */
public int getAccessibleRowCount() {
try {
return unoAccessibleTable.getAccessibleRowCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the description of the specified row in the table. */
public javax.accessibility.Accessible getAccessibleRowDescription(int r) {
try {
return new javax.swing.JLabel(
unoAccessibleTable.getAccessibleRowDescription(r));
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/**
* Returns the number of rows occupied by the Accessible
* at a specified row and column in the table.
*/
public int getAccessibleRowExtentAt(int r, int c) {
try {
return unoAccessibleTable.getAccessibleRowExtentAt(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return 0;
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the row headers as an AccessibleTable. */
public javax.accessibility.AccessibleTable getAccessibleRowHeader() {
// Not yet supported
return null;
}
/** Returns the summary description of the table. */
public javax.accessibility.Accessible getAccessibleSummary() {
// Not yet supported.
return null;
}
/** Returns the selected columns in a table. */
public int[] getSelectedAccessibleColumns() {
try {
return unoAccessibleTable.getSelectedAccessibleColumns();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the selected rows in a table. */
public int[] getSelectedAccessibleRows() {
try {
return unoAccessibleTable.getSelectedAccessibleRows();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns a boolean value indicating whether the specified column is selected. */
public boolean isAccessibleColumnSelected(int c) {
try {
return unoAccessibleTable.isAccessibleColumnSelected(c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns a boolean value indicating whether the specified row is selected. */
public boolean isAccessibleRowSelected(int r) {
try {
return unoAccessibleTable.isAccessibleRowSelected(r);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/**
* Returns a boolean value indicating whether the accessible
* at a specified row and column is selected.
*/
public boolean isAccessibleSelected(int r, int c) {
try {
return unoAccessibleTable.isAccessibleSelected(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Sets the caption for the table. */
public void setAccessibleCaption(javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the description text of the specified column in the table. */
public void setAccessibleColumnDescription(int param, javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the column headers. */
public void setAccessibleColumnHeader(javax.accessibility.AccessibleTable accessibleTable) {
// Not supported by the UNO Accessibility API
}
/** Sets the description text of the specified row of the table. */
public void setAccessibleRowDescription(int param, javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the row headers. */
public void setAccessibleRowHeader(javax.accessibility.AccessibleTable accessibleTable) {
// Not supported by the UNO Accessibility API
}
/** Sets the summary description of the table */
public void setAccessibleSummary(javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Returns the column number of an index in the table */
public int getAccessibleColumn(int index) {
try {
return unoAccessibleTable.getAccessibleColumn(index);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the index of a specified row and column in the table. */
public int getAccessibleIndex(int r, int c) {
try {
return unoAccessibleTable.getAccessibleIndex(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the row number of an index in the table */
public int getAccessibleRow(int index) {
try {
return unoAccessibleTable.getAccessibleRow(index);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
}
class TableCell extends java.awt.Component implements javax.accessibility.Accessible {
protected XAccessible unoAccessible;
public TableCell(XAccessible xAccessible) {
unoAccessible = xAccessible;
}
public Object[] create(Object[] targetSet) {
try {
java.util.ArrayList<TableCell> list = new java.util.ArrayList<TableCell>(targetSet.length);
for (int i=0; i < targetSet.length; i++) {
XAccessible xAccessible = UnoRuntime.queryInterface(
XAccessible.class, targetSet[i]);
if (xAccessible != null) {
list.add(new TableCell(xAccessible));
}
}
list.trimToSize();
return list.toArray();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
try {
XAccessibleContext xAccessibleContext = unoAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
javax.accessibility.AccessibleContext ac = new AccessibleTableCell(xAccessibleContext);
ac.setAccessibleParent(Table.this);
accessibleContext = ac;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
return accessibleContext;
}
protected class AccessibleTableCell extends javax.accessibility.AccessibleContext {
XAccessibleContext unoAccessibleContext;
public AccessibleTableCell(XAccessibleContext xAccessibleContext) {
unoAccessibleContext = xAccessibleContext;
}
/** Returns the accessible name of this object */
public String getAccessibleName() {
try {
return unoAccessibleContext.getAccessibleName();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleName(String name) {
// Not supported
}
/** Returns the accessible name of this object */
public String getAccessibleDescription() {
try {
return unoAccessibleContext.getAccessibleDescription();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleDescription(String name) {
// Not supported
}
/** Returns the accessible role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
try {
javax.accessibility.AccessibleRole role = AccessibleRoleAdapter.getAccessibleRole(
unoAccessibleContext.getAccessibleRole());
return (role != null) ? role : javax.accessibility.AccessibleRole.LABEL;
} catch(com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the locale of the component */
public java.util.Locale getLocale() throws java.awt.IllegalComponentStateException {
try {
com.sun.star.lang.Locale unoLocale = unoAccessibleContext.getLocale();
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
} catch (IllegalAccessibleComponentStateException e) {
throw new java.awt.IllegalComponentStateException(e.getMessage());
} catch (com.sun.star.uno.RuntimeException e) {
return Table.this.getLocale();
}
}
/** Gets the 0-based index of this object in its accessible parent */
public int getAccessibleIndexInParent() {
try {
return unoAccessibleContext.getAccessibleIndexInParent();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the number of accessible children of the object. */
public int getAccessibleChildrenCount() {
try {
return unoAccessibleContext.getAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the specified Accessible child of the object. */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Table.this.activeDescendant;
if ((activeDescendant instanceof TableCell) && ((TableCell) activeDescendant).unoAccessible.equals(xAccessible)) {
child = activeDescendant;
} else if (xAccessible != null) {
child = new TableCell(xAccessible);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Returns the state set of this object */
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
try {
return AccessibleStateAdapter.getAccessibleStateSet(TableCell.this,
unoAccessibleContext.getAccessibleStateSet());
} catch (com.sun.star.uno.RuntimeException e) {
return AccessibleStateAdapter.getDefunctStateSet();
}
}
/** Returns the relation set of this object */
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet = unoAccessibleContext.getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return null;
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.CONTROLLED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLED_BY,
create(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTROLLER_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLER_FOR,
create(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.LABELED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABELED_BY,
create(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.LABEL_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABEL_FOR,
create(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
create(unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleComponent associated with this object that has a graphical representation */
public javax.accessibility.AccessibleComponent getAccessibleComponent() {
try {
XAccessibleComponent unoAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class, unoAccessibleContext);
return (unoAccessibleComponent != null) ?
new AccessibleComponentImpl(unoAccessibleComponent) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleAction associated with this object that has a graphical representation */
public javax.accessibility.AccessibleAction getAccessibleAction() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleContext);
return (unoAccessibleAction != null) ?
new AccessibleActionImpl(unoAccessibleAction) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object that has a graphical representation */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class, unoAccessibleContext);
return (unoAccessibleText != null) ?
new AccessibleTextImpl(unoAccessibleText) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleValue associated with this object that has a graphical representation */
public javax.accessibility.AccessibleValue getAccessibleValue() {
try {
XAccessibleValue unoAccessibleValue = UnoRuntime.queryInterface(XAccessibleValue.class, unoAccessibleContext);
return (unoAccessibleValue != null) ?
new AccessibleValueImpl(unoAccessibleValue) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleIcon[] getAccessibleIcon() {
try {
XAccessibleImage unoAccessibleImage = UnoRuntime.queryInterface(XAccessibleImage.class, unoAccessibleContext);
if (unoAccessibleImage != null) {
javax.accessibility.AccessibleIcon[] icons = { new AccessibleIconImpl(unoAccessibleImage) };
return icons;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/TextComponent.java b/accessibility/bridge/org/openoffice/java/accessibility/TextComponent.java
deleted file mode 100644
index a9c27d2..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/TextComponent.java
+++ /dev/null
@@ -1,182 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.accessibility.*;
/**
*/
public class TextComponent extends Component implements javax.accessibility.Accessible {
protected TextComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected class AccessibleTextComponentListener extends AccessibleUNOComponentListener {
protected AccessibleTextComponentListener() {
super();
}
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.EDITABLE:
fireStatePropertyChange(javax.accessibility.AccessibleState.EDITABLE, enable);
break;
case AccessibleStateType.MULTI_LINE:
fireStatePropertyChange(javax.accessibility.AccessibleState.MULTI_LINE, enable);
break;
case AccessibleStateType.SINGLE_LINE:
break;
default:
super.setComponentState(state, enable);
break;
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleTextComponentListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleTextComponent();
}
protected class AccessibleTextComponent extends AccessibleUNOComponent {
/**
* Though the class is abstract, this should be called by all sub-classes
*/
protected AccessibleTextComponent() {
super();
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TEXT;
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class,unoAccessibleComponent);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleEditableText associated with this object presenting text on the display */
public javax.accessibility.AccessibleEditableText getAccessibleEditableText() {
try {
XAccessibleEditableText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleEditableText.class,unoAccessibleComponent);
if (unoAccessibleText != null) {
return new AccessibleEditableTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleAction associated with this object that has a graphical representation */
public javax.accessibility.AccessibleAction getAccessibleAction() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleComponent);
return (unoAccessibleAction != null) ?
new AccessibleActionImpl(unoAccessibleAction) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the relation set of this object */
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet =
unoAccessible.getAccessibleContext().getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return super.getAccessibleRelationSet();
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.CONTROLLED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLED_BY,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTROLLER_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.CONTROLLER_FOR,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.LABELED_BY:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABELED_BY,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTENT_FLOWS_TO:
relationSet.add(new javax.accessibility.AccessibleRelation(
"flowsTo",
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.CONTENT_FLOWS_FROM:
relationSet.add(new javax.accessibility.AccessibleRelation(
"flowsFrom",
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return super.getAccessibleRelationSet();
} catch (com.sun.star.uno.RuntimeException e) {
return super.getAccessibleRelationSet();
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/ToggleButton.java b/accessibility/bridge/org/openoffice/java/accessibility/ToggleButton.java
deleted file mode 100644
index c433315..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/ToggleButton.java
+++ /dev/null
@@ -1,53 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
class ToggleButton extends AbstractButton implements javax.accessibility.Accessible {
public ToggleButton(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleToggleButton();
}
protected class AccessibleToggleButton extends AccessibleAbstractButton {
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TOGGLE_BUTTON;
}
/** Gets the AccessibleValue associated with this object that has a graphical representation */
public javax.accessibility.AccessibleValue getAccessibleValue() {
try {
XAccessibleValue unoAccessibleValue = UnoRuntime.queryInterface(XAccessibleValue.class,
unoAccessibleContext);
return (unoAccessibleValue != null)
? new AccessibleValueImpl(unoAccessibleValue) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/ToolTip.java b/accessibility/bridge/org/openoffice/java/accessibility/ToolTip.java
deleted file mode 100644
index 1264619..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/ToolTip.java
+++ /dev/null
@@ -1,105 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/**
*/
public class ToolTip extends Component implements javax.accessibility.Accessible {
protected ToolTip(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleToolTip();
}
protected class AccessibleToolTip extends AccessibleUNOComponent {
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TOOL_TIP;
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class,
unoAccessibleComponent);
if (unoAccessibleText != null) {
return new AccessibleTextImpl(unoAccessibleText);
} else {
return null;
}
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the relation set of this object */
/*
public javax.accessibility.AccessibleRelationSet getAccessibleRelationSet() {
try {
XAccessibleRelationSet unoAccessibleRelationSet = unoAccessibleContext.getAccessibleRelationSet();
if (unoAccessibleRelationSet == null) {
return null;
}
javax.accessibility.AccessibleRelationSet relationSet = new javax.accessibility.AccessibleRelationSet();
int count = unoAccessibleRelationSet.getRelationCount();
for (int i = 0; i < count; i++) {
AccessibleRelation unoAccessibleRelation = unoAccessibleRelationSet.getRelation(i);
switch (unoAccessibleRelation.RelationType) {
case AccessibleRelationType.LABEL_FOR:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.LABEL_FOR,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
case AccessibleRelationType.MEMBER_OF:
relationSet.add(new javax.accessibility.AccessibleRelation(
javax.accessibility.AccessibleRelation.MEMBER_OF,
getAccessibleComponents(unoAccessibleRelation.TargetSet)));
break;
default:
break;
}
}
return relationSet;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
*/
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Tree.java b/accessibility/bridge/org/openoffice/java/accessibility/Tree.java
deleted file mode 100644
index a0a59c9..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Tree.java
+++ /dev/null
@@ -1,751 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleState;
import com.sun.star.uno.AnyConverter;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.accessibility.*;
public class Tree extends DescendantManager implements javax.accessibility.Accessible {
protected Tree(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
super(xAccessible, xAccessibleContext);
}
protected void setActiveDescendant(javax.accessibility.Accessible descendant) {
javax.accessibility.Accessible oldAD = activeDescendant;
activeDescendant = descendant;
firePropertyChange(AccessibleContext.ACCESSIBLE_ACTIVE_DESCENDANT_PROPERTY,
oldAD, descendant);
}
protected void setActiveDescendant(Object any) {
javax.accessibility.Accessible descendant = null;
try {
if (AnyConverter.isObject(any)) {
XAccessible unoAccessible = (XAccessible) AnyConverter.toObject(
AccessibleObjectFactory.XAccessibleType, any);
if (unoAccessible != null) {
// FIXME: have to handle non transient objects here ..
descendant = new TreeItem(unoAccessible);
}
}
setActiveDescendant(descendant);
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void add(XAccessible unoAccessible) {
if (unoAccessible != null) {
firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, new TreeItem(unoAccessible));
}
}
protected void remove(XAccessible unoAccessible) {
if (unoAccessible != null) {
firePropertyChange(AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
new TreeItem(unoAccessible), null);
}
}
protected void add(Object any) {
try {
add((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
protected void remove(Object any) {
try {
remove((XAccessible) AnyConverter.toObject(AccessibleObjectFactory.XAccessibleType, any));
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleTreeListener extends AccessibleDescendantManagerListener {
protected AccessibleTreeListener() {
super();
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.ACTIVE_DESCENDANT_CHANGED:
setActiveDescendant(event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
remove(event.OldValue);
}
if (AnyConverter.isObject(event.NewValue)) {
add(event.NewValue);
}
break;
case AccessibleEventId.LISTBOX_ENTRY_EXPANDED:
firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.COLLAPSED, AccessibleState.EXPANDED);
break;
case AccessibleEventId.LISTBOX_ENTRY_COLLAPSED:
firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
AccessibleState.EXPANDED, AccessibleState.COLLAPSED);
break;
default:
super.notifyEvent(event);
}
}
}
protected XAccessibleEventListener createEventListener() {
return new AccessibleTreeListener();
}
/** Creates the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext createAccessibleContext() {
return new AccessibleTree();
}
protected class AccessibleTree extends AccessibleDescendantManager implements javax.accessibility.AccessibleExtendedTable {
protected XAccessibleTable unoAccessibleTable;
public AccessibleTree() {
unoAccessibleTable = UnoRuntime.queryInterface(XAccessibleTable.class, unoAccessibleContext);
}
/*
* AccessibleContext
*/
/** Gets the role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
return javax.accessibility.AccessibleRole.TREE;
}
/** Returns the AccessibleTable interface of this object */
public javax.accessibility.AccessibleTable getAccessibleTable() {
return ( unoAccessibleTable != null ) ? this : null;
}
/** Returns the specified Accessible child of the object */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Tree.this.activeDescendant;
if ((activeDescendant instanceof TreeItem) && xAccessible.equals(((TreeItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TreeItem(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleComponent
*/
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleComponent.getAccessibleAtPoint(
new com.sun.star.awt.Point(p.x, p.y));
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Tree.this.activeDescendant;
if ((activeDescendant instanceof TreeItem) && xAccessible.equals(((TreeItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TreeItem(xAccessible);
}
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Tree.this.activeDescendant;
if ((activeDescendant instanceof TreeItem) && xAccessible.equals(((TreeItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TreeItem(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/*
* AccessibleTable
*/
/** Returns the Accessible at a specified row and column in the table. */
public javax.accessibility.Accessible getAccessibleAt(int r, int c) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleTable.getAccessibleCellAt(r,c);
if (xAccessible != null) {
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Tree.this.activeDescendant;
if ((activeDescendant instanceof TreeItem) && xAccessible.equals(((TreeItem) activeDescendant).unoAccessible)) {
child = activeDescendant;
} else {
child = new TreeItem(xAccessible);
}
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Returns the caption for the table. */
public javax.accessibility.Accessible getAccessibleCaption() {
// Not yet supported.
return null;
}
/** Returns the number of columns in the table. */
public int getAccessibleColumnCount() {
try {
return unoAccessibleTable.getAccessibleColumnCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the description text of the specified column in the table. */
public javax.accessibility.Accessible getAccessibleColumnDescription(int c) {
try {
return new javax.swing.JLabel(
unoAccessibleTable.getAccessibleColumnDescription(c));
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/**
* Returns the number of columns occupied by the Accessible
* at a specified row and column in the table.
*/
public int getAccessibleColumnExtentAt(int r, int c) {
try {
return unoAccessibleTable.getAccessibleColumnExtentAt(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return 0;
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the column headers as an AccessibleTable. */
public javax.accessibility.AccessibleTable getAccessibleColumnHeader() {
// Not yet supported
return null;
}
/** Returns the number of rows in the table. */
public int getAccessibleRowCount() {
try {
return unoAccessibleTable.getAccessibleRowCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the description of the specified row in the table. */
public javax.accessibility.Accessible getAccessibleRowDescription(int r) {
try {
return new javax.swing.JLabel(
unoAccessibleTable.getAccessibleRowDescription(r));
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/**
* Returns the number of rows occupied by the Accessible
* at a specified row and column in the table.
*/
public int getAccessibleRowExtentAt(int r, int c) {
try {
return unoAccessibleTable.getAccessibleRowExtentAt(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return 0;
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the row headers as an AccessibleTable. */
public javax.accessibility.AccessibleTable getAccessibleRowHeader() {
// Not yet supported
return null;
}
/** Returns the summary description of the table. */
public javax.accessibility.Accessible getAccessibleSummary() {
// Not yet supported.
return null;
}
/** Returns the selected columns in a table. */
public int[] getSelectedAccessibleColumns() {
try {
return unoAccessibleTable.getSelectedAccessibleColumns();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the selected rows in a table. */
public int[] getSelectedAccessibleRows() {
try {
return unoAccessibleTable.getSelectedAccessibleRows();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns a boolean value indicating whether the specified column is selected. */
public boolean isAccessibleColumnSelected(int c) {
try {
return unoAccessibleTable.isAccessibleColumnSelected(c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns a boolean value indicating whether the specified row is selected. */
public boolean isAccessibleRowSelected(int r) {
try {
return unoAccessibleTable.isAccessibleRowSelected(r);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/**
* Returns a boolean value indicating whether the accessible
* at a specified row and column is selected.
*/
public boolean isAccessibleSelected(int r, int c) {
try {
return unoAccessibleTable.isAccessibleSelected(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Sets the caption for the table. */
public void setAccessibleCaption(javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the description text of the specified column in the table. */
public void setAccessibleColumnDescription(int param, javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the column headers. */
public void setAccessibleColumnHeader(javax.accessibility.AccessibleTable accessibleTable) {
// Not supported by the UNO Accessibility API
}
/** Sets the description text of the specified row of the table. */
public void setAccessibleRowDescription(int param, javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Sets the row headers. */
public void setAccessibleRowHeader(javax.accessibility.AccessibleTable accessibleTable) {
// Not supported by the UNO Accessibility API
}
/** Sets the summary description of the table */
public void setAccessibleSummary(javax.accessibility.Accessible accessible) {
// Not supported by the UNO Accessibility API
}
/** Returns the column number of an index in the table */
public int getAccessibleColumn(int index) {
try {
return unoAccessibleTable.getAccessibleColumn(index);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the index of a specified row and column in the table. */
public int getAccessibleIndex(int r, int c) {
try {
return unoAccessibleTable.getAccessibleIndex(r,c);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the row number of an index in the table */
public int getAccessibleRow(int index) {
try {
return unoAccessibleTable.getAccessibleRow(index);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return -1;
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
}
class TreeItem extends java.awt.Component implements javax.accessibility.Accessible {
protected XAccessible unoAccessible;
public TreeItem(XAccessible xAccessible) {
unoAccessible = xAccessible;
}
public Object[] create(Object[] targetSet) {
try {
java.util.ArrayList<TreeItem> list = new java.util.ArrayList<TreeItem>(targetSet.length);
for (int i=0; i < targetSet.length; i++) {
XAccessible xAccessible = UnoRuntime.queryInterface(
XAccessible.class, targetSet[i]);
if (xAccessible != null) {
list.add(new TreeItem(xAccessible));
}
}
list.trimToSize();
return list.toArray();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
try {
XAccessibleContext xAccessibleContext = unoAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
javax.accessibility.AccessibleContext ac = new AccessibleTreeItem(xAccessibleContext);
ac.setAccessibleParent(Tree.this);
accessibleContext = ac;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
return accessibleContext;
}
protected class AccessibleTreeItem extends javax.accessibility.AccessibleContext
implements javax.accessibility.AccessibleSelection {
XAccessibleContext unoAccessibleContext;
XAccessibleSelection unoAccessibleSelection;
public AccessibleTreeItem(XAccessibleContext xAccessibleContext) {
unoAccessibleContext = xAccessibleContext;
unoAccessibleSelection = UnoRuntime.queryInterface(XAccessibleSelection.class, xAccessibleContext);
}
/** Returns the accessible name of this object */
public String getAccessibleName() {
try {
return unoAccessibleContext.getAccessibleName();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleName(String name) {
// Not supported
}
/** Returns the accessible name of this object */
public String getAccessibleDescription() {
try {
return unoAccessibleContext.getAccessibleDescription();
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Sets the accessible name of this object */
public void setAccessibleDescription(String name) {
// Not supported
}
/** Returns the accessible role of this object */
public javax.accessibility.AccessibleRole getAccessibleRole() {
try {
javax.accessibility.AccessibleRole role = AccessibleRoleAdapter.getAccessibleRole(
unoAccessibleContext.getAccessibleRole());
return (role != null) ? role : javax.accessibility.AccessibleRole.LABEL;
} catch(com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the locale of the component */
public java.util.Locale getLocale() throws java.awt.IllegalComponentStateException {
try {
com.sun.star.lang.Locale unoLocale = unoAccessibleContext.getLocale();
return new java.util.Locale(unoLocale.Language, unoLocale.Country);
} catch (IllegalAccessibleComponentStateException e) {
throw new java.awt.IllegalComponentStateException(e.getMessage());
} catch (com.sun.star.uno.RuntimeException e) {
return Tree.this.getLocale();
}
}
/** Gets the 0-based index of this object in its accessible parent */
public int getAccessibleIndexInParent() {
try {
return unoAccessibleContext.getAccessibleIndexInParent();
} catch (com.sun.star.uno.RuntimeException e) {
return -1;
}
}
/** Returns the number of accessible children of the object. */
public int getAccessibleChildrenCount() {
try {
return unoAccessibleContext.getAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Returns the specified Accessible child of the object. */
public javax.accessibility.Accessible getAccessibleChild(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
// Re-use the active descandant wrapper if possible
javax.accessibility.Accessible activeDescendant = Tree.this.activeDescendant;
if ((activeDescendant instanceof TreeItem) && ((TreeItem) activeDescendant).unoAccessible.equals(xAccessible)) {
child = activeDescendant;
} else if (xAccessible != null) {
child = new TreeItem(xAccessible);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Returns the state set of this object */
public javax.accessibility.AccessibleStateSet getAccessibleStateSet() {
try {
return AccessibleStateAdapter.getAccessibleStateSet(TreeItem.this,
unoAccessibleContext.getAccessibleStateSet());
} catch (com.sun.star.uno.RuntimeException e) {
return AccessibleStateAdapter.getDefunctStateSet();
}
}
/** Gets the AccessibleComponent associated with this object that has a graphical representation */
public javax.accessibility.AccessibleComponent getAccessibleComponent() {
try {
XAccessibleComponent unoAccessibleComponent = UnoRuntime.queryInterface(XAccessibleComponent.class, unoAccessibleContext);
return (unoAccessibleComponent != null) ?
new AccessibleComponentImpl(unoAccessibleComponent) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Returns the AccessibleSelection interface for this object */
public javax.accessibility.AccessibleSelection getAccessibleSelection() {
return (unoAccessibleSelection != null) ? this : null;
}
/** Gets the AccessibleAction associated with this object that has a graphical representation */
public javax.accessibility.AccessibleAction getAccessibleAction() {
try {
XAccessibleAction unoAccessibleAction = UnoRuntime.queryInterface(XAccessibleAction.class, unoAccessibleContext);
return (unoAccessibleAction != null) ?
new AccessibleActionImpl(unoAccessibleAction) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object that has a graphical representation */
public javax.accessibility.AccessibleText getAccessibleText() {
if (disposed)
return null;
try {
XAccessibleText unoAccessibleText = UnoRuntime.queryInterface(XAccessibleText.class, unoAccessibleContext);
return (unoAccessibleText != null) ?
new AccessibleTextImpl(unoAccessibleText) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleValue associated with this object that has a graphical representation */
public javax.accessibility.AccessibleValue getAccessibleValue() {
try {
XAccessibleValue unoAccessibleValue = UnoRuntime.queryInterface(XAccessibleValue.class, unoAccessibleContext);
return (unoAccessibleValue != null) ?
new AccessibleValueImpl(unoAccessibleValue) : null;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the AccessibleText associated with this object presenting text on the display */
public javax.accessibility.AccessibleIcon[] getAccessibleIcon() {
try {
XAccessibleImage unoAccessibleImage = UnoRuntime.queryInterface(XAccessibleImage.class, unoAccessibleContext);
if (unoAccessibleImage != null) {
javax.accessibility.AccessibleIcon[] icons = { new AccessibleIconImpl(unoAccessibleImage) };
return icons;
}
} catch (com.sun.star.uno.RuntimeException e) {
}
return null;
}
/*
* AccessibleSelection
*/
/** Returns an Accessible representing the specified selected child of the object */
public javax.accessibility.Accessible getAccessibleSelection(int i) {
javax.accessibility.Accessible child = null;
try {
XAccessible xAccessible = unoAccessibleContext.getAccessibleChild(i);
if (xAccessible != null) {
child = new TreeItem(xAccessible);
}
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
return child;
}
/** Adds the specified Accessible child of the object to the object's selection */
public void addAccessibleSelection(int i) {
try {
unoAccessibleSelection.selectAccessibleChild(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Clears the selection in the object, so that no children in the object are selected */
public void clearAccessibleSelection() {
try {
unoAccessibleSelection.clearAccessibleSelection();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Returns the number of Accessible children currently selected */
public int getAccessibleSelectionCount() {
try {
return unoAccessibleSelection.getSelectedAccessibleChildCount();
} catch (com.sun.star.uno.RuntimeException e) {
return 0;
}
}
/** Determines if the current child of this object is selected */
public boolean isAccessibleChildSelected(int i) {
try {
return unoAccessibleSelection.isAccessibleChildSelected(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
return false;
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Removes the specified child of the object from the object's selection */
public void removeAccessibleSelection(int i) {
try {
unoAccessibleSelection.deselectAccessibleChild(i);
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
} catch (com.sun.star.uno.RuntimeException e) {
}
}
/** Causes every child of the object to be selected if the object supports multiple selection */
public void selectAllAccessibleSelection() {
try {
unoAccessibleSelection.selectAllAccessibleChildren();
} catch (com.sun.star.uno.RuntimeException e) {
}
}
}
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/Window.java b/accessibility/bridge/org/openoffice/java/accessibility/Window.java
deleted file mode 100644
index 137818e..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/Window.java
+++ /dev/null
@@ -1,564 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility;
import com.sun.star.uno.*;
import com.sun.star.accessibility.*;
public class Window extends java.awt.Window implements javax.accessibility.Accessible, NativeFrame {
protected XAccessibleComponent unoAccessibleComponent;
boolean opened = false;
boolean visible = false;
java.awt.EventQueue eventQueue = null;
public Window(java.awt.Window owner, XAccessibleComponent xAccessibleComponent) {
super(owner);
initialize(xAccessibleComponent);
}
private void initialize(XAccessibleComponent xAccessibleComponent) {
unoAccessibleComponent = xAccessibleComponent;
eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class,
unoAccessibleComponent);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(new AccessibleWindowListener());
}
}
java.awt.Component initialComponent = null;
public java.awt.Component getInitialComponent() {
if (Build.DEBUG) {
System.err.println("returning initial component object of class: " + initialComponent.getClass().getName());
}
return initialComponent;
}
public void setInitialComponent(java.awt.Component c) {
initialComponent = c;
}
public Integer getHWND() {
return null;
}
/**
* Determines whether this <code>Component</code> is showing on screen.
* This means that the component must be visible, and it must be in a
* <code>container</code> that is visible and showing.
* @see #addNotify
* @see #removeNotify
* @since JDK1.0
*/
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
/**
* Makes this <code>Component</code> displayable by connecting it to a
* native screen resource.
* This method is called internally by the toolkit and should
* not be called directly by programs.
* @see #isDisplayable
* @see #removeNotify
* @since JDK1.0
*/
public void addNotify() {
// createHierarchyEvents(0, null, null, 0, false);
}
/**
* Makes this <code>Component</code> undisplayable by destroying it native
* screen resource.
* This method is called by the toolkit internally and should
* not be called directly by programs.
* @see #isDisplayable
* @see #addNotify
* @since JDK1.0
*/
public void removeNotify() {
}
/**
* Determines if the object is visible. Note: this means that the
* object intends to be visible; however, it may not in fact be
* showing on the screen because one of the objects that this object
* is contained by is not visible. To determine if an object is
* showing on the screen, use <code>isShowing</code>.
*
* @return true if object is visible; otherwise, false
*/
public boolean isVisible(){
return visible;
}
/**
* Shows or hides this component depending on the value of parameter
* <code>b</code>.
* @param b if <code>true</code>, shows this component;
* otherwise, hides this component
* @see #isVisible
* @since JDK1.1
*/
public void setVisible(boolean b) {
if (visible != b){
visible = b;
if (b) {
// If it is the first show, fire WINDOW_OPENED event
if (!opened) {
postWindowEvent(java.awt.event.WindowEvent.WINDOW_OPENED);
opened = true;
}
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_SHOWN);
} else {
postComponentEvent(java.awt.event.ComponentEvent.COMPONENT_HIDDEN);
}
}
}
public void dispose() {
setVisible(false);
postWindowEvent(java.awt.event.WindowEvent.WINDOW_CLOSED);
// Transfer window focus back to the owner window if it is still the active frame
if ((getOwner() instanceof Frame && ((Frame) getOwner()).active) ||
(getOwner() instanceof Dialog && ((Dialog) getOwner()).active)) {
eventQueue.postEvent(new java.awt.event.WindowEvent(getOwner(),
java.awt.event.WindowEvent.WINDOW_GAINED_FOCUS));
}
}
protected void postWindowEvent(int i) {
eventQueue.postEvent(new java.awt.event.WindowEvent(this, i));
}
protected void postComponentEvent(int i) {
eventQueue.postEvent(new java.awt.event.ComponentEvent(this, i));
}
/**
* Update the proxy objects appropriatly on property change events
*/
protected class AccessibleWindowListener implements XAccessibleEventListener {
protected AccessibleWindowListener() {
}
// The only expected state changes are ACTIVE and VISIBLE
protected void setComponentState(short state, boolean enable) {
switch (state) {
case AccessibleStateType.ICONIFIED:
postWindowEvent(enable ?
java.awt.event.WindowEvent.WINDOW_ICONIFIED :
java.awt.event.WindowEvent.WINDOW_DEICONIFIED);
break;
case AccessibleStateType.SHOWING:
case AccessibleStateType.VISIBLE:
setVisible(enable);
break;
default:
if (Build.DEBUG) {
// System.err.println("[frame]: " + getTitle() + "unexpected state change " + state);
}
break;
}
}
/** Updates the accessible name and fires the appropriate PropertyChangedEvent */
protected void handleNameChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac!= null) {
ac.setAccessibleName(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the accessible description and fires the appropriate PropertyChangedEvent */
protected void handleDescriptionChangedEvent(Object any) {
try {
// This causes the property change event to be fired in the VCL thread
// context. If this causes problems, it has to be deligated to the java
// dispatch thread ..
if (accessibleContext != null) {
accessibleContext.setAccessibleDescription(AnyConverter.toString(any));
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Updates the internal states and fires the appropriate PropertyChangedEvent */
protected void handleStateChangedEvent(Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
setComponentState(AnyConverter.toShort(any1), false);
}
if (AnyConverter.isShort(any2)) {
setComponentState(AnyConverter.toShort(any2), true);
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
/** Fires a visible data property change event */
protected void handleVisibleDataEvent() {
javax.accessibility.AccessibleContext ac = accessibleContext;
if (ac != null) {
ac.firePropertyChange(javax.accessibility.AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, null, null);
}
}
/** Called by OpenOffice process to notify property changes */
public void notifyEvent(AccessibleEventObject event) {
switch (event.EventId) {
case AccessibleEventId.NAME_CHANGED:
// Set the accessible name for the corresponding context, which will fire a property
// change event itself
handleNameChangedEvent(event.NewValue);
break;
case AccessibleEventId.DESCRIPTION_CHANGED:
// Set the accessible description for the corresponding context, which will fire a property
// change event itself - so do not set propertyName !
handleDescriptionChangedEvent(event.NewValue);
break;
case AccessibleEventId.STATE_CHANGED:
// Update the internal state set and fire the appropriate PropertyChangedEvent
handleStateChangedEvent(event.OldValue, event.NewValue);
break;
case AccessibleEventId.CHILD:
if (AnyConverter.isObject(event.OldValue)) {
AccessibleObjectFactory.removeChild(Window.this, event.OldValue);
} else if (AnyConverter.isObject(event.NewValue)) {
AccessibleObjectFactory.addChild(Window.this, event.NewValue);
}
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
case AccessibleEventId.BOUNDRECT_CHANGED:
handleVisibleDataEvent();
break;
default:
// Warn about unhandled events
if(Build.DEBUG) {
System.out.println(this + ": unhandled accessibility event id=" + event.EventId);
}
}
}
/** Called by OpenOffice process to notify that the UNO component is disposing */
public void disposing(com.sun.star.lang.EventObject eventObject) {
}
}
protected javax.accessibility.AccessibleContext accessibleContext = null;
/** Returns the AccessibleContext associated with this object */
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleWindow();
// accessibleContext.setAccessibleName(getTitle());
}
return accessibleContext;
}
protected class AccessibleWindow extends java.awt.Window.AccessibleAWTWindow {
protected AccessibleWindow() {
super();
}
protected java.awt.event.ComponentListener accessibleComponentHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when shown/hidden..
*/
protected class AccessibleComponentHandler implements java.awt.event.ComponentListener {
public void componentHidden(java.awt.event.ComponentEvent e) {
AccessibleWindow.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
javax.accessibility.AccessibleState.VISIBLE, null);
}
public void componentShown(java.awt.event.ComponentEvent e) {
AccessibleWindow.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
null, javax.accessibility.AccessibleState.VISIBLE);
}
public void componentMoved(java.awt.event.ComponentEvent e) {
}
public void componentResized(java.awt.event.ComponentEvent e) {
}
} // inner class AccessibleComponentHandler
protected java.awt.event.ContainerListener accessibleContainerHandler = null;
/**
* Fire PropertyChange listener, if one is registered,
* when children added/removed.
*/
protected class AccessibleContainerHandler implements java.awt.event.ContainerListener {
public void componentAdded(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleWindow.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
null, ((javax.accessibility.Accessible) c).getAccessibleContext());
}
}
public void componentRemoved(java.awt.event.ContainerEvent e) {
java.awt.Component c = e.getChild();
if (c != null && c instanceof javax.accessibility.Accessible) {
AccessibleWindow.this.firePropertyChange(
javax.accessibility.AccessibleContext.ACCESSIBLE_CHILD_PROPERTY,
((javax.accessibility.Accessible) c).getAccessibleContext(), null);
}
}
}
protected int propertyChangeListenerCount = 0;
/**
* Add a PropertyChangeListener to the listener list.
*
* @param listener The PropertyChangeListener to be added
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (propertyChangeListenerCount++ == 0) {
accessibleContainerHandler = new AccessibleContainerHandler();
Window.this.addContainerListener(accessibleContainerHandler);
accessibleComponentHandler = new AccessibleComponentHandler();
Window.this.addComponentListener(accessibleComponentHandler);
}
super.addPropertyChangeListener(listener);
}
/**
* Remove a PropertyChangeListener from the listener list.
* This removes a PropertyChangeListener that was registered
* for all properties.
*
* @param listener The PropertyChangeListener to be removed
*/
public void removePropertyChangeListener(java.beans.PropertyChangeListener listener) {
if (--propertyChangeListenerCount == 0) {
Window.this.removeComponentListener(accessibleComponentHandler);
accessibleComponentHandler = null;
Window.this.removeContainerListener(accessibleContainerHandler);
accessibleContainerHandler = null;
}
super.removePropertyChangeListener(listener);
}
/*
* AccessibleComponent
*/
/** Returns the background color of the object */
public java.awt.Color getBackground() {
try {
return new java.awt.Color(unoAccessibleComponent.getBackground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setBackground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
/** Returns the foreground color of the object */
public java.awt.Color getForeground() {
try {
return new java.awt.Color(unoAccessibleComponent.getForeground());
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public void setForeground(java.awt.Color c) {
// Not supported by UNO accessibility API
}
public java.awt.Cursor getCursor() {
// Not supported by UNO accessibility API
return null;
}
public void setCursor(java.awt.Cursor cursor) {
// Not supported by UNO accessibility API
}
public java.awt.Font getFont() {
// FIXME
return null;
}
public void setFont(java.awt.Font f) {
// Not supported by UNO accessibility API
}
public java.awt.FontMetrics getFontMetrics(java.awt.Font f) {
// FIXME
return null;
}
public boolean isEnabled() {
return Window.this.isEnabled();
}
public void setEnabled(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isVisible() {
return Window.this.isVisible();
}
public void setVisible(boolean b) {
// Not supported by UNO accessibility API
}
public boolean isShowing() {
return Window.this.isShowing();
}
public boolean contains(java.awt.Point p) {
try {
return unoAccessibleComponent.containsPoint(new com.sun.star.awt.Point(p.x, p.y));
} catch (com.sun.star.uno.RuntimeException e) {
return false;
}
}
/** Returns the location of the object on the screen. */
public java.awt.Point getLocationOnScreen() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
return new java.awt.Point(unoPoint.X, unoPoint.Y);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Gets the location of this component in the form of a point specifying the component's top-left corner */
public java.awt.Point getLocation() {
try {
com.sun.star.awt.Point unoPoint = unoAccessibleComponent.getLocationOnScreen();
return new java.awt.Point( unoPoint.X, unoPoint.Y );
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves this component to a new location */
public void setLocation(java.awt.Point p) {
// Not supported by UNO accessibility API
}
/** Gets the bounds of this component in the form of a Rectangle object */
public java.awt.Rectangle getBounds() {
try {
com.sun.star.awt.Rectangle unoRect = unoAccessibleComponent.getBounds();
return new java.awt.Rectangle(unoRect.X, unoRect.Y, unoRect.Width, unoRect.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Moves and resizes this component to conform to the new bounding rectangle r */
public void setBounds(java.awt.Rectangle r) {
// Not supported by UNO accessibility API
}
/** Returns the size of this component in the form of a Dimension object */
public java.awt.Dimension getSize() {
try {
com.sun.star.awt.Size unoSize = unoAccessibleComponent.getSize();
return new java.awt.Dimension(unoSize.Width, unoSize.Height);
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
/** Resizes this component so that it has width d.width and height d.height */
public void setSize(java.awt.Dimension d) {
// Not supported by UNO accessibility API
}
/** Returns the Accessible child, if one exists, contained at the local coordinate Point */
public javax.accessibility.Accessible getAccessibleAt(java.awt.Point p) {
try {
java.awt.Component c = AccessibleObjectFactory.getAccessibleComponent(
unoAccessibleComponent.getAccessibleAtPoint(new com.sun.star.awt.Point(p.x, p.y)));
return (javax.accessibility.Accessible) c;
} catch (com.sun.star.uno.RuntimeException e) {
return null;
}
}
public boolean isFocusTraversable() {
return Window.this.isFocusable();
}
public void requestFocus() {
unoAccessibleComponent.grabFocus();
}
}
/**
* Determines whether this component is displayable. A component is
* displayable when it is connected to a native screen resource.
* <p>
* A component is made displayable either when it is added to
* a displayable containment hierarchy or when its containment
* hierarchy is made displayable.
* A containment hierarchy is made displayable when its ancestor
* window is either packed or made visible.
* <p>
* A component is made undisplayable either when it is removed from
* a displayable containment hierarchy or when its containment hierarchy
* is made undisplayable. A containment hierarchy is made
* undisplayable when its ancestor window is disposed.
*
* @return <code>true</code> if the component is displayable
*/
@Override
public boolean isDisplayable() {
return true;
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java
deleted file mode 100644
index b0d1d7e..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java
+++ /dev/null
@@ -1,178 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility.logging;
import java.awt.Component;
import com.sun.star.accessibility.*;
import com.sun.star.uno.*;
/**
*
*/
public class XAccessibleEventLog implements XAccessibleEventListener {
private static XAccessibleEventLog theEventListener = null;
private static java.util.Hashtable<String, Component> proxyList = new java.util.Hashtable<String, Component>();
/** Creates a new instance of UNOAccessibleEventListener */
public XAccessibleEventLog() {
}
private static XAccessibleEventListener get() {
if (theEventListener == null) {
theEventListener = new XAccessibleEventLog();
}
return theEventListener;
}
public static void addEventListener(XAccessibleContext xac, java.awt.Component c) {
XAccessibleEventBroadcaster broadcaster = UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class, xac);
if (broadcaster != null) {
broadcaster.addAccessibleEventListener(XAccessibleEventLog.get());
// remember the proxy objects
synchronized (proxyList) {
// proxyList.put(UnoRuntime.generateOid(xac), new WeakReference(c));
proxyList.put(UnoRuntime.generateOid(xac), c);
}
}
}
public void disposing(com.sun.star.lang.EventObject eventObject) {
}
public void notifyEvent(com.sun.star.accessibility.AccessibleEventObject accessibleEventObject) {
switch (accessibleEventObject.EventId) {
case AccessibleEventId.ACTIVE_DESCENDANT_CHANGED:
logMessage(accessibleEventObject.Source, "Retrieved active descendant event.");
break;
case AccessibleEventId.STATE_CHANGED:
logStateChange(accessibleEventObject.Source,
accessibleEventObject.OldValue,
accessibleEventObject.NewValue);
break;
case AccessibleEventId.CHILD:
logMessage(accessibleEventObject.Source, "Retrieved children event.");
break;
case AccessibleEventId.BOUNDRECT_CHANGED:
logMessage(accessibleEventObject.Source, "Retrieved boundrect changed event.");
break;
case AccessibleEventId.VISIBLE_DATA_CHANGED:
logMessage(accessibleEventObject.Source, "Retrieved visible data changed event.");
break;
case AccessibleEventId.INVALIDATE_ALL_CHILDREN:
logMessage(accessibleEventObject.Source, "Retrieved invalidate children event.");
break;
default:
break;
}
}
public void logStateChange(Object o, Object any1, Object any2) {
try {
if (AnyConverter.isShort(any1)) {
logStateChange(o, AnyConverter.toShort(any1), " is no longer ");
}
if (AnyConverter.isShort(any2)) {
logStateChange(o, AnyConverter.toShort(any2), " is now ");
}
} catch (com.sun.star.lang.IllegalArgumentException e) {
}
}
public void logStateChange(Object o, short n, String s) {
switch(n) {
case AccessibleStateType.ACTIVE:
logMessage(o, s + javax.accessibility.AccessibleState.ACTIVE);
break;
case AccessibleStateType.ARMED:
logMessage(o, s + javax.accessibility.AccessibleState.ARMED);
break;
case AccessibleStateType.CHECKED:
logMessage(o, s + javax.accessibility.AccessibleState.CHECKED);
break;
case AccessibleStateType.ENABLED:
logMessage(o, s + javax.accessibility.AccessibleState.ENABLED);
break;
case AccessibleStateType.FOCUSED:
logMessage(o, s + javax.accessibility.AccessibleState.FOCUSED);
break;
case AccessibleStateType.PRESSED:
logMessage(o, s + javax.accessibility.AccessibleState.PRESSED);
break;
case AccessibleStateType.SELECTED:
logMessage(o, s + javax.accessibility.AccessibleState.SELECTED);
break;
case AccessibleStateType.SENSITIVE:
logMessage(o, s + "sensitive");
break;
case AccessibleStateType.SHOWING:
logMessage(o, s + javax.accessibility.AccessibleState.SHOWING);
break;
case AccessibleStateType.VISIBLE:
logMessage(o, s + javax.accessibility.AccessibleState.VISIBLE);
break;
default:
logMessage(o, s + "??? (FIXME)");
break;
}
}
protected static void logMessage(Object o, String s) {
XAccessibleContext xac = UnoRuntime.queryInterface(XAccessibleContext.class, o);
if( xac != null ) {
String oid = UnoRuntime.generateOid(xac);
synchronized (proxyList) {
logMessage( (javax.accessibility.Accessible) proxyList.get( oid ), s );
// WeakReference r = (WeakReference) proxyList.get( oid );
// if(r != null) {
// System.err.println( "*** Warning *** event is " + r.get() );
// logMessage( (javax.accessibility.Accessible) r.get(), s );
// } else {
// System.err.println( "*** Warning *** event source not found in broadcaster list" );
// }
}
} else
System.err.println( "*** Warning *** event source does not implement XAccessibleContext" );
}
protected static void logMessage(javax.accessibility.Accessible a, String s) {
if (a != null) {
logMessage(a.getAccessibleContext(), s);
} else {
logMessage(s);
}
}
protected static void logMessage(javax.accessibility.AccessibleContext ac, String s) {
if (ac != null) {
logMessage("[" + ac.getAccessibleRole() + "] "
+ ac.getAccessibleName() + ": " + s);
} else {
logMessage(s);
}
}
protected static void logMessage(String s) {
System.err.println(s);
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleHypertextLog.java b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleHypertextLog.java
deleted file mode 100644
index 88764d6..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleHypertextLog.java
+++ /dev/null
@@ -1,51 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility.logging;
import com.sun.star.accessibility.*;
/** The AccessibleHypertextImpl mapps all calls to the java AccessibleHypertext
* interface to the corresponding methods of the UNO XAccessibleHypertext
* interface.
*/
public class XAccessibleHypertextLog extends XAccessibleTextLog
implements com.sun.star.accessibility.XAccessibleHypertext {
private com.sun.star.accessibility.XAccessibleHypertext unoObject;
/** Creates a new instance of XAccessibleTextLog */
public XAccessibleHypertextLog(XAccessibleHypertext xAccessibleHypertext) {
super(xAccessibleHypertext);
unoObject = xAccessibleHypertext;
}
public XAccessibleHyperlink getHyperLink(int param)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.getHyperLink(param);
}
public int getHyperLinkCount() {
return unoObject.getHyperLinkCount();
}
public int getHyperLinkIndex(int param)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.getHyperLinkIndex(param);
}
}
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleTextLog.java b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleTextLog.java
deleted file mode 100644
index 7b3527b..0000000
--- a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleTextLog.java
+++ /dev/null
@@ -1,261 +0,0 @@
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
package org.openoffice.java.accessibility.logging;
import org.openoffice.java.accessibility.*;
/**
*
*/
public class XAccessibleTextLog
implements com.sun.star.accessibility.XAccessibleText {
private com.sun.star.accessibility.XAccessibleText unoObject;
private String name = "[Unknown] NoName";
/** Creates a new instance of XAccessibleTextLog */
public XAccessibleTextLog(
com.sun.star.accessibility.XAccessibleText xAccessibleText) {
unoObject = xAccessibleText;
setName(xAccessibleText);
}
private void setName(
com.sun.star.accessibility.XAccessibleText xAccessibleText) {
try {
com.sun.star.accessibility.XAccessibleContext unoAccessibleContext = com.sun.star.uno.UnoRuntime.queryInterface(com.sun.star.accessibility.XAccessibleContext.class,
xAccessibleText);
if (unoAccessibleContext != null) {
name = "[" +
AccessibleRoleAdapter.getAccessibleRole(unoAccessibleContext.getAccessibleRole()) +
"] " + unoAccessibleContext.getAccessibleName() + ": ";
}
} catch (com.sun.star.uno.RuntimeException e) {
}
}
private String getPartString(short s) {
String part = "INVALID";
switch (s) {
case com.sun.star.accessibility.AccessibleTextType.CHARACTER:
part = "CHARACTER";
break;
case com.sun.star.accessibility.AccessibleTextType.WORD:
part = "WORD";
break;
case com.sun.star.accessibility.AccessibleTextType.SENTENCE:
part = "SENTENCE";
break;
case com.sun.star.accessibility.AccessibleTextType.LINE:
part = "LINE";
break;
case com.sun.star.accessibility.AccessibleTextType.ATTRIBUTE_RUN:
part = "ATTRIBUTE_RUN";
break;
default:
break;
}
return part;
}
private String dumpTextSegment(com.sun.star.accessibility.TextSegment ts) {
if (ts != null) {
return "(" + ts.SegmentStart + "," + ts.SegmentEnd + "," +
ts.SegmentText + ")";
}
return "NULL";
}
public boolean copyText(int param, int param1)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.copyText(param, param1);
}
public int getCaretPosition() {
int pos = unoObject.getCaretPosition();
System.err.println(name + "getCaretPosition() returns " + pos);
return pos;
}
public char getCharacter(int param)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.getCharacter(param);
}
public com.sun.star.beans.PropertyValue[] getCharacterAttributes(
int param, String[] str)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.getCharacterAttributes(param, str);
}
public com.sun.star.awt.Rectangle getCharacterBounds(int param)
throws com.sun.star.lang.IndexOutOfBoundsException {
try {
com.sun.star.awt.Rectangle r = unoObject.getCharacterBounds(param);
System.err.println(name + "getCharacterBounds(" + param +
") returns (" + r.X + "," + r.Y + "," + r.Width + "," +
r.Height + ")");
return r;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
System.err.println("IndexOutOufBoundsException caught for " + name +
"getCharacterBounds(" + param + ")");
throw e;
}
}
public int getCharacterCount() {
return unoObject.getCharacterCount();
}
public int getIndexAtPoint(com.sun.star.awt.Point point) {
try {
int index = unoObject.getIndexAtPoint(point);
System.err.println(name + "getIndexAtPoint(" + point.X + ", " +
point.Y + ") returns " + index);
return index;
} catch (com.sun.star.uno.RuntimeException e) {
System.err.println(name +
"RuntimeException caught for getIndexAtPoint(" + point.X +
", " + point.Y + ")");
System.err.println(e.getMessage());
throw e;
}
}
public String getSelectedText() {
return unoObject.getSelectedText();
}
public int getSelectionEnd() {
return unoObject.getSelectionEnd();
}
public int getSelectionStart() {
return unoObject.getSelectionStart();
}
public String getText() {
return unoObject.getText();
}
public com.sun.star.accessibility.TextSegment getTextAtIndex(int param,
short param1)
throws com.sun.star.lang.IndexOutOfBoundsException,
com.sun.star.lang.IllegalArgumentException {
try {
com.sun.star.accessibility.TextSegment ts = unoObject.getTextAtIndex(param,
param1);
System.err.println(name + "getTextAtIndex(" +
getPartString(param1) + "," + param + ") returns " +
dumpTextSegment(ts));
return ts;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
System.err.println("IndexOutOufBoundsException caught for " + name +
" getTextAtIndex(" + getPartString(param1) + "," + param1 +
")");
throw e;
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println("IllegalArgumentException caught for " + name +
" getTextAtIndex(" + getPartString(param1) + "," + param + ")");
throw e;
}
}
public com.sun.star.accessibility.TextSegment getTextBeforeIndex(
int param, short param1)
throws com.sun.star.lang.IndexOutOfBoundsException,
com.sun.star.lang.IllegalArgumentException {
try {
com.sun.star.accessibility.TextSegment ts = unoObject.getTextBeforeIndex(param,
param1);
System.err.println(name + " getTextBeforeIndex(" +
getPartString(param1) + "," + param + ") returns " +
dumpTextSegment(ts));
return ts;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
System.err.println("IndexOutOufBoundsException caught for " + name +
" getTextBeforeIndex(" + getPartString(param1) + "," + param1 +
")");
throw e;
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println("IllegalArgumentException caught for " + name +
" getTextBeforeIndex(" + getPartString(param1) + "," + param +
")");
throw e;
}
}
public com.sun.star.accessibility.TextSegment getTextBehindIndex(
int param, short param1)
throws com.sun.star.lang.IndexOutOfBoundsException,
com.sun.star.lang.IllegalArgumentException {
try {
com.sun.star.accessibility.TextSegment ts = unoObject.getTextBehindIndex(param,
param1);
System.err.println(name + " getTextBehindIndex(" +
getPartString(param1) + "," + param + ") returns " +
dumpTextSegment(ts));
return ts;
} catch (com.sun.star.lang.IndexOutOfBoundsException e) {
System.err.println("IndexOutOufBoundsException caught for " + name +
" getTextBehindIndex(" + getPartString(param1) + "," + param1 +
")");
throw e;
} catch (com.sun.star.lang.IllegalArgumentException e) {
System.err.println("IllegalArgumentException caught for " + name +
" getTextBehindIndex(" + getPartString(param1) + "," + param +
")");
throw e;
}
}
public String getTextRange(int param, int param1)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.getTextRange(param, param1);
}
public boolean setCaretPosition(int param)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.setCaretPosition(param);
}
public boolean setSelection(int param, int param1)
throws com.sun.star.lang.IndexOutOfBoundsException {
return unoObject.setSelection(param, param1);
}
}
diff --git a/accessibility/bridge/source/java/WindowsAccessBridgeAdapter.cxx b/accessibility/bridge/source/java/WindowsAccessBridgeAdapter.cxx
deleted file mode 100644
index e99d51c2..0000000
--- a/accessibility/bridge/source/java/WindowsAccessBridgeAdapter.cxx
+++ /dev/null
@@ -1,300 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
#ifdef WNT
#include <prewin.h>
#include <postwin.h>
#endif
#include <WindowsAccessBridgeAdapter.h>
#include <wtypes.h>
#include <rtl/process.h>
#include <tools/link.hxx>
#include <vcl/svapp.hxx>
#include <vcl/window.hxx>
#include <vcl/sysdata.hxx>
#include <uno/current_context.hxx>
#include <uno/environment.h>
#include <uno/mapping.hxx>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>
#include "jvmaccess/unovirtualmachine.hxx"
#include "jvmaccess/virtualmachine.hxx"
#include <osl/diagnose.h>
using ::com::sun::star::uno::Mapping;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::RuntimeException;
using namespace ::com::sun::star::accessibility;
long VCLEventListenerLinkFunc(void * pInst, void * pData);
//------------------------------------------------------------------------
// global vatiables
//------------------------------------------------------------------------
Link g_aEventListenerLink(NULL, VCLEventListenerLinkFunc);
rtl::Reference< jvmaccess::UnoVirtualMachine > g_xUnoVirtualMachine;
typelib_InterfaceTypeDescription * g_pTypeDescription = NULL;
Mapping g_unoMapping;
jclass g_jcWindowsAccessBridgeAdapter = NULL;
jmethodID g_jmRegisterTopWindow = 0;
jmethodID g_jmRevokeTopWindow = 0;
//------------------------------------------------------------------------
// functions
//------------------------------------------------------------------------
SAL_DLLPUBLIC_EXPORT jint JNICALL JNI_OnLoad(JavaVM *, void *)
{
return JNI_VERSION_1_2;
}
SAL_DLLPUBLIC_EXPORT jbyteArray JNICALL
Java_org_openoffice_accessibility_WindowsAccessBridgeAdapter_getProcessID(JNIEnv *pJNIEnv, jclass clazz)
{
// Initialize global class and method references
g_jcWindowsAccessBridgeAdapter =
static_cast< jclass > (pJNIEnv->NewGlobalRef(clazz));
if (NULL == g_jcWindowsAccessBridgeAdapter) {
return 0; /* jni error occurred */
}
g_jmRegisterTopWindow =
pJNIEnv->GetStaticMethodID(clazz, "registerTopWindow", "(ILcom/sun/star/accessibility/XAccessible;)V");
if (0 == g_jmRegisterTopWindow) {
return 0; /* jni error occurred */
}
g_jmRevokeTopWindow =
pJNIEnv->GetStaticMethodID(clazz, "revokeTopWindow", "(ILcom/sun/star/accessibility/XAccessible;)V");
if (0 == g_jmRevokeTopWindow) {
return 0; /* jni error occurred */
}
// Use the special protocol of XJavaVM.getJavaVM: If the passed in
// process ID has an extra 17th byte of value one, the returned any
// contains a pointer to a jvmaccess::UnoVirtualMachine, instead of
// the underlying JavaVM pointer:
jbyte processID[17];
rtl_getGlobalProcessId(reinterpret_cast<sal_uInt8 *> (processID));
// #i51265# we need a jvmaccess::UnoVirtualMachine pointer for the
// uno_getEnvironment() call later.
processID[16] = 1;
// Copy the result into a java byte[] and return.
jbyteArray jbaProcessID = pJNIEnv->NewByteArray(17);
pJNIEnv->SetByteArrayRegion(jbaProcessID, 0, 17, processID);
return jbaProcessID;
}
SAL_DLLPUBLIC_EXPORT jboolean JNICALL
Java_org_openoffice_accessibility_WindowsAccessBridgeAdapter_createMapping(JNIEnv *, jclass, jlong pointer)
{
uno_Environment * pJava_environment = NULL;
uno_Environment * pUno_environment = NULL;
try {
// We get a non-refcounted pointer to a jvmaccess::VirtualMachine
// from the XJavaVM service (the pointer is guaranteed to be valid
// as long as our reference to the XJavaVM service lasts), and
// convert the non-refcounted pointer into a refcounted one
// immediately:
g_xUnoVirtualMachine = reinterpret_cast< jvmaccess::UnoVirtualMachine * >(pointer);
if ( g_xUnoVirtualMachine.is() )
{
OUString sJava("java");
uno_getEnvironment(&pJava_environment, sJava.pData, g_xUnoVirtualMachine.get());
OUString sCppu_current_lb_name(CPPU_CURRENT_LANGUAGE_BINDING_NAME);
uno_getEnvironment(&pUno_environment, sCppu_current_lb_name.pData, NULL);
if ( pJava_environment && pUno_environment )
{
g_unoMapping = Mapping(pUno_environment, pJava_environment);
getCppuType((::com::sun::star::uno::Reference< XAccessible > *) 0).getDescription((typelib_TypeDescription **) & g_pTypeDescription);
}
if ( pJava_environment )
{
// release java environment
pJava_environment->release(pJava_environment);
pJava_environment = NULL;
}
if ( pUno_environment )
{
// release uno environment
pUno_environment->release(pUno_environment);
pUno_environment = NULL;
}
}
}
catch (const RuntimeException &)
{
OSL_TRACE("RuntimeException caught while initializing the mapping");
}
if ( (0 != g_jmRegisterTopWindow) && (0 != g_jmRevokeTopWindow) )
{
::Application::AddEventListener(g_aEventListenerLink);
}
return JNI_TRUE;
}
SAL_DLLPUBLIC_EXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *)
{
::Application::RemoveEventListener(g_aEventListenerLink);
if ( NULL != g_jcWindowsAccessBridgeAdapter )
{
JNIEnv * pJNIEnv;
if ( ! jvm->GetEnv((void **) &pJNIEnv, JNI_VERSION_1_2) )
{
pJNIEnv->DeleteGlobalRef(g_jcWindowsAccessBridgeAdapter);
g_jcWindowsAccessBridgeAdapter = NULL;
}
}
if ( NULL != g_pTypeDescription )
{
typelib_typedescription_release( reinterpret_cast< typelib_TypeDescription * > (g_pTypeDescription) );
g_pTypeDescription = NULL;
}
g_unoMapping.clear();
g_xUnoVirtualMachine.clear();
}
HWND GetHWND(Window * pWindow)
{
const SystemEnvData * pEnvData = pWindow->GetSystemData();
if (pEnvData != NULL)
{
return pEnvData->hWnd;
}
return (HWND) -1;
}
void handleWindowEvent(Window * pWindow, bool bShow)
{
if ( pWindow && pWindow->IsTopWindow() )
{
::com::sun::star::uno::Reference< XAccessible > xAccessible;
// Test for combo box - drop down floating windows first
Window * pParentWindow = pWindow->GetParent();
if ( pParentWindow )
{
try
{
// The parent window of a combo box floating window should have the role COMBO_BOX
::com::sun::star::uno::Reference< XAccessible > xParentAccessible(pParentWindow->GetAccessible());
if ( xParentAccessible.is() )
{
::com::sun::star::uno::Reference< XAccessibleContext > xParentAC(xParentAccessible->getAccessibleContext());
if ( xParentAC.is() && (AccessibleRole::COMBO_BOX == xParentAC->getAccessibleRole()) )
{
// O.k. - this is a combo box floating window corresponding to the child of role LIST of the parent.
// Let's not rely on a specific child order, just search for the child with the role LIST
sal_Int32 nCount = xParentAC->getAccessibleChildCount();
for ( sal_Int32 n = 0; (n < nCount) && !xAccessible.is(); n++)
{
::com::sun::star::uno::Reference< XAccessible > xChild = xParentAC->getAccessibleChild(n);
if ( xChild.is() )
{
::com::sun::star::uno::Reference< XAccessibleContext > xChildAC = xChild->getAccessibleContext();
if ( xChildAC.is() && (AccessibleRole::LIST == xChildAC->getAccessibleRole()) )
{
xAccessible = xChild;
}
}
}
}
}
}
catch (const ::com::sun::star::uno::RuntimeException &)
{
// Ignore show events that throw DisposedExceptions in getAccessibleContext(),
// but keep revoking these windows in hide(s).
if (bShow)
return;
}
}
// We have to rely on the fact that Window::GetAccessible()->getAccessibleContext() returns a valid XAccessibleContext
// also for other menus than menubar or toplevel popup window. Otherwise we had to traverse the hierarchy to find the
// context object to this menu floater. This makes the call to Window->IsMenuFloatingWindow() obsolete.
if ( ! xAccessible.is() )
xAccessible = pWindow->GetAccessible();
if ( xAccessible.is() && g_unoMapping.is() )
{
jobject * joXAccessible = reinterpret_cast < jobject * > (g_unoMapping.mapInterface(
xAccessible.get(), g_pTypeDescription));
if ( NULL != joXAccessible )
{
jvmaccess::VirtualMachine::AttachGuard aGuard(g_xUnoVirtualMachine->getVirtualMachine());
JNIEnv * pJNIEnv = aGuard.getEnvironment();
if ( NULL != pJNIEnv )
{
// g_jmRegisterTopWindow and g_jmRevokeTopWindow are ensured to be != 0 - otherwise
// the event listener would not have been attached.
pJNIEnv->CallStaticVoidMethod(g_jcWindowsAccessBridgeAdapter,
(bShow) ? g_jmRegisterTopWindow : g_jmRevokeTopWindow,
(jclass) GetHWND(pWindow), joXAccessible );
// Clear any exception that might have been occurred.
if (pJNIEnv->ExceptionCheck()) {
pJNIEnv->ExceptionClear();
}
}
}
}
}
}
long VCLEventListenerLinkFunc(void *, void * pData)
{
::VclSimpleEvent const * pEvent = (::VclSimpleEvent const *) pData;
switch (pEvent->GetId())
{
case VCLEVENT_WINDOW_SHOW:
handleWindowEvent(((::VclWindowEvent const *) pEvent)->GetWindow(), true);
break;
case VCLEVENT_WINDOW_HIDE:
handleWindowEvent(((::VclWindowEvent const *) pEvent)->GetWindow(), false);
break;
}
return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/config_host.mk.in b/config_host.mk.in
index e1f0226f..2263d40 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -123,7 +123,6 @@ export ENABLE_GNOMEVFS=@ENABLE_GNOMEVFS@
export ENABLE_GRAPHITE=@ENABLE_GRAPHITE@
export ENABLE_ORCUS=@ENABLE_ORCUS@
export ENABLE_HARFBUZZ=@ENABLE_HARFBUZZ@
export ENABLE_IA2=@ENABLE_IA2@
export ENABLE_GSTREAMER=@ENABLE_GSTREAMER@
export ENABLE_GSTREAMER_0_10=@ENABLE_GSTREAMER_0_10@
export ENABLE_GTK3=@ENABLE_GTK3@
diff --git a/configure.ac b/configure.ac
index c3ffe05..a47217e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1312,11 +1312,6 @@ AC_ARG_ENABLE(library-bin-tar,
for the next time.]),
)
AC_ARG_ENABLE(ia2,
AS_HELP_STRING([--enable-ia2],
[Enable the Windows IAccessibility2. Disables Java Accessibility Bridge.]),
,)
dnl ===================================================================
dnl Optional Packages (--with/without-)
dnl ===================================================================
@@ -11560,21 +11555,6 @@ fi
AC_SUBST(ENABLE_ONLINE_UPDATE)
dnl ===================================================================
dnl Test whether to enable ia2
dnl ===================================================================
AC_MSG_CHECKING([whether to enable IA2])
ENABLE_IA2=
if test "$enable_ia2" = "yes"; then
if test "$_os" = "WINNT"; then
AC_MSG_RESULT([yes])
ENABLE_IA2="TRUE"
else
AC_MSG_RESULT([no])
fi
fi
AC_SUBST(ENABLE_IA2)
dnl ===================================================================
dnl Test whether to create MSI with LIMITUI=1 (silent install)
dnl ===================================================================
AC_MSG_CHECKING([whether to create MSI with LIMITUI=1 (silent install)])
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 79fdc50..79eabdb 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1467,11 +1467,8 @@ int Desktop::Main()
SAL_INFO( "desktop.app", "{ GetEnableATToolSupport" );
if( Application::GetSettings().GetMiscSettings().GetEnableATToolSupport() )
{
bool bQuitApp;
if( !InitAccessBridge( true, bQuitApp ) )
if( bQuitApp )
return EXIT_FAILURE;
if( !InitAccessBridge() )
return EXIT_FAILURE;
}
SAL_INFO( "desktop.app", "} GetEnableATToolSupport" );
#endif
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 385cedb..1620efa 100755
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -538,7 +538,7 @@ VCL_DLLPUBLIC Application* GetpApp();
VCL_DLLPUBLIC bool InitVCL();
VCL_DLLPUBLIC void DeInitVCL();
VCL_DLLPUBLIC bool InitAccessBridge( bool bAllowCancel, bool &rCancelled );
VCL_DLLPUBLIC bool InitAccessBridge();
// only allowed to call, if no thread is running. You must call JoinMainLoopThread to free all memory.
VCL_DLLPUBLIC void CreateMainLoopThread( oslWorkerFunction pWorker, void * pThreadData );
diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index 41e8ea6..ccee741 100755
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -26,9 +26,6 @@ $(eval $(call gb_UnoApi_use_api,offapi,\
))
$(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/accessibility,\
AccessBridge \
))
$(eval $(call gb_UnoApi_add_idlfiles_nohdl,offapi,com/sun/star/animations,\
AnimateColor \
AnimateMotion \
diff --git a/offapi/com/sun/star/accessibility/AccessBridge.idl b/offapi/com/sun/star/accessibility/AccessBridge.idl
deleted file mode 100644
index f9205c0..0000000
--- a/offapi/com/sun/star/accessibility/AccessBridge.idl
+++ /dev/null
@@ -1,47 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef __com_sun_star_accessibility_AccessBridge_idl__
#define __com_sun_star_accessibility_AccessBridge_idl__
#include <com/sun/star/lang/XComponent.idl>
#include <com/sun/star/awt/XExtendedToolkit.idl>
module com { module sun { module star { module accessibility {
/** The UNO <-> Java Access Bridge allows any native frame window
to become accessible by implementing the XAccessible interface.
<p>Therefor the UNO <-> Java Access Bridge utilizes the Java <-> Windows
and Java <-> GNOME access bridge by registering the native frames as
Java windows.</p>
@since OOo 1.1.2
*/
service AccessBridge : com::sun::star::lang::XComponent
{
createWithToolkit([in] com::sun::star::awt::XExtendedToolkit toolkit);
};
}; }; }; };
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/padmin/source/pamain.cxx b/padmin/source/pamain.cxx
index bbccadf..4d2cad2 100644
--- a/padmin/source/pamain.cxx
+++ b/padmin/source/pamain.cxx
@@ -115,15 +115,13 @@ int MyApp::Main()
com::sun::star::ucb::UniversalContentBroker::create(xCtx);
/*
* Initialize the Java UNO AccessBridge if accessibility is turned on
* Initialize the MSAA UNO AccessBridge if accessibility is turned on
*/
if( Application::GetSettings().GetMiscSettings().GetEnableATToolSupport() )
{
bool bQuitApp;
if( !InitAccessBridge( true, bQuitApp ) )
if( bQuitApp )
return EXIT_FAILURE;
if( !InitAccessBridge() )
return EXIT_FAILURE;
}
ResMgr::SetReadStringHook( MyApp::ReadStringHook );
diff --git a/postprocess/Rdb_services.mk b/postprocess/Rdb_services.mk
index c044e14..c3a4d0f 100755
--- a/postprocess/Rdb_services.mk
+++ b/postprocess/Rdb_services.mk
@@ -136,12 +136,7 @@ $(eval $(call gb_Rdb_add_components,services,\
shell/source/win32/simplemail/smplmail \
shell/source/win32/syssh \
vcl/vcl.windows \
$(if $(ENABLE_IA2), \
winaccessibility/source/service/winaccessibility, \
$(if $(ENABLE_JAVA), \
accessibility/bridge/org/openoffice/accessibility/java_uno_accessbridge \
) \
) \
winaccessibility/source/service/winaccessibility \
) \
$(if $(ENABLE_HEADLESS), \
vcl/vcl.headless \
diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
index 08ed086..965c89f 100644
--- a/scp2/source/ooo/file_ooo.scp
+++ b/scp2/source/ooo/file_ooo.scp
@@ -315,10 +315,6 @@ STD_JAR_FILE( gid_File_Jar_Xmerge, xmerge )
STD_JAR_FILE( gid_File_Jar_Xmergebridge, XMergeBridge )
#endif
#if defined ENABLE_JAVA && defined WNT
STD_JAR_FILE( gid_File_Jar_Accessbridge, java_uno_accessbridge )
#endif
#ifdef ENABLE_JAVA
#ifndef SYSTEM_HSQLDB
STD_JAR_FILE( gid_File_Jar_Hsqldb, hsqldb )
diff --git a/vcl/inc/pch/precompiled_vcl.hxx b/vcl/inc/pch/precompiled_vcl.hxx
index f1eb653..263a40a 100644
--- a/vcl/inc/pch/precompiled_vcl.hxx
+++ b/vcl/inc/pch/precompiled_vcl.hxx
@@ -18,7 +18,6 @@
#include "basegfx/polygon/b2dpolygon.hxx"
#include "basegfx/polygon/b2dpolygontools.hxx"
#include "basegfx/polygon/b2dpolypolygon.hxx"
#include "com/sun/star/accessibility/AccessBridge.hpp"
#include "com/sun/star/accessibility/AccessibleRole.hpp"
#include "com/sun/star/accessibility/XAccessible.hpp"
#include "com/sun/star/awt/Size.hpp"
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 8648eda..3f2ad23 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -367,7 +367,7 @@ extern VCL_PLUGIN_PUBLIC ImplSVData* pImplSVData;
inline VCL_PLUGIN_PUBLIC ImplSVData* ImplGetSVData() { return pImplSVData; }
VCL_PLUGIN_PUBLIC void ImplHideSplash();
bool ImplInitAccessBridge( bool bAllowCancel, bool &rCancelled );
bool ImplInitAccessBridge();
FieldUnitStringList* ImplGetFieldUnits();
FieldUnitStringList* ImplGetCleanedFieldUnits();
diff --git a/vcl/inc/svids.hrc b/vcl/inc/svids.hrc
index e9ff357..eb16740 100644
--- a/vcl/inc/svids.hrc
+++ b/vcl/inc/svids.hrc
@@ -198,16 +198,6 @@
#define STR_FPICKER_SAVE 10317
#define STR_FPICKER_TYPE 10318
#define SV_ACCESSERROR_WRONG_VERSION 10500
#define SV_ACCESSERROR_BRIDGE_MSG 10501
#define SV_ACCESSERROR_OK_CANCEL_MSG 10502
#define SV_ACCESSERROR_MISSING_BRIDGE 10503
#define SV_ACCESSERROR_FAULTY_JAVA 10504
#define SV_ACCESSERROR_JAVA_MSG 10505
#define SV_ACCESSERROR_MISSING_JAVA 10506
#define SV_ACCESSERROR_JAVA_NOT_CONFIGURED 10507
#define SV_ACCESSERROR_JAVA_DISABLED 10508
#define SV_ACCESSERROR_TURNAROUND_MSG 10509
#define SV_ACCESSERROR_NO_FONTS 10510
#define SV_SHORTCUT_HELP 10600
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 4995e6d..8f2d0c1 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -1178,8 +1178,7 @@ void MiscSettings::SetEnableATToolSupport( sal_Bool bEnable )
{
if ( bEnable != mpData->mnEnableATT )
{
bool bDummy;
if( bEnable && !ImplInitAccessBridge(false, bDummy) )
if( bEnable && !ImplInitAccessBridge() )
return;
HKEY hkey;
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index 987db60..4474e20 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -1614,17 +1614,15 @@ void Application::AddToRecentDocumentList(const OUString& rFileUrl, const OUStri
pSVData->mpDefInst->AddToRecentDocumentList(rFileUrl, rMimeType, rDocumentService);
}
bool InitAccessBridge( bool bShowCancel, bool &rCancelled )
bool InitAccessBridge()
{
// Disable Java bridge on UNIX
// Disable MSAA bridge on UNIX
#if defined UNX
(void) bShowCancel; // unused
(void) rCancelled; // unused
return true;
#else
bool bRet = ImplInitAccessBridge( bShowCancel, rCancelled );
bool bRet = ImplInitAccessBridge();
if( !bRet && bShowCancel && !rCancelled )
if( !bRet )
{
// disable accessibility if the user chooses to continue
AllSettings aSettings = Application::GetSettings();
diff --git a/vcl/source/app/svdata.cxx b/vcl/source/app/svdata.cxx
index aa58484..500e18d 100644
--- a/vcl/source/app/svdata.cxx
+++ b/vcl/source/app/svdata.cxx
@@ -45,13 +45,7 @@
#include "salsys.hxx"
#include "svids.hrc"
#include "com/sun/star/accessibility/AccessBridge.hpp"
#include "com/sun/star/accessibility/MSAAService.hpp"
#include "com/sun/star/awt/XExtendedToolkit.hpp"
#include "com/sun/star/java/JavaNotConfiguredException.hpp"
#include "com/sun/star/java/JavaVMCreationFailureException.hpp"
#include "com/sun/star/java/MissingJavaRuntimeException.hpp"
#include "com/sun/star/java/JavaDisabledException.hpp"
#include "officecfg/Office/Common.hxx"
@@ -80,14 +74,6 @@ SalSystem* ImplGetSalSystem()
return pSVData->mpSalSystem;
}
static OUString ReplaceJavaErrorMessages( const OUString& rString )
{
return rString.replaceAll("%OK", Button::GetStandardText(BUTTON_OK)).
replaceAll("%IGNORE", Button::GetStandardText(BUTTON_IGNORE)).
replaceAll("%CANCEL", Button::GetStandardText(BUTTON_CANCEL));
}
// =======================================================================
void ImplInitSVData()
@@ -301,236 +287,37 @@ com::sun::star::uno::Any AccessBridgeCurrentContext::getValueByName( const OUStr
bool HasAtHook();
#endif
bool ImplInitAccessBridge(bool bAllowCancel, bool &rCancelled)
bool ImplInitAccessBridge()
{
rCancelled = false;
bool bErrorMessage = true;
// Note:
// if bAllowCancel is sal_True we were called from application startup
// where we will disable any Java errorboxes and show our own accessibility dialog if Java throws an exception
// if bAllowCancel is sal_False we were called from Tools->Options
// where we will see Java errorboxes, se we do not show our dialogs in addition to Java's
try
ImplSVData* pSVData = ImplGetSVData();
if( ! pSVData->mxAccessBridge.is() )
{
// No error messages when env var is set ..
static const char* pEnv = getenv("SAL_ACCESSIBILITY_ENABLED" );
if( pEnv && *pEnv )
{
bErrorMessage = false;
}
ImplSVData* pSVData = ImplGetSVData();
if( ! pSVData->mxAccessBridge.is() )
{
css::uno::Reference< XComponentContext > xContext(comphelper::getProcessComponentContext());
css::uno::Reference< XComponentContext > xContext(comphelper::getProcessComponentContext());
#ifdef _WIN32
bool bTryIAcc2 = ( officecfg::Office::Common::Misc::ExperimentalMode::get( xContext ) &&
!getenv ("SAL_DISABLE_IACCESSIBLE2") );
if ( bTryIAcc2 ) // Windows only really
{
if (!HasAtHook() && !getenv("SAL_FORCE_IACCESSIBLE2"))
{
SAL_INFO("vcl", "Apparently no running AT -> "
"not enabling IAccessible2 integration");
}
else
{
try {
pSVData->mxAccessBridge
= css::accessibility::MSAAService::create(xContext);
SAL_INFO("vcl", "got IAccessible2 bridge");
return true;
} catch (css::uno::DeploymentException & e) {
SAL_INFO(
"vcl",
"got no IAccessible2 bridge, \"" << e.Message
<< "\", falling back to java");
}
}
}
else
SAL_INFO( "vcl", "IAccessible2 disabled, falling back to java" );
if (!HasAtHook() && !getenv("SAL_DISABLE_IACCESSIBLE2"))
{
SAL_INFO("vcl", "Apparently no running AT -> "
"not enabling IAccessible2 integration");
}
else
{
try {
pSVData->mxAccessBridge
= css::accessibility::MSAAService::create(xContext);
SAL_INFO("vcl", "got IAccessible2 bridge");
return true;
} catch (css::uno::DeploymentException & e) {
SAL_WARN(
"vcl",
"got no IAccessible2 bridge" << e.Message);
return false;
}
}
#endif
css::uno::Reference< XExtendedToolkit > xToolkit =
css::uno::Reference< XExtendedToolkit >(Application::GetVCLToolkit(), UNO_QUERY);
// Disable default java error messages on startup, because they were probably unreadable
// for a disabled user. Use native message boxes which are accessible without java support.
// No need to do this when activated by Tools-Options dialog ..
if( bAllowCancel )
{
// customize the java-not-available-interaction-handler entry within the
// current context when called at startup.
com::sun::star::uno::ContextLayer layer(
new AccessBridgeCurrentContext( com::sun::star::uno::getCurrentContext() ) );
pSVData->mxAccessBridge
= css::accessibility::AccessBridge::createWithToolkit(
xContext, xToolkit);
}
else
{
pSVData->mxAccessBridge
= css::accessibility::AccessBridge::createWithToolkit(
xContext, xToolkit);
}
}
return true;
}
catch (const ::com::sun::star::java::JavaNotConfiguredException&)
{
ResMgr *pResMgr = ImplGetResMgr();
if( bErrorMessage && bAllowCancel && pResMgr )
{
OUString aTitle(ResId(SV_ACCESSERROR_JAVA_NOT_CONFIGURED, *pResMgr).toString());
OUStringBuffer aMessage((ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr)).toString());
aMessage.append(' ').append(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr).toString());
int ret = ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL, true);
// Do not change the setting in case the user chooses to cancel
if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
rCancelled = true;
}
return false;
}
catch (const ::com::sun::star::java::JavaVMCreationFailureException&)
{
ResMgr *pResMgr = ImplGetResMgr();
if( bErrorMessage && bAllowCancel && pResMgr )
{
OUString aTitle(ResId(SV_ACCESSERROR_FAULTY_JAVA, *pResMgr).toString());
OUStringBuffer aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr).toString());
aMessage.append(' ').append(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr).toString());
int ret = ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL, true);
// Do not change the setting in case the user chooses to cancel
if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
rCancelled = true;
}
return false;
}
catch (const ::com::sun::star::java::MissingJavaRuntimeException&)
{
ResMgr *pResMgr = ImplGetResMgr();
if( bErrorMessage && bAllowCancel && pResMgr )
{
OUString aTitle(ResId(SV_ACCESSERROR_MISSING_JAVA, *pResMgr).toString());
OUStringBuffer aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr).toString());
aMessage.append(' ').append(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr).toString());
int ret = ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL, true);
// Do not change the setting in case the user chooses to cancel
if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
rCancelled = true;
}
return false;
}
catch (const ::com::sun::star::java::JavaDisabledException&)
{
ResMgr *pResMgr = ImplGetResMgr();
if( bErrorMessage && bAllowCancel && pResMgr )
{
OUString aTitle(ResId(SV_ACCESSERROR_JAVA_DISABLED, *pResMgr).toString());
OUStringBuffer aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr).toString());
aMessage.append(' ').append(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr).toString());
int ret = ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL, true);
// Do not change the setting in case the user chooses to cancel
if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
rCancelled = true;
}
return false;
}
catch (const ::com::sun::star::uno::RuntimeException& e)
{
ResMgr *pResMgr = ImplGetResMgr();
if( bErrorMessage && pResMgr )
{
OUString aTitle;
OUStringBuffer aMessage(ResId(SV_ACCESSERROR_BRIDGE_MSG, *pResMgr).toString());
if( e.Message.startsWith("ClassNotFound") )
{
aTitle = ResId(SV_ACCESSERROR_MISSING_BRIDGE, *pResMgr).toString();
}
else if( e.Message.startsWith("NoSuchMethod") )
{
aTitle = ResId(SV_ACCESSERROR_WRONG_VERSION, *pResMgr).toString();
}
if (!aTitle.isEmpty())
{
if( bAllowCancel )
{
// Something went wrong initializing the Java AccessBridge (on Windows) during the
// startup. Since the office will be probably unusable for a disabled user, we offer
// to terminate directly.
aMessage.append(' ').append(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr).toString());
int ret = ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL, true);
// Do not change the setting in case the user chooses to cancel
if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
rCancelled = sal_True;
}
else
{
// The user tried to activate accessibility support using Tools-Options dialog,
// so we don't offer to terminate here !
ImplGetSalSystem()->ShowNativeMessageBox(
aTitle,
ReplaceJavaErrorMessages(aMessage.makeStringAndClear()),
SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK,
SALSYSTEM_SHOWNATIVEMSGBOX_BTN_OK, true);
}
}
}
return false;
}
catch (...)
{
return false;
}
return true;
}
// -----------------------------------------------------------------------
diff --git a/vcl/source/src/stdtext.src b/vcl/source/src/stdtext.src
index 9a169ac..1a33cfa 100644
--- a/vcl/source/src/stdtext.src
+++ b/vcl/source/src/stdtext.src
@@ -34,56 +34,6 @@ String SV_STDTEXT_DONTWARNAGAIN
Text [ en-US ] = "Do not show warning again.";
};
String SV_ACCESSERROR_WRONG_VERSION
{
Text [ en-US ] = "Wrong Version";
};
String SV_ACCESSERROR_BRIDGE_MSG
{
Text [ en-US ] = "%PRODUCTNAME %PRODUCTVERSION requires a Java Access Bridge 1.0.3 or later version to support accessibility.";
};
String SV_ACCESSERROR_OK_CANCEL_MSG
{
Text [ en-US ] = "Click '%OK' to start %PRODUCTNAME %PRODUCTVERSION without accessibility support, or click '%CANCEL' to exit %PRODUCTNAME %PRODUCTVERSION.";
};
String SV_ACCESSERROR_MISSING_BRIDGE
{
Text [ en-US ] = "No Java Access Bridge";
};
String SV_ACCESSERROR_FAULTY_JAVA
{
Text [ en-US ] = "Faulty Java Installation";
};
String SV_ACCESSERROR_JAVA_MSG
{
Text [ en-US ] = "%PRODUCTNAME %PRODUCTVERSION requires Java 1.4.0_02 or later version to support accessibility.";
};
String SV_ACCESSERROR_MISSING_JAVA
{
Text [ en-US ] = "No Java Installation";
};
String SV_ACCESSERROR_JAVA_NOT_CONFIGURED
{
Text [ en-US ] = "Missing Java Configuration";
};
String SV_ACCESSERROR_JAVA_DISABLED
{
Text [ en-US ] = "Java Disabled";
};
String SV_ACCESSERROR_TURNAROUND_MSG
{
Text [ en-US ] = "The Java Access Bridge could not be started.";
};
String SV_ACCESSERROR_NO_FONTS
{
Text [ en-US ] = "No fonts could be found on the system.";
diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx
index f7c3086..3602c83 100644
--- a/vcl/win/source/window/salframe.cxx
+++ b/vcl/win/source/window/salframe.cxx
@@ -5503,9 +5503,7 @@ ImplHandleGetObject(HWND hWnd, LPARAM lParam, WPARAM wParam, LRESULT & nRet)
// to avoid RFT interrupts regular accessibility processing
if ( !pSVData->mxAccessBridge.is() )
{
bool bCancelled = false;
InitAccessBridge( false, bCancelled );
if( bCancelled )
if( !InitAccessBridge() )
return false;
}
diff --git a/winaccessibility/Module_winaccessibility.mk b/winaccessibility/Module_winaccessibility.mk
index b4945cf..2421164 100644
--- a/winaccessibility/Module_winaccessibility.mk
+++ b/winaccessibility/Module_winaccessibility.mk
@@ -11,14 +11,12 @@ $(eval $(call gb_Module_Module,winaccessibility))
ifeq ($(OS),WNT)
ifeq ($(COM),MSC)
ifneq ($(ENABLE_IA2),)
$(eval $(call gb_Module_add_targets,winaccessibility,\
WinResTarget_uacccom \
CustomTarget_ia2_idl \
Library_uacccom \
Library_winaccessibility \
))
endif # ENABLE_IA2
endif # COM=MSC
endif # WNT