//This product is provided under the terms of EPL (Eclipse Public License) //version 1.0. // //The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.swingui.dsm.impl; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; import org.dtangler.ui.dsm.DependableInfo; public class DependableInfoRowTableCellRenderer implements TableCellRenderer { private static final JLabel Normal = createLabel(Color.lightGray); private static final JLabel Crosshair = createLabel(Color.gray); private static final JLabel Selected = createLabel(Color.gray); private static final JLabel error_selected = createLabel(Color.red.darker()); private static final JLabel error_normal = createLabel(Color.red); private static final JLabel warning_selected = createLabel(Color.yellow .darker()); private static final JLabel warning_normal = createLabel(Color.yellow); private static final char Space = ' '; private static final char Open = '('; private static final char Close = ')'; private static JLabel createLabel(Color color) { JLabel label = new JLabel(); label.setOpaque(true); label.setBackground(color); return label; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { DependableInfo info = (DependableInfo) value; JLabel label = getLabel(info); label.setText(buildText(info.getIndex(), info.getDisplayName(), info .getContentCount())); label.setToolTipText(info.getFullyQualifiedName()); return label; } private JLabel getLabel(DependableInfo info) { if (info.containsErrors()) return (info.isInCrosshair() || info.isSelected()) ? error_selected : error_normal; if (info.containsWarnings()) return (info.isInCrosshair() || info.isSelected()) ? warning_selected : warning_normal; if (info.isInCrosshair()) return Crosshair; if (info.isSelected()) return Selected; return Normal; } private String buildText(int index, String name, int contentCount) { StringBuilder sb = new StringBuilder(50); if (index < 10) sb.append(Space); if (index < 100) sb.append(Space); sb.append(index).append(Space); sb.append(name).append(Space); sb.append(Open).append(contentCount).append(Close); return sb.toString(); } }