package com.revolsys.swing.map.component;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import org.jdesktop.swingx.VerticalLayout;
import com.revolsys.swing.component.ValueField;
import com.revolsys.swing.field.ComboBox;
import com.revolsys.swing.map.layer.record.style.MarkerStyle;
import com.revolsys.swing.map.layer.record.style.marker.Marker;
import com.revolsys.swing.map.symbol.SymbolLibrary;
import com.revolsys.util.Property;
public class MarkerField extends ValueField implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private static final ListCellRenderer<Marker> renderer = new ListCellRenderer<Marker>() {
DefaultListCellRenderer renderer = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(final JList<? extends Marker> list,
final Marker marker, final int index, final boolean isSelected, final boolean cellHasFocus) {
final Component component = this.renderer.getListCellRendererComponent(list, marker, index,
isSelected, cellHasFocus);
this.renderer.setBorder(BorderFactory.createEmptyBorder(3, 5, 3, 5));
this.renderer.setIcon(marker.newIcon(new MarkerStyle()));
return component;
}
};
private final ComboBox<Marker> comboBox = ComboBox.newComboBox("marker",
SymbolLibrary.getAllMarkers(), renderer);
public MarkerField(final String fieldName, final Object fieldValue) {
super(fieldName, fieldValue);
setLayout(new VerticalLayout());
add(this.comboBox);
Property.addListener(this.comboBox, "marker", this);
this.comboBox.setSelectedItem(fieldValue);
}
public Marker getMarker() {
return (Marker)getFieldValue();
}
@Override
public void propertyChange(final PropertyChangeEvent event) {
if (event.getSource() == this.comboBox) {
final Object selectedItem = this.comboBox.getSelectedItem();
setFieldValue(selectedItem);
}
}
}