001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.conflict.tags;
003
004import java.awt.Component;
005import java.util.EventObject;
006
007import javax.swing.JTable;
008import javax.swing.event.CellEditorListener;
009import javax.swing.table.TableCellEditor;
010
011import org.openstreetmap.josm.gui.util.CellEditorSupport;
012import org.openstreetmap.josm.gui.widgets.JosmComboBox;
013
014public class RelationMemberConflictDecisionEditor extends JosmComboBox<RelationMemberConflictDecisionType> implements TableCellEditor {
015
016    /**
017     * Constructs a new {@code RelationMemberConflictDecisionEditor}.
018     */
019    public RelationMemberConflictDecisionEditor() {
020        super(RelationMemberConflictDecisionType.values());
021        setOpaque(true);
022        setRenderer(new RelationMemberConflictDecisionRenderer());
023        tableCellEditorSupport = new CellEditorSupport(this);
024    }
025
026    /* --------------------------------------------------------------------------------- */
027    /* TableCellEditor                                                                   */
028    /* --------------------------------------------------------------------------------- */
029    @Override
030    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
031        setSelectedItem(value);
032        this.originalValue = (RelationMemberConflictDecisionType) value;
033        return this;
034    }
035
036    private final transient CellEditorSupport tableCellEditorSupport;
037    private RelationMemberConflictDecisionType originalValue;
038
039    @Override
040    public void addCellEditorListener(CellEditorListener l) {
041        tableCellEditorSupport.addCellEditorListener(l);
042    }
043
044    @Override
045    public void cancelCellEditing() {
046        setSelectedItem(originalValue);
047        tableCellEditorSupport.fireEditingCanceled();
048    }
049
050    @Override
051    public Object getCellEditorValue() {
052        return getSelectedItem();
053    }
054
055    @Override
056    public boolean isCellEditable(EventObject anEvent) {
057        return true;
058    }
059
060    @Override
061    public void removeCellEditorListener(CellEditorListener l) {
062        tableCellEditorSupport.removeCellEditorListener(l);
063    }
064
065    @Override
066    public boolean shouldSelectCell(EventObject anEvent) {
067        return true;
068    }
069
070    @Override
071    public boolean stopCellEditing() {
072        tableCellEditorSupport.fireEditingStopped();
073        return true;
074    }
075}