/** (C) 1999 World Xiangqi League, Confidential, All Rights Reserved */

import java.awt.*;

/** RadioButton manages CheckboxMenuItems similar to how
 * CheckboxGroup manages CheckboxButtons.
 */
class RadioMenu extends Menu {
  private int lastSelected;
  
  RadioMenu(String label, String[] items, int defaultItem, Menu parent) {
    super(label);
    for (int i=0; i<items.length; i++) {
      CheckboxMenuItem item = new CheckboxMenuItem(items[i]);
      if (i==defaultItem)
	item.setState(true);
      add(item);
    }
    parent.add(this);
  }

  public String toString() {
    return "RadioMenu["+getLabel()+"]";
  }

  /** Set the checked item to the one at INDEX. */
  public void setChecked(int index) {
    for (int i=0; i<this.countItems(); i++) {
      CheckboxMenuItem item = (CheckboxMenuItem)this.getItem(i);
      item.setState(i==index);
    }
  }

  /** Set the checked item to the one matching LABEL. */
  public void setChecked(String label) {
    setChecked(index(label));
  }

  /** Return index of item with LABEL */
  public int index(String matchLabel) {
    for (int i=0; i<this.countItems(); i++) {
      CheckboxMenuItem menuItem = (CheckboxMenuItem)this.getItem(i);
      if (matchLabel.equals(menuItem.getLabel()))
	return i;
    }
    return -1;
  }

  /** Return label of currently selected item. */
  public String selected() {
    for (int i=0; i<this.countItems(); i++) {
      CheckboxMenuItem menuItem = (CheckboxMenuItem)this.getItem(i);
      if (menuItem.getState())
	return menuItem.getLabel();
    }
    Club.debug("Warning: no menu checked under "+this);
    return null;
  }

  public int selectedInt() {
    return Club.atoi(selected());
  }

  /** Call explicitly to test whether a RadioMenu instance
   * wants this event. If so, update the menu and return true.
   */
  public boolean handle(Event event) {
    // Pieces,Background,Level,Timer,Font,Size
    //Club.debugEvent(this.toString(),event);
    if (event.id!=Event.ACTION_EVENT ||
	((event.target instanceof CheckboxMenuItem)==false))
      return false;

    CheckboxMenuItem target = (CheckboxMenuItem)event.target;
    if (target.getParent()!=this)
      return false;

    lastSelected = -1;
    for (int i=0; i<countItems(); i++) {
      CheckboxMenuItem item = (CheckboxMenuItem)getItem(i);
      //Club.verbose("RadioMenu.handle "+i+" "+item+" "+target);
      if (lastSelected<0 && item.getState() && item!=target) {
	lastSelected = i;
      }
      item.setState(item==target);
    }
    //debug("RadioMenu.handle");
    return true;
  }

  public void debug(String message) {
    Club.debug(message+" RadioMenu "+getLabel()+" "+lastSelected);
    for (int i=0; i<countItems(); i++) {
      CheckboxMenuItem item = (CheckboxMenuItem)getItem(i);
      Club.verbose(""+item+" "+item.getState());
    }
  }
  
  /** Reset checked to value before most recent menu selection. */
  public void reset() {
    setChecked(lastSelected);
  }
}
