summaryrefslogtreecommitdiff
path: root/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java')
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java252
1 files changed, 110 insertions, 142 deletions
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
index 9b737e4f8240..c8efdb618652 100644
--- a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
+++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleObjectFactory.java
@@ -2,10 +2,6 @@
*
* $RCSfile: AccessibleObjectFactory.java,v $
*
- * $Revision: 1.13 $
- *
- * last change: $Author: obr $ $Date: 2003-01-13 11:00:06 $
- *
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
@@ -72,67 +68,18 @@ import drafts.com.sun.star.accessibility.*;
/**
*/
-public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
-
- // This type is needed for conversions from/to uno Any
- public static boolean autoPopulate = true;
-
- java.util.Hashtable objectList = new java.util.Hashtable();
-
- private static AccessibleObjectFactory defaultFactory = new AccessibleObjectFactory();
-
- protected AccessibleObjectFactory() {
- // FIXME: provide default implementation of XAccessibilityInformationProvider
-// infoProvider = provider;
- }
-
- /** Returns the default accessible object factory */
- public static AccessibleObjectFactory getDefault() {
- return defaultFactory;
- }
-
- /** 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) {
- 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;
- }
+public class AccessibleObjectFactory {
- /** Returns the last Component in the traversal cycle */
- public java.awt.Component getLastComponent(java.awt.Container focusCycleRoot) {
- return null;
- }
+ private static java.util.Hashtable objectList = new java.util.Hashtable();
+ private static java.awt.FocusTraversalPolicy focusTraversalPolicy = new FocusTraversalPolicy();
- private java.awt.EventQueue eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
+ private static java.awt.EventQueue eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue();
- public java.awt.EventQueue getEventQueue() {
+ public static java.awt.EventQueue getEventQueue() {
return eventQueue;
}
- public java.awt.Component getAccessibleComponent(XAccessible xAccessible) {
+ protected 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
@@ -149,10 +96,33 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
return c;
}
- /**
- * returns the child component that has the initial input focus
- */
- protected void populateContainer(java.awt.Container parent, XAccessibleContext parentAC, java.awt.Window frame) {
+
+ protected static void clearContainer(java.awt.Container parent) {
+ // FIXME: may need to purge the children to safe memory ..
+// int count = parent.getComponentCount();
+// for (int i = 0; i < count; i++) {
+// java.awt.Component c = parent.getComponent(i);
+// }
+ parent.removeAll();
+ }
+
+ protected static void populateContainer(java.awt.Container parent, XAccessibleContext parentAC) {
+ java.awt.Window w = null;
+
+ // find the top level window of this container
+ java.awt.Container c = parent;
+ while (c != null) {
+ if (c instanceof java.awt.Window) {
+ w = (java.awt.Window) c;
+ break;
+ }
+ c = c.getParent();
+ }
+
+ populateContainer(parent, parentAC, w);
+ }
+
+ protected static void populateContainer(java.awt.Container parent, XAccessibleContext parentAC, java.awt.Window frame) {
if (parentAC != null) {
try {
int childCount = parentAC.getAccessibleChildCount();
@@ -180,14 +150,12 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
}
}
- protected java.awt.Component createAccessibleComponent(XAccessible xAccessible) {
+ protected static java.awt.Component createAccessibleComponent(XAccessible xAccessible) {
if (xAccessible != null) {
try {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
- java.awt.Component c = createAccessibleComponentImpl(xAccessible,
- xAccessibleContext.getAccessibleRole(), (XAccessibleComponent)
- UnoRuntime.queryInterface(XAccessibleComponent.class,xAccessibleContext),
+ java.awt.Component c = createAccessibleComponentImpl(xAccessible, xAccessibleContext,
xAccessibleContext.getAccessibleStateSet());
if (c != null) {
if (c instanceof java.awt.Container) {
@@ -202,22 +170,34 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
return null;
}
- protected java.awt.Component createAccessibleComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext,
+ protected static java.awt.Component createAccessibleComponent(XAccessible xAccessible, XAccessibleContext xAccessibleContext) {
+ try {
+ if (xAccessibleContext != null) {
+ java.awt.Component c = createAccessibleComponentImpl(xAccessible, xAccessibleContext,
+ xAccessibleContext.getAccessibleStateSet());
+ if (c != null) {
+ if (c instanceof java.awt.Container) {
+ populateContainer(((java.awt.Container) c), xAccessibleContext, null);
+ }
+ return c;
+ }
+ }
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ 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.getAccessibleRole(), (XAccessibleComponent)
- UnoRuntime.queryInterface(XAccessibleComponent.class, xAccessibleContext),
- xAccessibleStateSet);
+ 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 Dialog) {
- ((Dialog) frame).setInitialComponent(c);
- } else if (frame instanceof Frame) {
- ((Frame) frame).setInitialComponent(c);
+ if (frame instanceof NativeFrame) {
+ ((NativeFrame) frame).setInitialComponent(c);
}
}
return c;
@@ -230,79 +210,68 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
return null;
}
- protected java.awt.Component createAccessibleComponentImpl(XAccessible xAccessible, short role,
- XAccessibleComponent xAccessibleComponent, XAccessibleStateSet xAccessibleStateSet) {
+ 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, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.CHECKBOX:
- c = new CheckBox(xAccessible, xAccessibleComponent);
+ c = new CheckBox(xAccessible, xAccessibleContext);
break;
case AccessibleRole.COMBOBOX:
- // There is a different understanding of combo boxes in VCL than in Java:
- // the Java combo boxes correspond to the VCL DropDown[Combo|List]Boxes,
- // while all Combo-/ListBoxes if VCL return the role COMBOBOX
- XAccessibleAction xAccessibleAction = (XAccessibleAction)
- UnoRuntime.queryInterface(XAccessibleAction.class, xAccessibleComponent);
- if (xAccessibleAction != null && xAccessibleAction.getAccessibleActionCount() > 0) {
-// c = new ComboBox(xAccessible, xAccessibleComponent, xAccessibleAction);
- c = new Container(javax.accessibility.AccessibleRole.COMBO_BOX,
- xAccessible, xAccessibleComponent);
- } else {
- c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
- }
+ c = new ComboBox(xAccessible, xAccessibleContext);
break;
case AccessibleRole.DOCUMENT:
c = new Container(javax.accessibility.AccessibleRole.CANVAS,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.EMBEDDED_OBJECT:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.ENDNOTE:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.FILLER:
c = new Container(javax.accessibility.AccessibleRole.FILLER,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.FOOTNOTE:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.FOOTER:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.GRAPHIC:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.HEADER:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.ICON:
- c = new Icon(xAccessible, xAccessibleComponent);
+ c = new Icon(xAccessible, xAccessibleContext);
break;
case AccessibleRole.LABEL:
- c = new Label(xAccessible, xAccessibleComponent);
+ c = new Label(xAccessible, xAccessibleContext);
break;
case AccessibleRole.LAYEREDPANE:
c = new Container(javax.accessibility.AccessibleRole.LAYERED_PANE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.LIST:
- c = new List(xAccessible, xAccessibleComponent);
+ c = new List(xAccessible, xAccessibleContext);
break;
case AccessibleRole.MENU:
- c = new Menu(xAccessible, xAccessibleComponent);
+ c = new Menu(xAccessible, xAccessibleContext);
// !!! FIXME !!!
// Menu items are always visible, but change SHOWING state
// if (!xAccessibleStateSet.contains(AccessibleStateType.SHOWING)) {
@@ -310,10 +279,10 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
// }
break;
case AccessibleRole.MENUBAR:
- c = new MenuBar(xAccessible, xAccessibleComponent);
+ c = new Container(javax.accessibility.AccessibleRole.MENU_BAR, xAccessible, xAccessibleContext);
break;
case AccessibleRole.MENUITEM:
- c = new MenuItem(xAccessible, xAccessibleComponent);
+ c = new MenuItem(xAccessible, xAccessibleContext);
c.setFocusable(false);
// Menu items are always visible, but change SHOWING state
// if (!xAccessibleStateSet.contains(AccessibleStateType.SHOWING)) {
@@ -321,108 +290,110 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
// }
break;
case AccessibleRole.POPUPMENU:
- c = new PopupMenu(xAccessible, xAccessibleComponent);
+ c = new Container(javax.accessibility.AccessibleRole.POPUP_MENU, xAccessible, xAccessibleContext);
break;
case AccessibleRole.OPTIONPANE:
c = new Container(javax.accessibility.AccessibleRole.OPTION_PANE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.PAGETAB:
- c = new Container(javax.accessibility.AccessibleRole.PAGE_TAB,
- xAccessible, xAccessibleComponent);
+ c = new Container(javax.accessibility.AccessibleRole.PAGE_TAB, xAccessible, xAccessibleContext);
break;
case AccessibleRole.PAGETABLIST:
- c = new PageTabList(xAccessible, xAccessibleComponent);
+ c = new Container(javax.accessibility.AccessibleRole.PAGE_TAB_LIST, xAccessible, xAccessibleContext);
break;
case AccessibleRole.PARAGRAPH:
case AccessibleRole.HEADING:
- c = new TextComponent(xAccessible, xAccessibleComponent, xAccessibleStateSet);
+ c = new TextComponent(xAccessible, xAccessibleContext, xAccessibleStateSet);
break;
case AccessibleRole.PANEL:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.PUSHBUTTON:
- c = new Button(xAccessible, xAccessibleComponent);
+ c = new Button(xAccessible, xAccessibleContext);
break;
case AccessibleRole.RADIOBUTTON:
- c = new RadioButton(xAccessible, xAccessibleComponent);
+ c = new RadioButton(xAccessible, xAccessibleContext);
break;
case AccessibleRole.ROOTPANE:
c = new Container(javax.accessibility.AccessibleRole.ROOT_PANE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.SCROLLBAR:
if (xAccessibleStateSet.contains(AccessibleStateType.VERTICAL)) {
- c = new ScrollBar(xAccessible, xAccessibleComponent,
+ c = new ScrollBar(xAccessible, xAccessibleContext,
javax.swing.SwingConstants.VERTICAL);
} else {
- c = new ScrollBar(xAccessible, xAccessibleComponent);
+ c = new ScrollBar(xAccessible, xAccessibleContext);
}
break;
case AccessibleRole.SCROLLPANE:
c = new Container(javax.accessibility.AccessibleRole.SCROLL_PANE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.SEPARATOR:
if (xAccessibleStateSet.contains(AccessibleStateType.VERTICAL)) {
- c = new Separator(xAccessible, xAccessibleComponent,
+ c = new Separator(xAccessible, xAccessibleContext,
javax.swing.SwingConstants.VERTICAL);
} else {
- c = new Separator(xAccessible, xAccessibleComponent);
+ c = new Separator(xAccessible, xAccessibleContext);
}
break;
case AccessibleRole.SHAPE:
c = new Container(javax.accessibility.AccessibleRole.CANVAS,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.SPLITPANE:
c = new Container(javax.accessibility.AccessibleRole.SPLIT_PANE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.STATUSBAR:
c = new Container(javax.accessibility.AccessibleRole.STATUS_BAR,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.TABLE:
if (xAccessibleStateSet.contains(AccessibleStateType.MANAGES_DESCENDANT)) {
- c = new Table(xAccessible, xAccessibleComponent,
+ c = new Table(xAccessible, xAccessibleContext,
xAccessibleStateSet.contains(AccessibleStateType.MULTISELECTABLE));
} else {
c = new Container(javax.accessibility.AccessibleRole.TABLE,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
}
break;
case AccessibleRole.TABLE_CELL:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.TEXT:
- c = new TextComponent(xAccessible, xAccessibleComponent, xAccessibleStateSet);
+ c = new TextComponent(xAccessible, xAccessibleContext, xAccessibleStateSet);
break;
case AccessibleRole.TEXT_FRAME:
c = new Container(javax.accessibility.AccessibleRole.PANEL,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
case AccessibleRole.TOGGLEBUTTON:
- c = new ToggleButton(xAccessible, xAccessibleComponent);
+ c = new ToggleButton(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TOOLBAR:
c = new Container(javax.accessibility.AccessibleRole.TOOL_BAR,
- xAccessible, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
+ break;
+ case AccessibleRole.TOOLTIP:
+ c = new ToolTip(xAccessible, xAccessibleContext);
break;
case AccessibleRole.TREE:
- c = new Tree(xAccessible, xAccessibleComponent);
+ c = new Tree(xAccessible, xAccessibleContext);
break;
case AccessibleRole.VIEWPORT:
c = new Container(javax.accessibility.AccessibleRole.VIEWPORT,
- xAccessible, xAccessibleComponent);
+ 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, xAccessibleComponent);
+ xAccessible, xAccessibleContext);
break;
}
if (c != null) {
@@ -446,7 +417,7 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
return c;
}
- protected void disposing(java.awt.Component c) {
+ protected static void disposing(java.awt.Component c) {
if (c != null) {
synchronized (objectList) {
objectList.remove(c.toString());
@@ -454,10 +425,7 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
}
}
-/*
- protected java.? createTransientObject()
-*/
- public java.awt.Window getTopWindow(XAccessible xAccessible) {
+ public static java.awt.Window getTopWindow(XAccessible xAccessible) {
XAccessibleContext xAccessibleContext = xAccessible.getAccessibleContext();
if (xAccessibleContext != null) {
@@ -485,7 +453,7 @@ public class AccessibleObjectFactory extends java.awt.FocusTraversalPolicy {
// return null;
}
populateContainer(w, xAccessibleContext, w);
- w.setFocusTraversalPolicy(this);
+ w.setFocusTraversalPolicy(focusTraversalPolicy);
w.setVisible(true);
// Post window gained focus event to let the frame/dialog become active
if (xAccessibleStateSet.contains(AccessibleStateType.ACTIVE)) {