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.TableCellEditorSupport;
012import org.openstreetmap.josm.gui.widgets.JosmComboBox;
013
014public class RelationMemberConflictDecisionEditor extends JosmComboBox implements TableCellEditor {
015
016    public RelationMemberConflictDecisionEditor() {
017        super(RelationMemberConflictDecisionType.values());
018        setOpaque(true);
019        setRenderer(new RelationMemberConflictDecisionRenderer());
020        tableCellEditorSupport = new TableCellEditorSupport(this);
021    }
022    /* --------------------------------------------------------------------------------- */
023    /* TableCellEditor                                                                   */
024    /* --------------------------------------------------------------------------------- */
025    @Override
026    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
027        setSelectedItem(value);
028        this.originalValue = (RelationMemberConflictDecisionType)value;
029        return this;
030    }
031
032    private TableCellEditorSupport tableCellEditorSupport;
033    private RelationMemberConflictDecisionType originalValue;
034
035    @Override
036    public void addCellEditorListener(CellEditorListener l) {
037        tableCellEditorSupport.addCellEditorListener(l);
038    }
039
040    @Override
041    public void cancelCellEditing() {
042        setSelectedItem(originalValue);
043        tableCellEditorSupport.fireEditingCanceled();
044    }
045
046    @Override
047    public Object getCellEditorValue() {
048        return getSelectedItem();
049    }
050
051    @Override
052    public boolean isCellEditable(EventObject anEvent) {
053        return true;
054    }
055
056    @Override
057    public void removeCellEditorListener(CellEditorListener l) {
058        tableCellEditorSupport.removeCellEditorListener(l);
059    }
060
061    @Override
062    public boolean shouldSelectCell(EventObject anEvent) {
063        return true;
064    }
065
066    @Override
067    public boolean stopCellEditing() {
068        tableCellEditorSupport.fireEditingStopped();
069        return true;
070    }
071}