001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.io; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.awt.Component; 007 import java.text.DateFormat; 008 009 import javax.swing.ImageIcon; 010 import javax.swing.JLabel; 011 import javax.swing.JList; 012 import javax.swing.ListCellRenderer; 013 import javax.swing.UIManager; 014 015 import org.openstreetmap.josm.data.osm.Changeset; 016 import org.openstreetmap.josm.tools.ImageProvider; 017 018 /** 019 * A {@link ListCellRenderer} for the list of changesets in the upload dialog. 020 * 021 * 022 */ 023 public class ChangesetCellRenderer extends JLabel implements ListCellRenderer { 024 private ImageIcon icon ; 025 public ChangesetCellRenderer() { 026 icon = ImageProvider.get("data", "changeset"); 027 setOpaque(true); 028 } 029 030 protected String buildToolTipText(Changeset cs) { 031 StringBuilder sb = new StringBuilder(); 032 sb.append("<html>"); 033 sb.append("<strong>").append(tr("Changeset id:")).append("</strong>").append(cs.getId()).append("<br>"); 034 if (cs.getCreatedAt() != null) { 035 sb.append("<strong>").append(tr("Created at:")).append("</strong>").append(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(cs.getCreatedAt())).append("<br>"); 036 } 037 if (cs.get("comment") != null) { 038 sb.append("<strong>").append(tr("Changeset comment:")).append("</strong>").append(cs.get("comment")).append("<br>"); 039 } 040 return sb.toString(); 041 } 042 043 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, 044 boolean cellHasFocus) { 045 Changeset cs = (Changeset)value; 046 if (isSelected) { 047 setForeground(UIManager.getColor("List.selectionForeground")); 048 setBackground(UIManager.getColor("List.selectionBackground")); 049 } else { 050 setForeground(UIManager.getColor("List.foreground")); 051 setBackground(UIManager.getColor("List.background")); 052 } 053 if (cs != null) { 054 setIcon(icon); 055 StringBuffer sb = new StringBuffer(); 056 if (cs.get("comment") != null) { 057 sb.append(cs.getId()).append(" - ").append(cs.get("comment")); 058 } else if (cs.get("name") != null) { 059 sb.append(cs.getId()).append(" - ").append(cs.get("name")); 060 } else { 061 sb.append(tr("Changeset {0}", cs.getId())); 062 } 063 setText(sb.toString()); 064 setToolTipText(buildToolTipText(cs)); 065 } else { 066 setText(tr("No open changeset")); 067 } 068 return this; 069 } 070 }