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