// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.lakewalker;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JComboBox;
import javax.swing.JLabel;
/**
* A Configurer that returns a String from among a list of possible values
*/
public class StringEnumConfigurer extends Configurer {
protected String[] validValues;
protected String[] transValues;
protected JComboBox<String> box;
protected Box panel;
protected String tooltipText = "";
public StringEnumConfigurer(String key, String name, String[] validValues) {
super(key, name);
this.validValues = validValues;
transValues = new String[validValues.length];
for (int i = 0; i < validValues.length; ++i) {
transValues[i] = tr(validValues[i]);
}
}
public StringEnumConfigurer(String[] validValues) {
this(null, "", validValues);
}
public void setToolTipText(String s) {
tooltipText = s;
}
@Override
public Component getControls() {
if (panel == null) {
panel = Box.createHorizontalBox();
panel.add(new JLabel(name));
box = new JComboBox<>(transValues);
box.setToolTipText(tooltipText);
box.setMaximumSize(new Dimension(box.getMaximumSize().width, box.getPreferredSize().height));
setValue(value);
box.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
noUpdate = true;
setValue(box.getSelectedIndex());
noUpdate = false;
}
});
panel.add(box);
}
return panel;
}
@Override
public void setValue(Object o) {
if (o == null)
o = 0;
super.setValue(o);
if (!noUpdate && box != null)
box.setSelectedIndex((Integer) o);
}
@Override
public void setValue(String s) {
Integer n = 0;
for (int i = 0; i < transValues.length; ++i) {
if (transValues[i].equals(s) || validValues[i].equals(s)) {
n = i;
break;
}
}
setValue(n);
}
@Override
public String getValueString() {
return validValues[(Integer) value];
}
}