001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.dialogs.relation;
003
004import java.awt.Component;
005import java.awt.Dimension;
006
007import javax.swing.JTable;
008
009import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
010import org.openstreetmap.josm.data.osm.OsmPrimitive;
011import org.openstreetmap.josm.tools.ImageProvider;
012
013/**
014 * "Refers to" column in relation editor's member list.
015 */
016public class MemberTableMemberCellRenderer extends MemberTableCellRenderer {
017
018    /**
019     * Constructs a new {@code MemberTableMemberCellRenderer}.
020     */
021    public MemberTableMemberCellRenderer() {
022        super();
023        // Explicit default constructor is needed for instantiation via reflection
024    }
025
026    protected void renderPrimitive(OsmPrimitive primitive, Dimension cellSize) {
027        // Make icon the full height of the table cell. Icon background is square.
028        int size = Math.min(cellSize.width, cellSize.height);
029        setIcon(ImageProvider.getPadded(primitive, new Dimension(size, size)));
030        setText(primitive.getDisplayName(DefaultNameFormatter.getInstance()));
031        setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(primitive));
032    }
033
034    @Override
035    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
036            int row, int column) {
037
038        reset();
039        if (value == null)
040            return this;
041
042        Dimension cellSize = table.getCellRect(row, column, false).getSize();
043
044        OsmPrimitive primitive = (OsmPrimitive) value;
045        renderBackgroundForeground(getModel(table), primitive, isSelected);
046        renderPrimitive(primitive, cellSize);
047        return this;
048    }
049}