package me.legrange.panstamp.gui.view; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import me.legrange.panstamp.Endpoint; import me.legrange.panstamp.Network; import me.legrange.panstamp.NetworkException; import me.legrange.panstamp.PanStamp; import me.legrange.panstamp.Register; /** * * @since 1.0 * @author Gideon le Grange https://github.com/GideonLeGrange */ class IconMap { static Icon getWorldIcon() { return getIcon(WORLD); } static Icon getNetworkIcon(Network nw) { return getIcon(NETWORK); } static Icon getPanStampIcon(PanStamp ps) { String name = PANSTAMP_UNKNOWN; try { name = (ps.getProductId() != 0) ? PANSTAMP_KNOWN : PANSTAMP_UNKNOWN; } catch (NetworkException e) { } return getIcon(name); } static Icon getRegisterIcon(Register register) { return getIcon(REGISTER); } /** * Find the most fitting icon for the given endpoint */ static Icon getEndpointIcon(Endpoint ep) { String name = ep.getName(); String val = null; if (name != null) { val = findForName(name.toLowerCase().trim()); } if (val == null) { val = ep.isOutput() ? DEFAULT_OUTPUT : DEFAULT_INPUT; } return getIcon(val); } private static Icon getIcon(String name) { ImageIcon ico = icons.get(name); if (ico == null) { try { ico = new ImageIcon(ImageIO.read(ClassLoader.getSystemResourceAsStream("images/" + name))); } catch (IOException ex) { Logger.getLogger(NetworkTreeNodeRenderer.class.getName()).log(Level.SEVERE, null, ex); } icons.put(name, ico); } return ico; } private static String findForName(String name) { String val = map.get(name); if (val == null) { int idx = name.lastIndexOf(' '); if (idx > 0) { return findForName(name.substring(0, idx).trim()); } } return val; } private static final Map<String, String> map = new HashMap<>(); static { map.put("frequency", "metronome.png"); map.put("binary", "document-binary.png"); map.put("counter", "counter.png"); map.put("voltage", "battery.png"); map.put("humidity", "water.png"); map.put("temperature", "thermometer.png"); map.put("rgblevel", "color.png"); map.put("red", "flag.png"); map.put("green", "flag-green.png"); map.put("blue", "flag-blue.png"); map.put("moisture level", "water.png"); } private static final Map<String, ImageIcon> icons = new HashMap<>(); private static final String DEFAULT_OUTPUT = "switch.png"; private static final String DEFAULT_INPUT = "light-bulb.png"; private static final String PANSTAMP_KNOWN = "radio.png"; private static final String PANSTAMP_UNKNOWN = "radio--exclamation.png"; private static final String REGISTER = "processor.png"; // private static final String STANDARD_REGISTER = "processor.png"; private static final String NETWORK = "network-wireless.png"; private static final String WORLD = "globe.png"; }