package me.legrange.panstamp.gui.view; import java.awt.Color; import me.legrange.panstamp.gui.model.Model; import me.legrange.panstamp.gui.model.Format; import java.awt.Component; import java.awt.FlowLayout; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.border.EmptyBorder; import javax.swing.tree.DefaultTreeCellRenderer; import me.legrange.panstamp.Endpoint; import me.legrange.panstamp.NetworkException; import me.legrange.panstamp.gui.model.tree.EndpointNode; import me.legrange.panstamp.gui.model.tree.NetworkNode; import me.legrange.panstamp.gui.model.tree.NetworkTreeNode; import me.legrange.panstamp.gui.model.tree.PanStampNode; import me.legrange.panstamp.gui.model.tree.RegisterNode; import me.legrange.panstamp.gui.model.tree.WorldNode; /** * * @author gideon */ public class NetworkTreeNodeRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof NetworkTreeNode) { try { NetworkTreeNode node = (NetworkTreeNode) value; Component com; switch (node.getType()) { case ENDPOINT: com = renderEndpoint((EndpointNode) node); break; case REGISTER: com = renderRegister((RegisterNode) node); break; case PANSTAMP: com = renderPanStamp((PanStampNode) node); break; case NETWORK: com = renderNetwork((NetworkNode) node); break; case WORLD: com = renderWorld((WorldNode) node); break; default: com = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); break; } JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); panel.add(com); panel.setBackground(sel ? backgroundSelectionColor : tree.getBackground()); com.setForeground(sel ? textSelectionColor : textNonSelectionColor); return panel; } catch (NetworkException ex) { Logger.getLogger(NetworkTreeNodeRenderer.class.getName()).log(Level.SEVERE, null, ex); } } return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); } public NetworkTreeNodeRenderer(Model model, View view) { this.model = model; this.view = view; } private Component renderEndpoint(EndpointNode epn) throws NetworkException { return new JLabel(epn.toString(), IconMap.getEndpointIcon(epn.getEndpoint()), JLabel.LEADING); } private Component renderRegister(RegisterNode rn) { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); panel.setOpaque(false); panel.setBackground(Color.WHITE); panel.setBorder(new EmptyBorder(0, 0, 0, 0)); panel.add(new JLabel(IconMap.getRegisterIcon(rn.getRegister()))); panel.add(new JLabel(rn.toString())); return panel; } private Component renderPanStamp(PanStampNode psn) { return new JLabel(psn.toString(), IconMap.getPanStampIcon(psn.getPanStamp()), JLabel.LEADING); } private Component renderNetwork(NetworkNode gn) { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); panel.setBackground(Color.WHITE); panel.add(new JLabel(IconMap.getNetworkIcon(gn.getNetwork()), JLabel.LEADING)); panel.add(new JLabel(gn.toString())); panel.setBorder(new EmptyBorder(0, 0, 0, 0)); panel.setOpaque(false); return panel; } private Component renderWorld(WorldNode wn) { return new JLabel(wn.toString(), IconMap.getWorldIcon(), JLabel.LEADING); } private String formatValue(Endpoint ep) throws NetworkException { return Format.formatValue(ep); } private final Model model; private final View view; }