Changeset 15835 in josm


Ignore:
Timestamp:
2020-02-10T22:58:04+01:00 (4 years ago)
Author:
simon04
Message:

fix #14088 - Add tags dialog: use okay button icon from matching preset/style

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

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

    r15834 r15835  
    8989import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
    9090import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
    91 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
    9291import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
    9392import org.openstreetmap.josm.gui.util.GuiHelper;
     
    9695import org.openstreetmap.josm.io.XmlWriter;
    9796import org.openstreetmap.josm.tools.GBC;
     97import org.openstreetmap.josm.tools.ImageProvider;
    9898import org.openstreetmap.josm.tools.Logging;
    9999import org.openstreetmap.josm.tools.PlatformManager;
     
    501501            addFocusAdapter(autocomplete, usedValuesAwareComparator);
    502502
     503            addUpdateIconListener();
     504
    503505            setContent(mainPanel, false);
    504506
     
    517519        @Override
    518520        public void performTagEdit() {
    519             String value = Utils.removeWhiteSpaces(values.getEditor().getItem().toString());
     521            String value = values.getEditItem();
    520522            value = Normalizer.normalize(value, Normalizer.Form.NFC);
    521523            if (value.isEmpty()) {
    522524                value = null; // delete the key
    523525            }
    524             String newkey = Utils.removeWhiteSpaces(keys.getEditor().getItem().toString());
     526            String newkey = keys.getEditItem();
    525527            newkey = Normalizer.normalize(newkey, Normalizer.Form.NFC);
    526528            if (newkey.isEmpty()) {
     
    610612                }
    611613                keys.setFixedLocale(PROPERTY_FIX_TAG_LOCALE.get());
     614                updateOkButtonIcon();
    612615            }
    613616            super.setVisible(visible);
     
    672675        }
    673676
    674         private Optional<ImageIcon> findIcon(Tag tag) {
    675             // Find and display icon
    676             ImageIcon icon = MapPaintStyles.getNodeIcon(tag, false); // Filters deprecated icon
    677             if (icon != null) {
    678                 return Optional.of(icon);
    679             }
    680             // If no icon found in map style look at presets
    681             return TaggingPresets.getMatchingPresets(null, tag.getKeys(), false).stream()
    682                     .map(TaggingPreset::getIcon)
     677        protected void addUpdateIconListener() {
     678            keys.addActionListener(ignore -> updateOkButtonIcon());
     679            values.addActionListener(ignore -> updateOkButtonIcon());
     680        }
     681
     682        private void updateOkButtonIcon() {
     683            if (buttons.isEmpty()) {
     684                return;
     685            }
     686            final Tag tag = new Tag(keys.getSelectedOrEditItem(), values.getSelectedOrEditItem());
     687            buttons.get(0).setIcon(findIcon(tag)
     688                    .orElse(ImageProvider.get("ok", ImageProvider.ImageSizes.LARGEICON)));
     689        }
     690
     691        protected Optional<ImageIcon> findIcon(Tag tag) {
     692            final Optional<ImageIcon> taggingPresetIcon = TaggingPresets.getMatchingPresets(null, tag.getKeys(), false).stream()
     693                    .map(preset -> preset.getIcon(Action.LARGE_ICON_KEY))
    683694                    .filter(Objects::nonNull)
    684695                    .findFirst();
     696            // Java 9: use Optional.or
     697            return taggingPresetIcon.isPresent() ? taggingPresetIcon : Optional.ofNullable(MapPaintStyles.getNodeIcon(tag, false));
    685698        }
    686699
     
    755768            // fire focus event in advance or otherwise the popup list will be too small at first
    756769            focus.focusGained(null);
     770
     771            addUpdateIconListener();
    757772
    758773            // Add tag on Shift-Enter
     
    10781093         */
    10791094        public final void performTagAdding() {
    1080             String key = Utils.removeWhiteSpaces(keys.getEditor().getItem().toString());
    1081             String value = Utils.removeWhiteSpaces(values.getEditor().getItem().toString());
     1095            String key = keys.getEditItem();
     1096            String value = values.getEditItem();
    10821097            if (key.isEmpty() || value.isEmpty())
    10831098                return;
  • trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java

    r15567 r15835  
    3333import org.openstreetmap.josm.spi.preferences.Config;
    3434import org.openstreetmap.josm.tools.Logging;
     35import org.openstreetmap.josm.tools.Utils;
    3536
    3637/**
     
    386387
    387388    /**
     389     * Returns the edited item with whitespaces removed
     390     * @return the edited item with whitespaces removed
     391     * @since 15835
     392     */
     393    public String getEditItem() {
     394        return Utils.removeWhiteSpaces(getEditor().getItem().toString());
     395    }
     396
     397    /**
     398     * Returns the selected item or the edited item as string
     399     * @return the selected item or the edited item as string
     400     * @see #getSelectedItem()
     401     * @see #getEditItem()
     402     * @since 15835
     403     */
     404    public String getSelectedOrEditItem() {
     405        final Object selectedItem = getSelectedItem();
     406        if (selectedItem instanceof AutoCompletionItem) {
     407            return ((AutoCompletionItem) selectedItem).getValue();
     408        } else if (selectedItem instanceof String) {
     409            return (String) selectedItem;
     410        } else {
     411            return getEditItem();
     412        }
     413    }
     414
     415    /**
    388416     * ListCellRenderer for AutoCompletingComboBox
    389417     * renders an AutoCompletionListItem by showing only the string value part
Note: See TracChangeset for help on using the changeset viewer.