// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/gui/menu/MouseModeMenu.java,v $
// $RCSfile: MouseModeMenu.java,v $
// $Revision: 1.6 $
// $Date: 2004/10/14 18:05:50 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.gui.menu;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButtonMenuItem;
import com.bbn.openmap.MouseDelegator;
import com.bbn.openmap.event.MapMouseMode;
import com.bbn.openmap.gui.AbstractOpenMapMenu;
import com.bbn.openmap.util.Debug;
/**
* It provides GUI based on Mouse modes available from MouseDelegator
* object
*/
public class MouseModeMenu extends AbstractOpenMapMenu implements
PropertyChangeListener, ActionListener {
public static final String defaultText = "Mouse Mode";
public final static transient String mouseModeCmd = "setMouseMode";
protected transient MouseDelegator mouseDelegator = null;
// mouse mode widgets
protected transient JRadioButtonMenuItem[] mouseModeButtons = new JRadioButtonMenuItem[0];
protected transient ButtonGroup group2 = null;
public MouseModeMenu() {
super();
setText(i18n.get(this, "mouseModeMenu", defaultText));
addActionListener(this);
}
/**
* Sets up the MouseModes submenu.
*
* @param md MouseDelegator
*/
public void setMouseDelegator(MouseDelegator md) {
mouseDelegator = md;
if (mouseDelegator != null) {
mouseDelegator.addPropertyChangeListener(this);
MapMouseMode[] modes = mouseDelegator.getMouseModes();
String activeMode = mouseDelegator.getActiveMouseModeID();
Debug.message("mousemodemenuitem",
"MouseModeMenuItem.setMouseDelegator MouseDelegator has "
+ modes.length + " modes");
setUpItems(modes, activeMode);
}
}
public void unsetMouseDelegator(MouseDelegator md) {
if (md != null) {
mouseDelegator.removePropertyChangeListener(this);
if (mouseModeButtons != null) {
for (int mms = 0; mms < mouseModeButtons.length; mms++) {
mouseModeButtons[mms].removeActionListener(this);
group2.remove(mouseModeButtons[mms]);
}
}
}
group2 = null;
mouseModeButtons = null;
mouseDelegator = null;
}
protected void setUpItems(MapMouseMode[] modes, String activeMode) {
if (group2 == null) {
group2 = new ButtonGroup();
}
mouseModeButtons = new JRadioButtonMenuItem[modes.length];
for (int mms = 0; mms < modes.length; mms++) {
Debug.message("mousemodemenuitem",
"MouseModeMenuItem.setUpItems adding " + modes[mms].getID());
mouseModeButtons[mms] = (JRadioButtonMenuItem) this.add(new JRadioButtonMenuItem(modes[mms].getPrettyName()));
mouseModeButtons[mms].setActionCommand(mouseModeCmd);
mouseModeButtons[mms].setName(modes[mms].getID());
mouseModeButtons[mms].addActionListener(this);
mouseModeButtons[mms].setVisible(modes[mms].isVisible());
group2.add(mouseModeButtons[mms]);
if ((activeMode != null) && activeMode.equals(modes[mms].getID())) {
mouseModeButtons[mms].setSelected(true);
}
}
}
/**
* ActionListener interface.
*
* @param e ActionEvent
*/
public void actionPerformed(java.awt.event.ActionEvent e) {
String command = e.getActionCommand();
if (command.equals(mouseModeCmd)) {
JRadioButtonMenuItem rb = (JRadioButtonMenuItem) (e.getSource());
mouseDelegator.setActiveMouseModeWithID(rb.getName());
}
}
/**
* This method gets called when a bound property is changed.
* <p>
*
* @param evt A PropertyChangeEvent object describing the event
* source and the property that has changed.
*/
public void propertyChange(PropertyChangeEvent evt) {
Debug.message("mousemodemenuitem", "MouseModeMenuItem.propertyChange()");
if (evt.getPropertyName() == MouseDelegator.ActiveModeProperty) {
// Mark the radio button representing the new mode as
// active
String mmID = ((MapMouseMode) evt.getNewValue()).getID();
for (int i = 0; i < mouseModeButtons.length; i++) {
//System.out.println(mmID + " "
// +mouseModeButtons[i].getName());
if (mouseModeButtons[i].getName().equals(mmID)) {
mouseModeButtons[i].setSelected(true);
//System.out.println("MouseModeMenu: New Active
// Mode " + mmID);
break;
}
}
}
else if (evt.getPropertyName() == MouseDelegator.MouseModesProperty) {
// Redo the whole submenu
for (int i = 0; i < mouseModeButtons.length; i++) {
remove(mouseModeButtons[i]);
}
MapMouseMode[] modes = mouseDelegator.getMouseModes();
String activeMode = mouseDelegator.getActiveMouseModeID();
setUpItems(modes, activeMode);
}
}
/**
* Called when a component that is needed, and not available with
* an appropriate iterator from the BeanContext. This lets this
* object hook up with what it needs.
*/
public void findAndInit(Object someObj) {
if (someObj instanceof MouseDelegator) {
// do the initializing that need to be done here
Debug.message("mousemodemenuitem",
"MouseModeMenuItem found a MouseDelegator.");
setMouseDelegator((MouseDelegator) someObj);
}
}
/**
* AbstractOpenMapMenu method. Called when an objects have been
* removed from the parent BeanContext.
*/
public void findAndUnInit(Object someObj) {
if (someObj instanceof MouseDelegator) {
// do the initializing that need to be done here
Debug.message("mousemodemenuitem",
"MouseModeMenuItem removing MouseDelegator.");
setMouseDelegator(null);
}
}
}