// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.turnrestrictions.editor;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.Component;
import java.awt.Image;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.UIManager;
import org.openstreetmap.josm.data.Preferences;
import org.openstreetmap.josm.plugins.turnrestrictions.preferences.PreferenceKeys;
import org.openstreetmap.josm.tools.ImageProvider;
public class TurnRestrictionTypeRenderer extends JLabel implements ListCellRenderer<Object> {
final Map<TurnRestrictionType, ImageIcon> icons = new HashMap<>();
private String iconSet = "set-a";
/**
* Loads the image icons for the rendered turn restriction types
*/
protected void loadImages() {
for (TurnRestrictionType type: TurnRestrictionType.values()) {
try {
ImageIcon icon = new ImageIcon(ImageProvider.get("types/" + iconSet,
type.getTagValue()).getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH));
icons.put(type, icon);
} catch (Exception e) {
System.out.println(tr("Warning: failed to load icon for turn restriction type ''{0}''", type.getTagValue()));
e.printStackTrace();
}
}
}
public TurnRestrictionTypeRenderer() {
setOpaque(true);
loadImages();
}
protected void renderColors(boolean isSelected) {
if (isSelected) {
setBackground(UIManager.getColor("List.selectionBackground"));
setForeground(UIManager.getColor("List.selectionForeground"));
} else {
setBackground(UIManager.getColor("List.background"));
setForeground(UIManager.getColor("List.foreground"));
}
}
/**
* Initializes the set of icons used from the preference key
* {@link PreferenceKeys#ROAD_SIGNS}.
*
* @param prefs the JOSM preferences
*/
public void initIconSetFromPreferences(Preferences prefs) {
iconSet = prefs.get(PreferenceKeys.ROAD_SIGNS, "set-a");
iconSet = iconSet.trim().toLowerCase();
if (!iconSet.equals("set-a") && !iconSet.equals("set-b")) {
iconSet = "set-a";
}
loadImages();
}
@Override
public Component getListCellRendererComponent(JList<? extends Object> list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
renderColors(isSelected);
if (value == null) {
setText(tr("please select a turn restriction type"));
setIcon(null);
} else if (value instanceof String) {
setText((String) value);
setIcon(null); // FIXME: special icon for non-standard types?
} else if (value instanceof TurnRestrictionType) {
TurnRestrictionType type = (TurnRestrictionType) value;
setText(type.getDisplayName());
setIcon(icons.get(type));
}
return this;
}
}