Index: java/awt/Button.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/Button.java,v retrieving revision 1.16 diff -u -r1.16 Button.java --- java/awt/Button.java 16 Nov 2004 09:59:11 -0000 1.16 +++ java/awt/Button.java 23 Nov 2004 18:02:37 -0000 @@ -1,5 +1,5 @@ /* Button.java -- AWT button widget - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,13 +44,21 @@ import java.lang.reflect.Array; import java.util.EventListener; +import javax.accessibility.Accessible; +import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRelation; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleValue; + /** * This class provides a button widget for the AWT. * * @author Aaron M. Renn (address@hidden) * @author Tom Tromey */ -public class Button extends Component implements java.io.Serializable +public class Button extends Component + implements java.io.Serializable, Accessible { /* @@ -85,6 +93,101 @@ * The number used to generate the name returned by getName. */ private static transient long next_button_number; + + protected class AccessibleAWTButton extends AccessibleAWTComponent + implements AccessibleAction, AccessibleValue + { + protected AccessibleAWTButton() { } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() + */ + public int getAccessibleActionCount() + { + // Only 1 action possible + return 1; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) + */ + public String getAccessibleActionDescription(int i) + { + // JDK 1.4.2 returns the string "click" for action 0. However, the API + // docs don't say what the string to be returned is, beyond being a + // description of the action. So we return the same thing for + // compatibility with 1.4.2. + if (i == 0) + return "click"; + return null; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) + */ + public boolean doAccessibleAction(int i) + { + if (i != 0) + return false; + processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand)); + return true; + } + + public String getAccessibleName() + { + return label; + } + + public AccessibleAction getAccessibleAction() + { + return this; + } + + public AccessibleValue getAccessibleValue() + { + return this; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() + */ + public Number getCurrentAccessibleValue() + { + // Docs say return 1 if selected, but buttons can't be selected, right? + return new Integer(0); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) + */ + public boolean setCurrentAccessibleValue(Number number) + { + // Since there's no selection with buttons, we're ignoring this. + // TODO someone who knows shoulw check this. + return false; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() + */ + public Number getMinimumAccessibleValue() + { + return new Integer(0); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() + */ + public Number getMaximumAccessibleValue() + { + return new Integer(0); + } + + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.PUSH_BUTTON; + } + } /*************************************************************************/ @@ -326,6 +429,11 @@ + getWidth () + "x" + getHeight () + ",label=" + getLabel (); } +public AccessibleContext getAccessibleContext() +{ + return new AccessibleAWTButton(); +} + /** * Generate a unique name for this button. * Index: java/awt/Checkbox.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/Checkbox.java,v retrieving revision 1.10 diff -u -r1.10 Checkbox.java --- java/awt/Checkbox.java 3 Jun 2003 16:40:37 -0000 1.10 +++ java/awt/Checkbox.java 23 Nov 2004 18:02:37 -0000 @@ -43,6 +43,13 @@ import java.awt.peer.CheckboxPeer; import java.io.Serializable; +import javax.accessibility.Accessible; +import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleValue; + /** * This class implements a component which has an on/off state. Two * or more Checkboxes can be grouped by a CheckboxGroup. @@ -50,7 +57,8 @@ * @author Aaron M. Renn (address@hidden) * @author Tom Tromey */ -public class Checkbox extends Component implements ItemSelectable, Serializable +public class Checkbox extends Component + implements ItemSelectable, Accessible, Serializable { // FIXME: Need readObject/writeObject for this. @@ -86,6 +94,96 @@ // The list of listeners for this object. private transient ItemListener item_listeners; +protected class AccessibleAWTCheckBox + extends AccessibleAWTComponent + implements ItemListener, AccessibleAction, AccessibleValue +{ + + + /* (non-Javadoc) + * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) + */ + public void itemStateChanged(ItemEvent event) + { + firePropertyChange(ACCESSIBLE_STATE_PROPERTY, + state ? null : AccessibleState.CHECKED, + state ? AccessibleState.CHECKED : null); + } + + public AccessibleAction getAccessibleAction() + { + return this; + } + + public AccessibleValue getAccessibleValue() + { + return this; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() + */ + public int getAccessibleActionCount() + { + // 1.4.1 does this + return 0; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) + */ + public String getAccessibleActionDescription(int i) + { + return null; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) + */ + public boolean doAccessibleAction(int i) + { + return false; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() + */ + public Number getCurrentAccessibleValue() + { + return null; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) + */ + public boolean setCurrentAccessibleValue(Number number) + { + return false; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() + */ + public Number getMinimumAccessibleValue() + { + return null; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() + */ + public Number getMaximumAccessibleValue() + { + return null; + } + + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.CHECK_BOX; + } + +} + /*************************************************************************/ /* @@ -392,4 +490,11 @@ + "," + super.paramString()); } +public AccessibleContext getAccessibleContext() +{ + AccessibleAWTCheckBox ac = new AccessibleAWTCheckBox(); + addItemListener(ac); + return ac; +} + } // class Checkbox Index: java/awt/Choice.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/Choice.java,v retrieving revision 1.16 diff -u -r1.16 Choice.java --- java/awt/Choice.java 25 Oct 2004 11:10:57 -0000 1.16 +++ java/awt/Choice.java 23 Nov 2004 18:02:37 -0000 @@ -45,6 +45,10 @@ import java.util.EventListener; import java.util.Vector; +import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; + /** * This class implements a drop down choice list. * @@ -79,6 +83,53 @@ // Listener chain private ItemListener item_listeners; + protected class AccessibleAWTChoice + extends Component.AccessibleAWTComponent + implements AccessibleAction + { + public AccessibleAction getAccessibleAction() + { + return this; + } + + // FIXME: I think this is right, but should be checked by someone who + // knows better. + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.POPUP_MENU; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() + */ + public int getAccessibleActionCount() + { + return pItems.size(); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) + */ + public String getAccessibleActionDescription(int i) + { + return (String) pItems.get(i); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) + */ + public boolean doAccessibleAction(int i) + { + if (i < 0 || i >= pItems.size()) + return false; + + Choice.this.processItemEvent(new ItemEvent(Choice.this, + ItemEvent.ITEM_STATE_CHANGED, + this, ItemEvent.SELECTED)); + return true; + } + } + /*************************************************************************/ /* @@ -512,4 +563,9 @@ { return (ItemListener[]) getListeners (ItemListener.class); } + + public AccessibleContext getAccessibleContext() + { + return new AccessibleAWTChoice(); + } } // class Choice Index: java/awt/MenuItem.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/MenuItem.java,v retrieving revision 1.17 diff -u -r1.17 MenuItem.java --- java/awt/MenuItem.java 22 Sep 2004 18:53:26 -0000 1.17 +++ java/awt/MenuItem.java 23 Nov 2004 18:02:38 -0000 @@ -45,13 +45,18 @@ import java.lang.reflect.Array; import java.util.EventListener; +import javax.accessibility.Accessible; +import javax.accessibility.AccessibleAction; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleValue; + /** * This class represents an item in a menu. * * @author Aaron M. Renn (address@hidden) */ public class MenuItem extends MenuComponent - implements Serializable + implements Serializable, Accessible { /* @@ -95,6 +100,110 @@ // The list of action listeners for this menu item. private transient ActionListener action_listeners; + protected class AccessibleAWTMenuItem + extends MenuComponent.AccessibleAWTMenuComponent + implements AccessibleAction, AccessibleValue + { + /** Constructor */ + public AccessibleAWTMenuItem() + { + super(); + } + + + + public String getAccessibleName() + { + return label; + } + + public AccessibleAction getAccessibleAction() + { + return this; + } + + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.MENU_ITEM; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionCount() + */ + public int getAccessibleActionCount() + { + return 1; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#getAccessibleActionDescription(int) + */ + public String getAccessibleActionDescription(int i) + { + if (i == 0) + return label; + else + return null; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleAction#doAccessibleAction(int) + */ + public boolean doAccessibleAction(int i) + { + if (i != 0) + return false; + processActionEvent(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand)); + return true; + } + + public AccessibleValue getAccessibleValue() + { + return this; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() + */ + public Number getCurrentAccessibleValue() + { + return (enabled) ? new Integer(1) : new Integer(0); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) + */ + public boolean setCurrentAccessibleValue(Number number) + { + if (number.intValue() == 0) + { + setEnabled(false); + return false; + } + + setEnabled(true); + return true; + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() + */ + public Number getMinimumAccessibleValue() + { + return new Integer(0); + } + + /* (non-Javadoc) + * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() + */ + public Number getMaximumAccessibleValue() + { + return new Integer(0); + } + + } + + /*************************************************************************/ /* Index: java/awt/TextArea.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/TextArea.java,v retrieving revision 1.16 diff -u -r1.16 TextArea.java --- java/awt/TextArea.java 11 Oct 2004 13:11:56 -0000 1.16 +++ java/awt/TextArea.java 23 Nov 2004 18:02:38 -0000 @@ -44,6 +44,9 @@ import java.util.HashSet; import java.util.Set; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleStateSet; + /** * A TextArea is a text component capable of displaying multiple lines @@ -597,4 +600,21 @@ { return next_text_number++; } + + protected class AccessibleAWTTextArea extends AccessibleAWTTextComponent + { + protected AccessibleAWTTextArea() + { + } + + public AccessibleStateSet getAccessibleStateSet() + { + return super.getAccessibleStateSet(); + } + } + + public AccessibleContext getAccessibleContext() + { + return new AccessibleAWTTextArea(); + } } Index: java/awt/TextField.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/awt/TextField.java,v retrieving revision 1.13 diff -u -r1.13 TextField.java --- java/awt/TextField.java 27 Sep 2004 15:11:46 -0000 1.13 +++ java/awt/TextField.java 23 Nov 2004 18:02:38 -0000 @@ -44,6 +44,9 @@ import java.awt.peer.TextFieldPeer; import java.util.EventListener; +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleStateSet; + /** * This class implements a single line text entry field widget * @@ -517,4 +520,22 @@ { return (ActionListener[]) getListeners (ActionListener.class); } + + protected class AccessibleAWTTextField extends AccessibleAWTTextComponent + { + protected AccessibleAWTTextField() + { + } + + public AccessibleStateSet getAccessibleStateSet() + { + return super.getAccessibleStateSet(); + } + } + + public AccessibleContext getAccessibleContext() + { + return new AccessibleAWTTextField(); + } + } // class TextField