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