mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			351 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			351 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
/* JToggleButton.java --
 | 
						|
   Copyright (C) 2002, 2004, 2005, 2006,  Free Software Foundation, Inc.
 | 
						|
 | 
						|
This file is part of GNU Classpath.
 | 
						|
 | 
						|
GNU Classpath is free software; you can redistribute it and/or modify
 | 
						|
it under the terms of the GNU General Public License as published by
 | 
						|
the Free Software Foundation; either version 2, or (at your option)
 | 
						|
any later version.
 | 
						|
 | 
						|
GNU Classpath 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
 | 
						|
General Public License for more details.
 | 
						|
 | 
						|
You should have received a copy of the GNU General Public License
 | 
						|
along with GNU Classpath; see the file COPYING.  If not, write to the
 | 
						|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
						|
02110-1301 USA.
 | 
						|
 | 
						|
Linking this library statically or dynamically with other modules is
 | 
						|
making a combined work based on this library.  Thus, the terms and
 | 
						|
conditions of the GNU General Public License cover the whole
 | 
						|
combination.
 | 
						|
 | 
						|
As a special exception, the copyright holders of this library give you
 | 
						|
permission to link this library with independent modules to produce an
 | 
						|
executable, regardless of the license terms of these independent
 | 
						|
modules, and to copy and distribute the resulting executable under
 | 
						|
terms of your choice, provided that you also meet, for each linked
 | 
						|
independent module, the terms and conditions of the license of that
 | 
						|
module.  An independent module is a module which is not derived from
 | 
						|
or based on this library.  If you modify this library, you may extend
 | 
						|
this exception to your version of the library, but you are not
 | 
						|
obligated to do so.  If you do not wish to do so, delete this
 | 
						|
exception statement from your version. */
 | 
						|
 | 
						|
 | 
						|
package javax.swing;
 | 
						|
 | 
						|
import java.awt.event.ActionEvent;
 | 
						|
import java.awt.event.ItemEvent;
 | 
						|
import java.awt.event.ItemListener;
 | 
						|
 | 
						|
import javax.accessibility.Accessible;
 | 
						|
import javax.accessibility.AccessibleContext;
 | 
						|
import javax.accessibility.AccessibleRole;
 | 
						|
import javax.accessibility.AccessibleState;
 | 
						|
import javax.swing.plaf.ButtonUI;
 | 
						|
 | 
						|
/**
 | 
						|
 * The <code>JToggleButton</code> component provides a stateful button,
 | 
						|
 * which can be either selected or unselected.  This provides the basis
 | 
						|
 * for the implementations of radio buttons (<code>JRadioButton</code>)
 | 
						|
 * and check boxes (<code>JCheckBox</code>).
 | 
						|
 *
 | 
						|
 * @author Michael Koch  (konqueror@gmx.de)
 | 
						|
 * @author Graydon Hoare  (graydon@redhat.com)
 | 
						|
 * @author Andrew John Hughes  (gnu_andrew@member.fsf.org)
 | 
						|
 * @see JRadioButton
 | 
						|
 * @see JCheckBox
 | 
						|
 * @since 1.2
 | 
						|
 */
 | 
						|
