package net.sf.openrocket.gui.main.componenttree;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultTreeCellRenderer;
import net.sf.openrocket.gui.main.ComponentIcons;
import net.sf.openrocket.gui.util.Icons;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.MassComponent;
import net.sf.openrocket.rocketcomponent.MassComponent.MassComponentType;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.TextUtil;
public class ComponentTreeRenderer extends DefaultTreeCellRenderer {
private static final Translator trans = Application.getTranslator();
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus1) {
Component comp = super.getTreeCellRendererComponent(tree, value, sel,
expanded, leaf, row, hasFocus1);
// Set icon
RocketComponent c = (RocketComponent) value;
if (c.getClass().isAssignableFrom(MassComponent.class)) {
MassComponentType t = ((MassComponent) c).getMassComponentType();
setIcon(ComponentIcons.getSmallMassTypeIcon(t));
} else {
setIcon(ComponentIcons.getSmallIcon(value.getClass()));
}
if (c.isMassOverridden() || c.isCGOverridden()) {
JPanel p = new JPanel();
p.setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1));
p.setBackground(UIManager.getColor("Tree.textBackground"));
p.setForeground(UIManager.getColor("Tree.textForeground"));
p.add(comp/* , BorderLayout.WEST */);
if (c.isMassOverridden()) {
p.add(new JLabel(Icons.MASS_OVERRIDE));
}
if (c.isCGOverridden()) {
p.add(new JLabel(Icons.CG_OVERRIDE));
}
p.setToolTipText(getToolTip(c));
comp = p;
}
// Set tooltip
this.setToolTipText(getToolTip(c));
return comp;
}
private static String getToolTip(RocketComponent c) {
StringBuilder sb = new StringBuilder();
sb.append("<html>");
sb.append("<b>").append(c.getName()).append("</b>");
if (c.isMassive() || c.isMassOverridden()) {
sb.append(" (").append(
UnitGroup.UNITS_MASS.toStringUnit(c.getMass()));
if (c.getChildCount() > 0) {
sb.append(" of ")
.append(UnitGroup.UNITS_MASS.toStringUnit(c
.getSectionMass())).append(" total");
}
sb.append(")");
} else {
if ((c.getChildCount() > 0) && (c.getSectionMass() > 0)) {
sb.append(" (")
.append(UnitGroup.UNITS_MASS.toStringUnit(c
.getSectionMass())).append(" total)");
}
}
if (c.isMassOverridden()) {
sb.append(" ").append(trans.get("ComponentTree.ttip.massoverride"));
}
if (c.isCGOverridden()) {
sb.append(" ").append(trans.get("ComponentTree.ttip.cgoverride"));
}
String comment = c.getComment().trim();
if (comment.length() > 0) {
comment = TextUtil.escapeXML(comment);
comment = comment.replace("\n", "<br>");
sb.append("<br>").append(comment);
}
return sb.toString();
}
}