001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.dialogs.relation;
003    
004    import java.awt.Component;
005    
006    import javax.swing.AbstractCellEditor;
007    import javax.swing.BorderFactory;
008    import javax.swing.JTable;
009    import javax.swing.table.TableCellEditor;
010    
011    import org.openstreetmap.josm.data.osm.DataSet;
012    import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingTextField;
013    import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
014    
015    public class MemberRoleCellEditor extends AbstractCellEditor implements TableCellEditor {
016        private AutoCompletingTextField editor = null;
017        private DataSet ds;
018    
019        /** user input is matched against this list of auto completion items */
020        private AutoCompletionList autoCompletionList = null;
021    
022        /**
023         * constructor
024         */
025        public MemberRoleCellEditor(DataSet ds) {
026            this.ds = ds;
027            editor = new AutoCompletingTextField();
028            editor.setBorder(BorderFactory.createEmptyBorder(1,1,1,1)); 
029            autoCompletionList = new AutoCompletionList();
030            editor.setAutoCompletionList(autoCompletionList);
031        }
032    
033        /**
034         * replies the table cell editor
035         */
036        public Component getTableCellEditorComponent(JTable table,
037                Object value, boolean isSelected, int row, int column) {
038    
039            String role = (String)value;
040            editor.setText(role);
041            autoCompletionList.clear();
042            ds.getAutoCompletionManager().populateWithMemberRoles(autoCompletionList);
043            return editor;
044        }
045    
046        public Object getCellEditorValue() {
047            return editor.getText();
048        }
049    
050        @Override
051        public void cancelCellEditing() {
052            super.cancelCellEditing();
053        }
054    
055        @Override
056        public boolean stopCellEditing() {
057            return super.stopCellEditing();
058        }
059        
060        /** Returns the edit field for this cell editor. */
061        public AutoCompletingTextField getEditor() {
062            return editor;
063        }
064    }