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 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}