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{
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    @Override
050    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
051            boolean cellHasFocus) {
052        Changeset cs = (Changeset)value;
053        renderColors(isSelected);
054        renderLabel(cs);
055        return this;
056    }
057}