Ignore:
Timestamp:
02.05.2010 18:12:34 (2 years ago)
Author:
bastiK
Message:

autocompletion cleanup - fixes #2729

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

    r3210 r3214  
    2626import java.util.HashMap; 
    2727import java.util.HashSet; 
     28import java.util.Iterator; 
    2829import java.util.List; 
    2930import java.util.Map; 
     
    8182import org.openstreetmap.josm.gui.tagging.TaggingPreset; 
    8283import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox; 
     84import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList; 
     85import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem; 
    8386import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager; 
    8487import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; 
     
    148151    private final Map<String, Map<String, Integer>> valueCount = new TreeMap<String, Map<String, Integer>>(); 
    149152 
    150     Comparator<String> defaultKeyComparator = String.CASE_INSENSITIVE_ORDER; 
    151     Comparator<String> defaultValueComparator = String.CASE_INSENSITIVE_ORDER; 
     153    Comparator<AutoCompletionListItem> defaultACItemComparator = new Comparator<AutoCompletionListItem>() { 
     154        public int compare(AutoCompletionListItem o1, AutoCompletionListItem o2) { 
     155            return String.CASE_INSENSITIVE_ORDER.compare(o1.getValue(), o2.getValue()); 
     156        } 
     157    }; 
    152158 
    153159    private DataSetListenerAdapter dataChangedAdapter = new DataSetListenerAdapter(this); 
     
    191197 
    192198        AutoCompletionManager autocomplete = Main.main.getEditLayer().data.getAutoCompletionManager(); 
    193  
     199        List<AutoCompletionListItem> keyList = autocomplete.getKeys(); 
     200        Collections.sort(keyList, defaultACItemComparator); 
     201         
    194202        final AutoCompletingComboBox keys = new AutoCompletingComboBox(); 
    195         keys.setPossibleItems(autocomplete.getKeys(defaultKeyComparator)); 
     203        keys.setPossibleACItems(keyList); 
    196204        keys.setEditable(true); 
    197205        keys.setSelectedItem(key); 
     
    209217                if (c instanceof JLabel) { 
    210218                    String str = null; 
    211                     str=(String) value; 
     219                    str=((AutoCompletionListItem) value).getValue(); 
    212220                    if (valueCount.containsKey(objKey)){ 
    213221                        Map<String, Integer> m=valueCount.get(objKey); 
     
    223231        }); 
    224232        values.setEditable(true); 
    225         values.setPossibleItems(autocomplete.getValues(key, defaultValueComparator)); 
     233         
     234        List<AutoCompletionListItem> valueList = autocomplete.getValues(key); 
     235        Collections.sort(valueList, defaultACItemComparator); 
     236         
     237        values.setPossibleACItems(valueList); 
    226238        Map<String, Integer> m=(Map<String, Integer>)propertyData.getValueAt(row, 1); 
    227239        final String selection= m.size()!=1?tr("<different>"):m.entrySet().iterator().next().getKey(); 
     
    344356        final AutoCompletingComboBox keys = new AutoCompletingComboBox(); 
    345357        AutoCompletionManager autocomplete = Main.main.getEditLayer().data.getAutoCompletionManager(); 
    346         List<String> usedKeys = 
    347                 new ArrayList<String>(autocomplete.getKeys(defaultKeyComparator)); 
    348         for (int i = 0; i < propertyData.getRowCount(); ++i) { 
    349             usedKeys.remove(propertyData.getValueAt(i, 0)); 
    350         } 
    351         keys.setPossibleItems(usedKeys); 
     358        List<AutoCompletionListItem> keyList = autocomplete.getKeys(); 
     359 
     360        // remove the object's tag keys from the list 
     361        Iterator<AutoCompletionListItem> iter = keyList.iterator(); 
     362        while (iter.hasNext()) { 
     363            AutoCompletionListItem item = iter.next(); 
     364            for (int i = 0; i < propertyData.getRowCount(); ++i) { 
     365                if (item.getValue().equals(propertyData.getValueAt(i, 0))) { 
     366                    iter.remove(); 
     367                    break; 
     368                } 
     369            } 
     370        } 
     371 
     372        Collections.sort(keyList, defaultACItemComparator); 
     373        keys.setPossibleACItems(keyList); 
    352374        keys.setEditable(true); 
    353375 
     
    397419            @Override public void focusGained(FocusEvent e) { 
    398420                String key = keys.getEditor().getItem().toString(); 
    399                 values.setPossibleItems(autocomplete.getValues(key, defaultValueComparator)); 
     421                 
     422                List<AutoCompletionListItem> valueList = autocomplete.getValues(key); 
     423                Collections.sort(valueList, defaultACItemComparator); 
     424 
     425                values.setPossibleACItems(valueList); 
    400426                objKey=key; 
    401427            } 
Note: See TracChangeset for help on using the changeset viewer.