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 016/** 017 * This class renders the cells in a {@link ChangesetListModel}. 018 */ 019public class ChangesetListCellRenderer extends JLabel implements ListCellRenderer<Changeset> { 020 021 /** 022 * Constructs a new {@code ChangesetListCellRenderer}. 023 */ 024 public ChangesetListCellRenderer() { 025 setOpaque(true); 026 setIcon(ImageProvider.get("data", "changeset")); 027 } 028 029 protected void renderColors(boolean selected) { 030 if (selected) { 031 setForeground(UIManager.getColor("List.selectionForeground")); 032 setBackground(UIManager.getColor("List.selectionBackground")); 033 } else { 034 setForeground(UIManager.getColor("List.foreground")); 035 setBackground(UIManager.getColor("List.background")); 036 } 037 } 038 039 protected void renderLabel(Changeset cs) { 040 StringBuilder sb = new StringBuilder(); 041 if (cs.isIncomplete()) { 042 sb.append(tr("{0} [incomplete]", cs.getId())); 043 } else { 044 String comment = cs.getComment(); 045 sb.append(cs.getId()) 046 .append(" - ") 047 .append(cs.isOpen() ? tr("open") : tr("closed")); 048 if (!comment.isEmpty()) { 049 sb.append(" - '").append(comment).append('\''); 050 } 051 } 052 setText(sb.toString()); 053 } 054 055 @Override 056 public Component getListCellRendererComponent(JList<? extends Changeset> list, Changeset cs, int index, boolean isSelected, 057 boolean cellHasFocus) { 058 renderColors(isSelected); 059 renderLabel(cs); 060 return this; 061 } 062}