Ignore:
Timestamp:
2021-08-24T02:43:50+02:00 (3 years ago)
Author:
Don-vip
Message:

fix #20690 - fix #21240 - Refactoring of UploadDialog, HistoryComboBox and AutoCompletingComboBox (patch by marcello)

File:
1 edited

Legend:

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

    r17168 r18173  
    8888import org.openstreetmap.josm.gui.MainApplication;
    8989import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
    90 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
     90import org.openstreetmap.josm.gui.tagging.ac.AutoCompComboBox;
    9191import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
    9292import org.openstreetmap.josm.gui.util.GuiHelper;
     
    400400
    401401    /**
     402     * Returns the edited item with whitespaces removed
     403     * @param cb the combobox
     404     * @return the edited item with whitespaces removed
     405     * @since 18173
     406     */
     407    public static String getEditItem(AutoCompComboBox<AutoCompletionItem> cb) {
     408        return Utils.removeWhiteSpaces(cb.getEditor().getItem().toString());
     409    }
     410
     411    /**
     412     * Returns the selected item or the edited item as string
     413     * @param cb the combobox
     414     * @return the selected item or the edited item as string
     415     * @since 18173
     416     */
     417    public static String getSelectedOrEditItem(AutoCompComboBox<AutoCompletionItem> cb) {
     418        final Object selectedItem = cb.getSelectedItem();
     419        if (selectedItem != null)
     420            return selectedItem.toString();
     421        return getEditItem(cb);
     422    }
     423
     424    /**
    402425     * Warns user about a key being overwritten.
    403426     * @param action The action done by the user. Must state what key is changed
     
    476499            List<AutoCompletionItem> keyList = autocomplete.getTagKeys(DEFAULT_AC_ITEM_COMPARATOR);
    477500
    478             keys = new AutoCompletingComboBox(key);
    479             keys.setPossibleAcItems(keyList);
     501            keys = new AutoCompComboBox<>();
     502            keys.getModel().setComparator(Comparator.naturalOrder()); // according to Comparable
     503            keys.setPrototypeDisplayValue(new AutoCompletionItem(key));
    480504            keys.setEditable(true);
     505            keys.getModel().addAllElements(keyList);
    481506            keys.setSelectedItem(key);
    482507
     
    490515            final String selection = m.size() != 1 ? tr("<different>") : m.entrySet().iterator().next().getKey();
    491516
    492             values = new AutoCompletingComboBox(selection);
     517            values = new AutoCompComboBox<>();
     518            values.getModel().setComparator(Comparator.naturalOrder());
     519            values.setPrototypeDisplayValue(new AutoCompletionItem(selection));
    493520            values.setRenderer(cellRenderer);
    494 
    495521            values.setEditable(true);
    496             values.setPossibleAcItems(valueList);
     522            values.getModel().addAllElements(valueList);
    497523            values.setSelectedItem(selection);
    498524            values.getEditor().setItem(selection);
     525
    499526            p.add(Box.createVerticalStrut(5), GBC.eol());
    500527            p.add(new JLabel(tr("Value")), GBC.std());
     
    522549        @Override
    523550        public void performTagEdit() {
    524             String value = values.getEditItem();
     551            String value = getEditItem(values);
    525552            value = Normalizer.normalize(value, Normalizer.Form.NFC);
    526553            if (value.isEmpty()) {
    527554                value = null; // delete the key
    528555            }
    529             String newkey = keys.getEditItem();
     556            String newkey = getEditItem(keys);
    530557            newkey = Normalizer.normalize(newkey, Normalizer.Form.NFC);
    531558            if (newkey.isEmpty()) {
     
    574601
    575602    protected abstract class AbstractTagsDialog extends ExtendedDialog {
    576         protected AutoCompletingComboBox keys;
    577         protected AutoCompletingComboBox values;
     603        protected AutoCompComboBox<AutoCompletionItem> keys;
     604        protected AutoCompComboBox<AutoCompletionItem> values;
    578605
    579606        AbstractTagsDialog(Component parent, String title, String... buttonTexts) {
     
    621648        }
    622649
    623         private void selectACComboBoxSavingUnixBuffer(AutoCompletingComboBox cb) {
     650        private void selectACComboBoxSavingUnixBuffer(AutoCompComboBox<AutoCompletionItem> cb) {
    624651            // select combobox with saving unix system selection (middle mouse paste)
    625652            Clipboard sysSel = ClipboardUtils.getSystemSelection();
     
    667694                           && IntStream.range(0, size).allMatch(i -> Objects.equals(currentModel.getElementAt(i), correctItems.get(i)));
    668695                   if (!valuesOK) {
    669                        values.setPossibleAcItems(correctItems);
     696                       values.getModel().removeAllElements();
     697                       values.getModel().addAllElements(correctItems);
    670698                   }
    671699                   if (!Objects.equals(key, objKey)) {
     
    688716                return;
    689717            }
    690             buttons.get(0).setIcon(findIcon(keys.getSelectedOrEditItem(), values.getSelectedOrEditItem())
     718            buttons.get(0).setIcon(findIcon(getSelectedOrEditItem(keys), getSelectedOrEditItem(values))
    691719                    .orElse(ImageProvider.get("ok", ImageProvider.ImageSizes.LARGEICON)));
    692720        }
     
    732760
    733761            mainPanel = new JPanel(new GridBagLayout());
    734             keys = new AutoCompletingComboBox();
    735             values = new AutoCompletingComboBox();
     762            keys = new AutoCompComboBox<>();
     763            values = new AutoCompComboBox<>();
     764            keys.getModel().setComparator(Comparator.naturalOrder()); // according to Comparable
     765            values.getModel().setComparator(Comparator.naturalOrder());
     766            keys.setPrototypeDisplayValue(new AutoCompletionItem("dummy"));
     767            values.setPrototypeDisplayValue(new AutoCompletionItem("dummy"));
    736768            keys.setAutocompleteEnabled(AUTOCOMPLETE_KEYS.get());
    737769            values.setAutocompleteEnabled(AUTOCOMPLETE_VALUES.get());
     
    748780            keyList.removeIf(item -> containsDataKey(item.getValue()));
    749781
    750             keys.setPossibleAcItems(keyList);
     782            keys.getModel().removeAllElements();
     783            keys.getModel().addAllElements(keyList);
    751784            keys.setEditable(true);
    752785
     
    939972                    @Override
    940973                    public void actionPerformed(ActionEvent e) {
    941                         keys.setSelectedItem(t.getKey(), true);
     974                        keys.setSelectedItem(t.getKey());
    942975                        // fix #7951, #8298 - update list of values before setting value (?)
    943976                        focus.focusGained(null);
    944                         values.setSelectedItem(t.getValue(), true);
     977                        values.setSelectedItem(t.getValue());
    945978                        selectValuesCombobox();
    946979                    }
     
    10941127         */
    10951128        public final void performTagAdding() {
    1096             String key = keys.getEditItem();
    1097             String value = values.getEditItem();
     1129            String key = getEditItem(keys);
     1130            String value = getEditItem(values);
    10981131            if (key.isEmpty() || value.isEmpty())
    10991132                return;
Note: See TracChangeset for help on using the changeset viewer.