/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ package tufts.vue.gui; import tufts.vue.DEBUG; import javax.swing.Icon; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JMenuItem; /** * An exension of MenuButton that specifically handles pop-up menu * for a specific VUE LWComponent property (LWKey property) * * @version $Revision: 1.18 $ / $Date: 2006/01/20 17:17:29 $ / $Author: sfraize $ * @author Scott Fraize */ public class VuePopupMenu<T> extends MenuButton<T> { public VuePopupMenu(Object propertyKey, Object[] valuesOrActions) { setPropertyKey(propertyKey); buildMenu(valuesOrActions); displayValue(getMenuValueAt(0)); setName(propertyKey.toString()); } public T getMenuValueAt(int index) { JComponent c = (JComponent) mPopup.getComponent(0); return (T) c.getClientProperty(ValueKey); } public void displayValue(T newValue) { if (DEBUG.TOOL) System.out.println(this + " displayValue " + newValue); if (mCurrentValue == null || !mCurrentValue.equals(newValue)) { mCurrentValue = newValue; Icon i = getIconForPropertyValue(newValue); if (i != null) setButtonIcon(i); } } public Icon getIconForPropertyValue(T value) { int count = mPopup.getComponentCount(); for (int i = 0; i < count; i++) { JComponent c = (JComponent) mPopup.getComponent(i); if (c instanceof JMenuItem) { JMenuItem mi = (JMenuItem) c; //if (mi.getClientProperty(ValueKey).equals(value)) if (value != null && value.equals(mi.getClientProperty(ValueKey))) return mi.getIcon(); } } return null; } }