package mekhq.gui; import java.awt.Color; import java.awt.Component; import java.awt.Image; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; import megamek.client.ui.Messages; import megamek.common.Crew; import megamek.common.Entity; import megamek.common.GunEmplacement; import mekhq.IconPackage; import mekhq.campaign.force.Force; import mekhq.campaign.personnel.Person; import mekhq.campaign.unit.Unit; public class ForceRenderer extends DefaultTreeCellRenderer { private static final long serialVersionUID = -553191867660269247L; private IconPackage icons; public ForceRenderer(IconPackage i) { icons = i; } 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); setOpaque(true); setBackground(Color.WHITE); setForeground(Color.BLACK); if(sel) { setBackground(Color.DARK_GRAY); setForeground(Color.WHITE); } if(value instanceof Unit) { String name = "<font color='red'>No Crew</font>"; if (((Unit) value).getEntity() instanceof GunEmplacement) { name = "AutoTurret"; } String uname = ""; String c3network = ""; Unit u = (Unit)value; Person pp = u.getCommander(); if(null != pp) { name = pp.getFullTitle(); name += " (" + u.getEntity().getCrew().getGunnery() + "/" + u.getEntity().getCrew().getPiloting() + ")"; if(pp.needsFixing() || u.getEntity().getCrew().getHits() > 0) { name = "<font color='red'>" + name + "</font>"; } } uname = "<i>" + u.getName() + "</i>"; if(u.isDamaged()) { uname = "<font color='red'>" + uname + "</font>"; } Entity entity = u.getEntity(); if (entity.hasC3i()) { if (entity.calculateFreeC3Nodes() >= 5) { c3network += Messages.getString("ChatLounge.C3iNone"); } else { c3network += c3network += Messages .getString("ChatLounge.C3iNetwork") + entity.getC3NetId(); if (entity.calculateFreeC3Nodes() > 0) { c3network += Messages.getString("ChatLounge.C3Nodes", new Object[] { entity.calculateFreeC3Nodes() }); } } } else if (entity.hasC3()) { if (entity.C3MasterIs(entity)) { c3network += Messages.getString("ChatLounge.C3Master"); c3network += Messages.getString("ChatLounge.C3MNodes", new Object[] { entity.calculateFreeC3MNodes() }); if(entity.hasC3MM()) { c3network += Messages.getString("ChatLounge.C3SNodes", new Object[] { entity.calculateFreeC3Nodes() }); } } else if (!entity.hasC3S()) { c3network += Messages.getString("ChatLounge.C3Master"); c3network += Messages.getString("ChatLounge.C3SNodes", new Object[] { entity.calculateFreeC3Nodes() }); // an independent master might also be a slave to a company // master if (entity.getC3Master() != null) { c3network += "<br>" + Messages.getString("ChatLounge.C3Slave") + entity.getC3Master().getShortName(); //$NON-NLS-1$ } } else if (entity.getC3Master() != null) { c3network += Messages.getString("ChatLounge.C3Slave") + entity.getC3Master().getShortName(); //$NON-NLS-1$ } else { c3network += Messages.getString("ChatLounge.C3None"); } } if(!c3network.isEmpty()) { c3network = "<br><i>" + c3network + "</i>"; } setText("<html>" + name + ", " + uname + c3network + "</html>"); if(u.isDeployed() && !sel) { setBackground(Color.LIGHT_GRAY); } } if(value instanceof Force) { if(!hasFocus && ((Force)value).isDeployed()) { setBackground(Color.LIGHT_GRAY); } } setIcon(getIcon(value)); return this; } private IconPackage getIconPackage() { return icons; } protected Icon getIcon(Object node) { if(node instanceof Unit) { return getIconFrom((Unit)node); } else if(node instanceof Force) { return getIconFrom((Force)node); } else { return null; } } protected Icon getIconFrom(Unit unit) { Person person = unit.getCommander(); if(null == person) { return null; } String category = person.getPortraitCategory(); String filename = person.getPortraitFileName(); if(Crew.ROOT_PORTRAIT.equals(category)) { category = ""; } // Return a null if the unit has no selected portrait file. if ((null == category) || (null == filename) || Crew.PORTRAIT_NONE.equals(filename)) { filename = "default.gif"; } // Try to get the unit's portrait file. Image portrait = null; try { portrait = (Image) getIconPackage().getPortraits().getItem(category, filename); if(null != portrait) { portrait = portrait.getScaledInstance(58, -1, Image.SCALE_DEFAULT); } else { portrait = (Image) getIconPackage().getPortraits().getItem("", "default.gif"); if(null != portrait) { portrait = portrait.getScaledInstance(58, -1, Image.SCALE_DEFAULT); } } return new ImageIcon(portrait); } catch (Exception err) { err.printStackTrace(); return null; } } protected Icon getIconFrom(Force force) { Image forceImage = IconPackage.buildForceIcon(force.getIconCategory(), force.getIconFileName(), getIconPackage().getForceIcons(), force.getIconMap()); if(null != forceImage) { forceImage = forceImage.getScaledInstance(58, -1, Image.SCALE_SMOOTH); } return new ImageIcon(forceImage); } }