package com.framsticks.gui.view; import com.framsticks.gui.ImageProvider; import com.framsticks.gui.TreeNode; import javax.swing.*; import javax.swing.tree.DefaultTreeCellRenderer; import org.apache.log4j.Logger; import java.awt.*; /** * Renderer of Tree. Sets appropriate icons for nodes. */ @SuppressWarnings("serial") public class TreeCellRenderer extends DefaultTreeCellRenderer { private static final Logger log = Logger.getLogger(TreeCellRenderer.class); public TreeCellRenderer() { setOpenIcon(null); setClosedIcon(null); setLeafIcon(null); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { //super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, // row, hasFocus); if (value == null) { return this; } if (!(value instanceof TreeNode)) { setIcon(ImageProvider.loadImage(ImageProvider.SERVER)); setText("framsticks"); return this; } TreeNode treeNode = (TreeNode)value; assert treeNode.getFrame().isActive(); setToolTipText(treeNode.getTooltip()); setIcon(ImageProvider.loadImage(treeNode.getIconName())); setText(treeNode.getName()); return this; } public static String findIconName(String nodeName, String path) { if (nodeName == null || path == null) { log.warn("given invalid parameters: " + nodeName + " " + path); // return null; return ImageProvider.SERVER; } if (path.equals("/")) { return ImageProvider.SERVER; } if (path.endsWith("simulator")) { return ImageProvider.SIMULATOR; } if (path.endsWith("cli")) { return ImageProvider.CLI; } if (path.endsWith("world")) { return ImageProvider.WORLD; } if (path.endsWith("genepools")) { return ImageProvider.GENEPOOLS; } if (path.endsWith("populations")) { return ImageProvider.POPULATIONS; } if (path.endsWith("experiment")) { return ImageProvider.EXPERIMENT; } if (path.endsWith("stats")) { return ImageProvider.STATISTIC; } if (nodeName.equals("creatures") || path.endsWith("creatures")) { return ImageProvider.CREATURES_GROUP; } if (nodeName.equals("Favourite Fields")) { return ImageProvider.FAVORITE_FIELDS; } if (nodeName.equals("genotypes") || path.endsWith("creatures")) { return ImageProvider.GENOTYPES_GROUP; } if (nodeName.equals("parts") || path.endsWith("parts")) { return ImageProvider.PART_GROUP; } if (nodeName.equals("joints") || path.endsWith("joints")) { return ImageProvider.JOINT_GROUP; } if (nodeName.equals("neurodefs") || path.endsWith("neurodefs")) { return ImageProvider.NEURON_DEF_GROUP; } if (nodeName.equals("neuroconns") || path.endsWith("neuroconns")) { return ImageProvider.NEURON_DEF_GROUP; } if (nodeName.equals("mechparts") || path.endsWith("mechparts")) { return ImageProvider.MECH_PART_GROUP; } if (nodeName.equals("mechjoints") || path.endsWith("mechjoints")) { return ImageProvider.MECH_JOINT_GROUP; } if (nodeName.equals("neurons") || path.endsWith("neurons")) { return ImageProvider.NEURON_GROUP; } if (path.matches("^.*parts/[0-9]+$")) { return ImageProvider.PART; } if (path.matches("^.*joints/[0-9]+$")) { return ImageProvider.JOINT; } if (path.matches("^.*neurodefs/[0-9]+$")) { return ImageProvider.NEURON_DEF; } if (path.matches("^.*neuroconns/[0-9]+$")) { return ImageProvider.NEURON_DEF; } if (path.matches("^.*mechparts/[0-9]+$")) { return ImageProvider.MECH_PART; } if (path.matches("^.*mechjoints/[0-9]+$")) { return ImageProvider.MECH_JOINT; } if (path.matches("^.*neurons/[0-9]+$")) { return ImageProvider.NEURON; } if (path.matches("^.*creatures/c[0-9]+$")) { return ImageProvider.CREATURE; } if (path.matches("^.*genotypes/g[0-9]+$")) { return ImageProvider.GENOTYPES; } if (path.matches("^.*populations/groups/[0-9]+$")) { return ImageProvider.POPULATION_GROUP; } if (path.matches("^.*genepools/groups/[0-9]+$")) { return ImageProvider.GENEPOOLS_GROUP; } if (path.matches("^.*events/e[0-9]+$")) { return ImageProvider.EVENT; } return ImageProvider.SIMULATOR; } }