public class JToggleButton extends AbstractButton implements Accessible
 | 
						|
{
 | 
						|
  /**
 | 
						|
   * This class provides accessibility support for the toggle button.
 | 
						|
   */
 | 
						|
  protected class AccessibleJToggleButton
 | 
						|
    extends AccessibleAbstractButton
 | 
						|
    implements ItemListener
 | 
						|
  {
 | 
						|
    private static final long serialVersionUID = -8652952712161229225L;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor for the accessible toggle button.
 | 
						|
     */
 | 
						|
    public AccessibleJToggleButton()
 | 
						|
    {
 | 
						|
      super();
 | 
						|
      /* Register the accessible toggle button as a listener for item events */
 | 
						|
      addItemListener(this);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the accessible role for the toggle button.
 | 
						|
     *
 | 
						|
     * @return An instance of <code>AccessibleRole</code>, describing
 | 
						|
     *         the role of the toggle button.
 | 
						|
     */
 | 
						|
    public AccessibleRole getAccessibleRole()
 | 
						|
    {
 | 
						|
      return AccessibleRole.TOGGLE_BUTTON;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Monitors the toggle button for state changes and fires accessible
 | 
						|
     * property change events when they occur.
 | 
						|
     *
 | 
						|
     * @param event the event that occurred.
 | 
						|
     */
 | 
						|
    public void itemStateChanged(ItemEvent event)
 | 
						|
    {
 | 
						|
        /* Fire a state property change event as the button's state has changed */
 | 
						|
        if (event.getStateChange() == ItemEvent.SELECTED)
 | 
						|
          {
 | 
						|
            /* State has changed from unselected (null) to selected */
 | 
						|
            firePropertyChange(ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.SELECTED);
 | 
						|
          }
 | 
						|
        else
 | 
						|
          {
 | 
						|
            /* State has changed from selected to unselected (null) */
 | 
						|
            firePropertyChange(ACCESSIBLE_STATE_PROPERTY, AccessibleState.ENABLED, null);
 | 
						|
          }
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * The model handles the storage and maintenance of the state of
 | 
						|
   * the toggle button.  This follows the same paradigm (the MVC
 | 
						|
   * or Model-View-Controller design pattern) employed by
 | 
						|
   * other Swing components, where the data associated with a component
 | 
						|
   * is stored separately from the display aspects.
 | 
						|
   */
 | 
						|
  public static class ToggleButtonModel extends DefaultButtonModel
 | 
						|
  {
 | 
						|
    /**
 | 
						|
     * Compatible with Sun's JDK.
 | 
						|
     */
 | 
						|
    private static final long serialVersionUID = -1589950750899943974L;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the pressed state of the button.  The selected state
 | 
						|
     * of the button also changes follwing the button being pressed.
 | 
						|
     *
 | 
						|
     * @param p true if the button is pressed down.
 | 
						|
     */
 | 
						|
    public void setPressed(boolean p)
 | 
						|
    {
 | 
						|
      // cannot change PRESSED state unless button is enabled
 | 
						|
      if (! isEnabled())
 | 
						|
        return;
 | 
						|
 | 
						|
      // if this call does not represent a CHANGE in state, then return
 | 
						|
      if ((p && isPressed()) || (!p && !isPressed()))
 | 
						|
        return;
 | 
						|
 | 
						|
      // The JDK first fires events in the following order:
 | 
						|
      // 1. ChangeEvent for selected
 | 
						|
      // 2. ChangeEvent for pressed
 | 
						|
      // 3. ActionEvent
 | 
						|
      // So do we.
 | 
						|
 | 
						|
      // setPressed(false) == mouse release on us,
 | 
						|
      // if we were armed, we flip the selected state.
 | 
						|
      if (!p && isArmed())
 | 
						|
        {
 | 
						|
          setSelected(! isSelected());
 | 
						|
        }
 | 
						|
 | 
						|
      // make the change
 | 
						|
      if (p)
 | 
						|
        stateMask = stateMask | PRESSED;
 | 
						|
      else
 | 
						|
        stateMask = stateMask & (~PRESSED);
 | 
						|
 | 
						|
      // notify interested ChangeListeners
 | 
						|
      fireStateChanged();
 | 
						|
 | 
						|
      if (!p && isArmed())
 | 
						|
        {
 | 
						|
          fireActionPerformed(new ActionEvent(this,
 | 
						|
                                              ActionEvent.ACTION_PERFORMED,
 | 
						|
                                              actionCommand));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Checks if the button is selected.
 | 
						|
       *
 | 
						|
       * @return <code>true</code> if the button is selected.
 | 
						|
       */
 | 
						|
      public boolean isSelected()
 | 
						|
      {
 | 
						|
        return super.isSelected();
 | 
						|
      }
 | 
						|
 | 
						|
      /**
 | 
						|
       * Sets the selected state of the button.
 | 
						|
       *
 | 
						|
       * @param b true if button is selected
 | 
						|
       */
 | 
						|
      public void setSelected(boolean b)
 | 
						|
      {
 | 
						|
        super.setSelected(b);
 | 
						|
      }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Compatible with Sun's JDK.
 | 
						|
   */
 | 
						|
  private static final long serialVersionUID = -3128248873429850443L;
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an unselected toggle button with no text or icon.
 | 
						|
   */
 | 
						|
  public JToggleButton()
 | 
						|
  {
 | 
						|
    this(null, null, false);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs a toggle button using the labelling, state
 | 
						|
   * and icon specified by the supplied action.
 | 
						|
   *
 | 
						|
   * @param a the action to use to define the properties of the button.
 | 
						|
   */
 | 
						|
  public JToggleButton(Action a)
 | 
						|
  {
 | 
						|
    this();
 | 
						|
    setAction(a);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an unselected toggle button with the supplied icon
 | 
						|
   * and no text.
 | 
						|
   *
 | 
						|
   * @param icon the icon to use.
 | 
						|
   */
 | 
						|
  public JToggleButton(Icon icon)
 | 
						|
  {
 | 
						|
    this(null, icon, false);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs a toggle button with the supplied icon and state.
 | 
						|
   *
 | 
						|
   * @param icon the icon to use.
 | 
						|
   * @param selected if true, the toggle button is initially in the
 | 
						|
   *        selected state.  Otherwise, the button is unselected.
 | 
						|
   */
 | 
						|
  public JToggleButton(Icon icon, boolean selected)
 | 
						|
  {
 | 
						|
    this(null, icon, selected);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an unselected toggle button using the supplied text
 | 
						|
   * and no icon.
 | 
						|
   *
 | 
						|
   * @param text the text to use.
 | 
						|
   */
 | 
						|
  public JToggleButton(String text)
 | 
						|
  {
 | 
						|
    this(text, null, false);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs a toggle button with the supplied text and state.
 | 
						|
   *
 | 
						|
   * @param text the text to use.
 | 
						|
   * @param selected if true, the toggle button is initially in the
 | 
						|
   *        selected state.  Otherwise, the button is unselected.
 | 
						|
   */
 | 
						|
  public JToggleButton(String text, boolean selected)
 | 
						|
  {
 | 
						|
    this(text, null, selected);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs an unselected toggle button with the supplied text
 | 
						|
   * and icon.
 | 
						|
   *
 | 
						|
   * @param text the text to use.
 | 
						|
   * @param icon the icon to use.
 | 
						|
   */
 | 
						|
  public JToggleButton(String text, Icon icon)
 | 
						|
  {
 | 
						|
    this(text, icon, false);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Constructs a toggle button with the supplied text, icon and state.
 | 
						|
   *
 | 
						|
   * @param text the text to use.
 | 
						|
   * @param icon the icon to use.
 | 
						|
   * @param selected if true, the toggle button is initially in the
 | 
						|
   *        selected state.  Otherwise, the button is unselected.
 | 
						|
   */
 | 
						|
  public JToggleButton (String text, Icon icon, boolean selected)
 | 
						|
  {
 | 
						|
    super();
 | 
						|
    setModel(new ToggleButtonModel());
 | 
						|
    init(text, icon);
 | 
						|
    model.setSelected(selected);
 | 
						|
    setAlignmentX(LEFT_ALIGNMENT);
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Gets the AccessibleContext associated with this <code>JToggleButton</code>.
 | 
						|
   * The context is created, if necessary.
 | 
						|
   *
 | 
						|
   * @return the associated context
 | 
						|
   */
 | 
						|
  public AccessibleContext getAccessibleContext()
 | 
						|
  {
 | 
						|
    /* Create the context if this is the first request */
 | 
						|
    if (accessibleContext == null)
 | 
						|
      {
 | 
						|
        /* Create the context */
 | 
						|
        accessibleContext = new AccessibleJToggleButton();
 | 
						|
      }
 | 
						|
    return accessibleContext;
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a string that specifies the name of the Look and Feel
 | 
						|
   * class that renders this component.
 | 
						|
   *
 | 
						|
   * @return The Look and Feel UI class in <code>String</code> form.
 | 
						|
   */
 | 
						|
  public String getUIClassID()
 | 
						|
  {
 | 
						|
    return "ToggleButtonUI";
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * Returns a textual representation of this component for debugging.
 | 
						|
   * Users should not depend on anything as regards the content or formatting
 | 
						|
   * of this string, except for the fact that the returned string may never be
 | 
						|
   * null (only empty).
 | 
						|
   *
 | 
						|
   * @return the component in <code>String</code> form for debugging.
 | 
						|
   */
 | 
						|
  protected  String paramString()
 | 
						|
  {
 | 
						|
    return super.paramString();
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * This method resets the toggle button's UI delegate to the default UI for
 | 
						|
   * the current look and feel.
 | 
						|
   */
 | 
						|
  public void updateUI()
 | 
						|
  {
 | 
						|
    setUI((ButtonUI)UIManager.getUI(this));
 | 
						|
  }
 | 
						|
 | 
						|
}
 |