// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.conflict.tags; import java.awt.Component; import java.util.EventObject; import javax.swing.JTable; import javax.swing.event.CellEditorListener; import javax.swing.table.TableCellEditor; import org.openstreetmap.josm.gui.util.CellEditorSupport; import org.openstreetmap.josm.gui.widgets.JosmComboBox; /** * Table cell editor for relation member conflict resolver table. * @since 2070 */ public class RelationMemberConflictDecisionEditor extends JosmComboBox<RelationMemberConflictDecisionType> implements TableCellEditor { private final transient CellEditorSupport tableCellEditorSupport; private RelationMemberConflictDecisionType originalValue; /** * Constructs a new {@code RelationMemberConflictDecisionEditor}. */ public RelationMemberConflictDecisionEditor() { super(RelationMemberConflictDecisionType.values()); setOpaque(true); setRenderer(new RelationMemberConflictDecisionRenderer()); tableCellEditorSupport = new CellEditorSupport(this); } /* --------------------------------------------------------------------------------- */ /* TableCellEditor */ /* --------------------------------------------------------------------------------- */ @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { addActionListener(e -> stopCellEditing()); setSelectedItem(value); this.originalValue = (RelationMemberConflictDecisionType) value; return this; } @Override public void addCellEditorListener(CellEditorListener l) { tableCellEditorSupport.addCellEditorListener(l); } @Override public void cancelCellEditing() { setSelectedItem(originalValue); tableCellEditorSupport.fireEditingCanceled(); } @Override public Object getCellEditorValue() { return getSelectedItem(); } @Override public boolean isCellEditable(EventObject anEvent) { return true; } @Override public void removeCellEditorListener(CellEditorListener l) { tableCellEditorSupport.removeCellEditorListener(l); } @Override public boolean shouldSelectCell(EventObject anEvent) { return true; } @Override public boolean stopCellEditing() { tableCellEditorSupport.fireEditingStopped(); return true; } }