// BlogBridge -- RSS feed reader, manager, and web based service // Copyright (C) 2002-2006 by R. Pito Salas // // This program 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 of the License, or (at your option) any later version. // // This program 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 this program; // if not, write to the Free Software Foundation, Inc., 59 Temple Place, // Suite 330, Boston, MA 02111-1307 USA // // Contact: R. Pito Salas // mailto:pitosalas@users.sourceforge.net // More information: about BlogBridge // http://www.blogbridge.com // http://sourceforge.net/projects/blogbridge // // $Id: ChoiceVE.java,v 1.6 2006/05/29 12:50:08 spyromus Exp $ // package com.salas.bb.views.querybuilder.editors; import com.jgoodies.binding.value.ValueModel; import com.salas.bb.utils.i18n.Strings; import javax.swing.*; import java.awt.*; import java.util.HashMap; import java.util.Map; /** * Value editor for several choices. */ class ChoiceVE extends JComboBox implements IValueEditor { private final Map valueToHolder; /** * Creates editor with multiple choices in drop-down. * * @param labels labels. * @param values values. * @param aModel model. */ public ChoiceVE(String[] labels, String[] values, ValueModel aModel) { if (labels.length != values.length) { throw new IllegalArgumentException(Strings.error("ui.values.do.not.match.labels")); } valueToHolder = new HashMap(); ValueLabelHolder[] holders = initValueToHolder(valueToHolder, labels, values); setModel(new ChoiceModel(holders, aModel)); } private static ValueLabelHolder[] initValueToHolder(Map map, String[] labels, String[] values) { ValueLabelHolder[] holders = new ValueLabelHolder[labels.length]; for (int i = 0; i < labels.length; i++) { String label = labels[i]; String value = values[i]; ValueLabelHolder holder = new ValueLabelHolder(label, value); map.put(value, holder); holders[i] = holder; } return holders; } /** * Returns the component to be used for displaying the editor. * * @return component. */ public Component getVisualComponent() { return this; } /** * Adapter of property model to combo-box model. */ private class ChoiceModel extends DefaultComboBoxModel { private ValueModel model; /** * Constructs a DefaultComboBoxModel object initialized with an array of objects. * * @param items an array of Object objects * @param aModel model. */ public ChoiceModel(final Object items[], ValueModel aModel) { super(items); model = aModel; } /** * Returns currently selected item according to the model. * * @return selected item. */ public Object getSelectedItem() { Object value = model.getValue(); return valueToHolder.get(value); } /** * Set the value of the selected item. The selected item may be null. <p> * * @param anObject The combo box value or null for no selection. */ public void setSelectedItem(Object anObject) { ValueLabelHolder holder = (ValueLabelHolder)anObject; model.setValue(holder.value); } } /** * Simple holder for value-label pair. */ private static class ValueLabelHolder { private String value; private String label; /** * Creates value label object. * * @param aLabel label. * @param aValue value. */ public ValueLabelHolder(String aLabel, String aValue) { label = aLabel; value = aValue; } /** * Returns a string representation of the object. * * @return a string representation of the object. */ public String toString() { return label; } } }