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