diff options
Diffstat (limited to 'accessibility/bridge/org/openoffice/java/accessibility/logging')
3 files changed, 517 insertions, 0 deletions
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java new file mode 100644 index 000000000000..36bec1cab8fb --- /dev/null +++ b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleEventLog.java @@ -0,0 +1,186 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.java.accessibility.logging; + +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 proxyList = new java.util.Hashtable(); + + /** 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 = (XAccessibleEventBroadcaster) + UnoRuntime.queryInterface(XAccessibleEventBroadcaster.class, xac); + if (broadcaster != null) { + broadcaster.addEventListener(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 = (XAccessibleContext) 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 new file mode 100644 index 000000000000..f14da6d8280b --- /dev/null +++ b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleHypertextLog.java @@ -0,0 +1,61 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package 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 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 new file mode 100644 index 000000000000..4b415ee60c74 --- /dev/null +++ b/accessibility/bridge/org/openoffice/java/accessibility/logging/XAccessibleTextLog.java @@ -0,0 +1,270 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +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.accessibility.XAccessibleContext) 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); + } +} |