Ticket #18381: 18381.patch

File 18381.patch, 3.4 KB (added by taylor.smock, 6 years ago)

Add logic to destroy the preset menu and to rebuild it when the preset sources change

  • src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java

     
    3131import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
    3232import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
    3333import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
     34import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
    3435import org.openstreetmap.josm.spi.preferences.Config;
    3536import org.openstreetmap.josm.tools.GBC;
    3637import org.openstreetmap.josm.tools.Logging;
     
    246247
    247248    @Override
    248249    public boolean ok() {
    249         boolean restart = Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
    250         restart |= sources.finish();
     250        if (sources.finish()
     251                || Config.getPref().putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null)) {
     252            TaggingPresets.destroy();
     253            TaggingPresets.initialize();
     254        }
    251255
    252         return restart;
     256        return false;
    253257    }
    254258
    255259    @Override
  • src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java

     
    1616import org.openstreetmap.josm.data.osm.IPrimitive;
    1717import org.openstreetmap.josm.gui.MainApplication;
    1818import org.openstreetmap.josm.gui.MenuScroller;
     19import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
    1920import org.openstreetmap.josm.gui.tagging.presets.items.CheckGroup;
    2021import org.openstreetmap.josm.gui.tagging.presets.items.KeyedItem;
    2122import org.openstreetmap.josm.gui.tagging.presets.items.Roles;
     
    9899        if (Config.getPref().getBoolean("taggingpreset.sortmenu")) {
    99100            TaggingPresetMenu.sortMenu(MainApplication.getMenu().presetsMenu);
    100101        }
     102        listeners.forEach(TaggingPresetListener::taggingPresetsModified);
    101103    }
    102104
     105    // Cannot implement Destroyable since this is static
    103106    /**
     107     * Call to deconstruct the TaggingPresets menus and other information so that it
     108     * can be rebuilt later.
     109     *
     110     * @since xxx
     111     */
     112    public static void destroy() {
     113        ToolbarPreferences toolBar = MainApplication.getToolbar();
     114        taggingPresets.forEach(toolBar::unregister);
     115        taggingPresets.clear();
     116        PRESET_TAG_CACHE.clear();
     117        PRESET_ROLE_CACHE.clear();
     118        MainApplication.getMenu().presetsMenu.removeAll();
     119        listeners.forEach(TaggingPresetListener::taggingPresetsModified);
     120    }
     121
     122    /**
    104123     * Initialize the cache for presets. This is done only once.
    105124     * @param presets Tagging presets to cache
    106125     */
     
    201220     */
    202221    public static void addTaggingPresets(Collection<TaggingPreset> presets) {
    203222        if (presets != null && taggingPresets.addAll(presets)) {
    204             for (TaggingPresetListener listener : listeners) {
    205                 listener.taggingPresetsModified();
    206             }
     223            listeners.forEach(TaggingPresetListener::taggingPresetsModified);
    207224        }
    208225    }
    209226