diff options
Diffstat (limited to 'libjava/java/awt/CheckboxMenuItem.java')
-rw-r--r-- | libjava/java/awt/CheckboxMenuItem.java | 379 |
1 files changed, 255 insertions, 124 deletions
diff --git a/libjava/java/awt/CheckboxMenuItem.java b/libjava/java/awt/CheckboxMenuItem.java index 007d3dc..bdede7b 100644 --- a/libjava/java/awt/CheckboxMenuItem.java +++ b/libjava/java/awt/CheckboxMenuItem.java @@ -1,134 +1,265 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation +/* CheckboxMenuItem.java -- A menu option with a checkbox on it. + Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. - This file is part of libgcj. +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., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ package java.awt; + import java.awt.peer.CheckboxMenuItemPeer; -import java.awt.event.ItemListener; +import java.awt.peer.MenuItemPeer; +import java.awt.peer.MenuComponentPeer; import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +/** + * This class implements a menu item that has a checkbox on it indicating + * the selected state of some option. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Tom Tromey <tromey@redhat.com> + */ +public class CheckboxMenuItem extends MenuItem implements ItemSelectable, + java.io.Serializable +{ -/** This implements a menu item which keeps track of a boolean state. - * @author Tom Tromey <tromey@redhat.com> - * @date December 25, 2000 +/* + * Static Variables */ -public class CheckboxMenuItem extends MenuItem implements ItemSelectable + +// Serialization constant +private static final long serialVersionUID = 6190621106981774043L; + +/* + * Instance Variables + */ + +/** + * @serial The state of the checkbox, with <code>true</code> being on and + * <code>false</code> being off. + */ +private boolean state; + +// List of registered ItemListeners +private transient ItemListener item_listeners; + +/*************************************************************************/ + +/* + * Constructors + */ + +/** + * Initializes a new instance of <code>CheckboxMenuItem</code> with no + * label and an initial state of off. + */ +public +CheckboxMenuItem() { - /** Create a new CheckboxMenuItem. - * @param label The checkbox label. A null value is the same as ""; - * null is the default. - * @param state The initial check state; defaults to false. - */ - public CheckboxMenuItem () - { - this (null, false); - } - - public CheckboxMenuItem (String label) - { - this (label, false); - } - - public CheckboxMenuItem (String label, boolean state) - { - this.label = label; - this.state = state; - } - - /** Add a listener for item events. - * @param listener The listener to add. - */ - public synchronized void addItemListener (ItemListener listener) - { - listeners = AWTEventMulticaster.add (listeners, listener); - } - - /** This creates the component's peer. */ - public void addNotify () - { - if (peer != null) - { - // This choice of toolkit seems unsatisfying, but I'm not sure - // what else to do. - peer = Toolkit.getDefaultToolkit ().createCheckboxMenuItem (this); - } - super.addNotify (); - } - - /** Returns this checkbox's label if this checkbox is selected. */ - public Object[] getSelectedObjects () - { - Object[] r; - if (state) - { - r = new Object[1]; - r[0] = label; - } - else - r = new Object[0]; - return r; - } - - /** Returns the current state of this checkbox. */ - public boolean getState () - { - return state; - } - - /** Generates a String representation of this Checkbox's state. */ - public String paramString () - { - return ("[" + getClass ().getName () - + "state=" + state + "," - + "label=" + label + "]"); - } - - /** Process an event for this Checkbox. - * @param event The event the process. - */ - protected void processEvent (AWTEvent event) - { - if (event instanceof ItemEvent) - processItemEvent ((ItemEvent) event); - else - super.processEvent (event); - } - - /** Process an item event for this Checkbox. - * @param event The ItemEvent to process - */ - protected void processItemEvent (ItemEvent event) - { - if (listeners != null) - listeners.itemStateChanged (event); - } - - /** Remove an item listener. - * @param listener Item listener to remove. - */ - public synchronized void removeItemListener (ItemListener listener) - { - listeners = AWTEventMulticaster.remove (listeners, listener); - } - - /** Set the checkbox's state. - * @param state The new state. - */ - public void setState (boolean state) - { - this.state = state; - if (peer != null) - { - CheckboxMenuItemPeer cp = (CheckboxMenuItemPeer) peer; - cp.setState (state); - } - } - - // Private state. - String label; - boolean state; - ItemListener listeners; + this("", false); } + +/*************************************************************************/ + +/** + * Initializes a new instance of <code>CheckboxMenuItem</code> with the + * specified label and an initial state of off. + * + * @param label The label of the menu item. + */ +public +CheckboxMenuItem(String label) +{ + this(label, false); +} + +/*************************************************************************/ + +/** + * Initializes a new instance of <code>CheckboxMenuItem</code> with the + * specified label and initial state. + * + * @param label The label of the menu item. + * @param state The initial state of the menu item, where <code>true</code> + * is on, and <code>false</code> is off. + */ +public +CheckboxMenuItem(String label, boolean state) +{ + super(label); + this.state = state; +} + +/*************************************************************************/ + +/* + * Instance Methods + */ + +/** + * Returns the state of this menu item. + * + * @return The state of this menu item. + */ +public boolean +getState() +{ + return(state); +} + +/*************************************************************************/ + +/** + * Sets the state of this menu item. + * + * @param state The initial state of the menu item, where <code>true</code> + * is on, and <code>false</code> is off. + */ +public synchronized void +setState(boolean state) +{ + this.state = state; + if (peer != null) + { + CheckboxMenuItemPeer cp = (CheckboxMenuItemPeer) peer; + cp.setState (state); + } +} + +/*************************************************************************/ + +/** + * Returns an array of length 1 with the menu item label for this object + * if the state is on. Otherwise <code>null</code> is returned. + * + * @param An array with this menu item's label if it has a state of on, + * or <code>null</code> otherwise. + */ +public Object[] +getSelectedObjects() +{ + if (state == false) + return(null); + + Object[] obj = new Object[1]; + obj[0] = getLabel(); + + return(obj); +} + +/*************************************************************************/ + +/** + * Create's this object's native peer + */ +public synchronized void +addNotify() +{ + if (peer != null) + { + // This choice of toolkit seems unsatisfying, but I'm not sure + // what else to do. + peer = getToolkit().createCheckboxMenuItem(this); + } + super.addNotify (); +} + +/*************************************************************************/ + +/** + * Adds the specified listener to the list of registered item listeners + * for this object. + * + * @param listener The listener to add. + */ +public synchronized void +addItemListener(ItemListener listener) +{ + item_listeners = AWTEventMulticaster.add(item_listeners, listener); + + enableEvents(AWTEvent.ITEM_EVENT_MASK); +} + +/*************************************************************************/ + +/** + * Removes the specified listener from the list of registered item + * listeners for this object. + * + * @param listener The listener to remove. + */ +public synchronized void +removeItemListener(ItemListener listener) +{ + item_listeners = AWTEventMulticaster.remove(item_listeners, listener); +} + +/*************************************************************************/ + +/** + * Processes the specified event by calling <code>processItemEvent()</code> + * if it is an instance of <code>ItemEvent</code> or calling the superclass + * method otherwise. + * + * @param event The event to process. + */ +protected void +processEvent(AWTEvent event) +{ + if (event instanceof ItemEvent) + processItemEvent((ItemEvent)event); + else + super.processEvent(event); +} + +/*************************************************************************/ + +/** + * Processes the specified event by dispatching it to any registered listeners. + * + * @param event The event to process. + */ +protected void +processItemEvent(ItemEvent event) +{ + if (item_listeners != null) + item_listeners.itemStateChanged(event); +} + +/*************************************************************************/ + +/** + * Returns a debugging string for this object. + * + * @return A debugging string for this object. + */ +public String +paramString() +{ + return ("label=" + getLabel() + ",state=" + state + + "," + super.paramString()); +} + +} // class CheckboxMenuItem + |