001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.conflict.tags;
003    
004    import java.awt.Component;
005    import java.util.EventObject;
006    
007    import javax.swing.JTable;
008    import javax.swing.event.CellEditorListener;
009    import javax.swing.table.TableCellEditor;
010    
011    import org.openstreetmap.josm.gui.util.TableCellEditorSupport;
012    import org.openstreetmap.josm.gui.widgets.JosmComboBox;
013    
014    public 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        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
026            setSelectedItem(value);
027            this.originalValue = (RelationMemberConflictDecisionType)value;
028            return this;
029        }
030    
031        private TableCellEditorSupport tableCellEditorSupport;
032        private RelationMemberConflictDecisionType originalValue;
033    
034        public void addCellEditorListener(CellEditorListener l) {
035            tableCellEditorSupport.addCellEditorListener(l);
036        }
037    
038        public void cancelCellEditing() {
039            setSelectedItem(originalValue);
040            tableCellEditorSupport.fireEditingCanceled();
041        }
042    
043        public Object getCellEditorValue() {
044            return getSelectedItem();
045        }
046    
047        public boolean isCellEditable(EventObject anEvent) {
048            return true;
049        }
050    
051        public void removeCellEditorListener(CellEditorListener l) {
052            tableCellEditorSupport.removeCellEditorListener(l);
053        }
054    
055        public boolean shouldSelectCell(EventObject anEvent) {
056            return true;
057        }
058    
059        public boolean stopCellEditing() {
060            tableCellEditorSupport.fireEditingStopped();
061            return true;
062        }
063    }