001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.conflict.pair.relation;
003
004import java.awt.Component;
005import java.awt.event.FocusAdapter;
006import java.awt.event.FocusEvent;
007
008import javax.swing.AbstractCellEditor;
009import javax.swing.JTable;
010import javax.swing.table.TableCellEditor;
011
012import org.openstreetmap.josm.data.osm.RelationMember;
013import org.openstreetmap.josm.gui.widgets.JosmTextField;
014
015/**
016 * {@link TableCellEditor} for the role column in a table for {@link RelationMember}s.
017 * @since 1631
018 */
019public class RelationMemberTableCellEditor extends AbstractCellEditor implements TableCellEditor {
020
021    private final JosmTextField editor;
022
023    /**
024     * Constructs a new {@code RelationMemberTableCellEditor}.
025     */
026    public RelationMemberTableCellEditor() {
027        editor = new JosmTextField();
028        editor.addFocusListener(
029                new FocusAdapter() {
030                    @Override
031                    public void focusGained(FocusEvent arg0) {
032                        editor.selectAll();
033                    }
034                }
035        );
036    }
037
038    @Override
039    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
040        // Do not edit empty or incomplete members ! (fix #5374 and #6315)
041        if (value == null)
042            return null;
043
044        RelationMember member = (RelationMember)value;
045
046        editor.setText(member.getRole());
047        editor.selectAll();
048        return editor;
049    }
050
051    @Override
052    public Object getCellEditorValue() {
053        return editor.getText();
054    }
055}