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 014/** 015 * Table cell editor for relation member conflict resolver table. 016 * @since 2070 017 */ 018public class RelationMemberConflictDecisionEditor extends JosmComboBox<RelationMemberConflictDecisionType> implements TableCellEditor { 019 020 private final transient CellEditorSupport tableCellEditorSupport; 021 private RelationMemberConflictDecisionType originalValue; 022 023 /** 024 * Constructs a new {@code RelationMemberConflictDecisionEditor}. 025 */ 026 public RelationMemberConflictDecisionEditor() { 027 super(RelationMemberConflictDecisionType.values()); 028 setOpaque(true); 029 setRenderer(new RelationMemberConflictDecisionRenderer()); 030 tableCellEditorSupport = new CellEditorSupport(this); 031 } 032 033 /* --------------------------------------------------------------------------------- */ 034 /* TableCellEditor */ 035 /* --------------------------------------------------------------------------------- */ 036 @Override 037 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 038 addActionListener(e -> stopCellEditing()); 039 setSelectedItem(value); 040 this.originalValue = (RelationMemberConflictDecisionType) value; 041 return this; 042 } 043 044 @Override 045 public void addCellEditorListener(CellEditorListener l) { 046 tableCellEditorSupport.addCellEditorListener(l); 047 } 048 049 @Override 050 public void cancelCellEditing() { 051 setSelectedItem(originalValue); 052 tableCellEditorSupport.fireEditingCanceled(); 053 } 054 055 @Override 056 public Object getCellEditorValue() { 057 return getSelectedItem(); 058 } 059 060 @Override 061 public boolean isCellEditable(EventObject anEvent) { 062 return true; 063 } 064 065 @Override 066 public void removeCellEditorListener(CellEditorListener l) { 067 tableCellEditorSupport.removeCellEditorListener(l); 068 } 069 070 @Override 071 public boolean shouldSelectCell(EventObject anEvent) { 072 return true; 073 } 074 075 @Override 076 public boolean stopCellEditing() { 077 tableCellEditorSupport.fireEditingStopped(); 078 return true; 079 } 080}