// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Component; import java.text.DateFormat; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; import javax.swing.UIManager; import org.openstreetmap.josm.data.osm.Changeset; import org.openstreetmap.josm.tools.ImageProvider; import org.openstreetmap.josm.tools.Utils; import org.openstreetmap.josm.tools.date.DateUtils; /** * A {@link ListCellRenderer} for the list of changesets in the upload dialog. * * @since 2115 */ public class ChangesetCellRenderer extends JLabel implements ListCellRenderer { private final ImageIcon icon; /** * Constructs a new {@code ChangesetCellRenderer}. */ public ChangesetCellRenderer() { icon = ImageProvider.get("data", "changeset"); setOpaque(true); } protected String buildToolTipText(Changeset cs) { StringBuilder sb = new StringBuilder(64); sb.append("").append(tr("Changeset id:")).append("").append(cs.getId()).append("
"); if (cs.getCreatedAt() != null) { sb.append("").append(tr("Created at:")).append("").append( DateUtils.formatDateTime(cs.getCreatedAt(), DateFormat.SHORT, DateFormat.SHORT)).append("
"); } String comment = cs.get("comment"); if (comment != null) { sb.append("").append(tr("Changeset comment:")).append("") .append(Utils.escapeReservedCharactersHTML(comment)).append("
"); } return sb.toString(); } @Override public Component getListCellRendererComponent(JList list, Changeset cs, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) { setForeground(UIManager.getColor("List.selectionForeground")); setBackground(UIManager.getColor("List.selectionBackground")); } else { setForeground(UIManager.getColor("List.foreground")); setBackground(UIManager.getColor("List.background")); } if (cs != null) { setIcon(icon); StringBuilder sb = new StringBuilder(); String comment = cs.get("comment"); if (comment != null) { sb.append(cs.getId()).append(" - ").append(comment); } else if (cs.get("name") != null) { sb.append(cs.getId()).append(" - ").append(cs.get("name")); } else { sb.append(tr("Changeset {0}", cs.getId())); } setText(sb.toString()); setToolTipText(buildToolTipText(cs)); } else { setText(tr("No open changeset")); } return this; } }