// ********************************************************************** // // <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/MouseModeButtonPanel.java,v $ // $RCSfile: MouseModeButtonPanel.java,v $ // $Revision: 1.4 $ // $Date: 2004/10/14 18:05:48 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.gui; import java.beans.PropertyChangeEvent; import java.util.HashMap; import javax.swing.ButtonGroup; import javax.swing.Icon; import javax.swing.JToggleButton; import javax.swing.JToolBar; import com.bbn.openmap.MouseDelegator; import com.bbn.openmap.event.MapMouseMode; /** * The MouseModeButtonPanel is an alternative to the MouseModePanel. Instead of * providing an option menu listing all the MouseModes, a series of buttons for * all the MouseModes is displayed. * * The MouseModeButtonPanel asks the MapMouseModes for their GUI icons. If they * don't have one, their ID Strin will be used. */ public class MouseModeButtonPanel extends MouseModePanel { private JToolBar toolBar = null; /** for initialization, false */ protected boolean floatable = false; /** * to turn a button on when the active mouse mode changes behind the scenes. */ protected HashMap buttonSet = new HashMap(); protected JToggleButton enabledButton = null; public final static String defaultKey = "mousemodebuttonpanel"; public MouseModeButtonPanel() { super(); setKey(defaultKey); } /** * Method overrides MouseModePane.setPanel. Construct the toolbar buttons * from the mouse modes that are handled by the delegator. */ protected void setPanel(MouseDelegator md) { if (toolBar != null) { remove(toolBar); // remove it } reset(); if (md == null) { return; } toolBar = new JToolBar(); // Create a new one toolBar.setFloatable(floatable); String activeMode = md.getActiveMouseModeID(); ButtonGroup bg = new ButtonGroup(); MapMouseMode[] modes = md.getMouseModes(); for (int i = 0; i < modes.length; i++) { String modeStr = modes[i].getID(); boolean on = (modeStr == null && activeMode == null) || (modeStr != null && modeStr.equals(activeMode)); JToggleButton btn; Icon icon = modes[i].getGUIIcon(); if (icon != null) { btn = new JToggleButton(icon, on); } else { btn = new JToggleButton(modeStr, on); } if (on) { enabledButton = btn; } buttonSet.put(modeStr, btn); bg.add(btn); btn.setToolTipText(modes[i].getPrettyName()); toolBar.add(btn); btn.setActionCommand(modeStr); btn.addActionListener(this); btn.setVisible(modes[i].isVisible()); } this.add(toolBar); this.revalidate(); } // End of setPanel() /** * actionPerformed - Handle the mouse clicks on the button(s) */ public void actionPerformed(java.awt.event.ActionEvent e) { if (mouseDelegator == null) { return; } else { mouseDelegator.setActiveMouseModeWithID(e.getActionCommand()); } } /** * Set whether the MouseModeButtonPanel can be detached. */ public void setFloatable(boolean floatable) { this.floatable = floatable; toolBar.setFloatable(floatable); } /** * Get whether the MouseModeButtonPanel can be detached. */ public boolean getFloatable() { return toolBar.isFloatable(); } // ////////////////////////////////////////////////////////////////////////// /** * propertyChange - Listen for changes to the active mouse mode and for any * changes to the list of available mouse modes. */ public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName() == MouseDelegator.ActiveModeProperty) { String mmID = ((MapMouseMode) evt.getNewValue()).getID(); JToggleButton btn = (JToggleButton) buttonSet.get(mmID); if (btn != null) { btn.setSelected(true); enabledButton = btn; } } else if (evt.getPropertyName() == MouseDelegator.MouseModesProperty) { toolBar.removeAll(); setPanel(mouseDelegator); } } // End of propertyChange() public void reset() { if (toolBar != null) { remove(toolBar); toolBar = null; } enabledButton = null; buttonSet.clear(); } }