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}