001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.changeset; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Component; 007 008import javax.swing.JLabel; 009import javax.swing.JList; 010import javax.swing.ListCellRenderer; 011import javax.swing.UIManager; 012 013import org.openstreetmap.josm.data.osm.Changeset; 014import org.openstreetmap.josm.tools.ImageProvider; 015 016public class ChangesetListCellRenderer extends JLabel implements ListCellRenderer<Changeset> { 017 018 /** 019 * Constructs a new {@code ChangesetListCellRenderer}. 020 */ 021 public ChangesetListCellRenderer() { 022 setOpaque(true); 023 setIcon(ImageProvider.get("data", "changeset")); 024 } 025 026 protected void renderColors(boolean selected) { 027 if (selected) { 028 setForeground(UIManager.getColor("List.selectionForeground")); 029 setBackground(UIManager.getColor("List.selectionBackground")); 030 } else { 031 setForeground(UIManager.getColor("List.foreground")); 032 setBackground(UIManager.getColor("List.background")); 033 } 034 } 035 036 protected void renderLabel(Changeset cs) { 037 StringBuilder sb = new StringBuilder(); 038 if (cs.isIncomplete()) { 039 sb.append(tr("{0} [incomplete]", cs.getId())); 040 } else { 041 String comment = cs.get("comment"); 042 sb.append(cs.getId()) 043 .append(" - ") 044 .append(cs.isOpen() ? tr("open") : tr("closed")); 045 if (comment != null) { 046 sb.append(" - '").append(comment).append('\''); 047 } 048 } 049 setText(sb.toString()); 050 } 051 052 @Override 053 public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected, 054 boolean cellHasFocus) { 055 renderColors(isSelected); 056 renderLabel(cs); 057 return this; 058 } 059}