// License: GPL. Copyright 2007 by Immanuel Scholz and others package org.openstreetmap.josm.gui.preferences; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.GridBagLayout; import java.util.Collection; import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.JCheckBox; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JSeparator; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.tagging.TaggingPreset; import org.openstreetmap.josm.gui.tagging.TaggingPresetMenu; import org.openstreetmap.josm.gui.tagging.TaggingPresetSeparator; import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionCache; import org.openstreetmap.josm.tools.GBC; public class TaggingPresetPreference implements PreferenceSetting { public static class Factory implements PreferenceSettingFactory { public PreferenceSetting createPreferenceSetting() { return new TaggingPresetPreference(); } } public static Collection<TaggingPreset> taggingPresets; private StyleSourceEditor sources; private JCheckBox sortMenu; private JCheckBox enableDefault; public void addGui(final PreferenceTabbedPane gui) { sortMenu = new JCheckBox(tr("Sort presets menu"), Main.pref.getBoolean("taggingpreset.sortmenu", false)); enableDefault = new JCheckBox(tr("Enable built-in defaults"), Main.pref.getBoolean("taggingpreset.enable-defaults", true)); final JPanel panel = new JPanel(new GridBagLayout()); panel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 )); panel.add(sortMenu, GBC.eol().insets(5,5,5,0)); panel.add(enableDefault, GBC.eol().insets(5,0,5,0)); sources = new StyleSourceEditor("taggingpreset.sources", "taggingpreset.icon.sources", "http://josm.openstreetmap.de/presets"); panel.add(sources, GBC.eol().fill(GBC.BOTH)); gui.mapcontent.addTab(tr("Tagging Presets"), panel); // this defers loading of tagging preset sources to the first time the tab // with the tagging presets is selected by the user // gui.mapcontent.addChangeListener( new ChangeListener() { public void stateChanged(ChangeEvent e) { if (gui.mapcontent.getSelectedComponent() == panel) { sources.initiallyLoadAvailableStyles(); } } } ); } public boolean ok() { boolean restart = Main.pref.put("taggingpreset.enable-defaults", enableDefault.getSelectedObjects() != null); if(Main.pref.put("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null)) { restart = true; } if(sources.finish()) { restart = true; } return restart; } /** * Initialize the tagging presets (load and may display error) */ public static void initialize() { taggingPresets = TaggingPreset.readFromPreferences(); if (taggingPresets.isEmpty()) { Main.main.menu.presetsMenu.setVisible(false); } else { AutoCompletionCache.cachePresets(taggingPresets); HashMap<TaggingPresetMenu,JMenu> submenus = new HashMap<TaggingPresetMenu,JMenu>(); for (final TaggingPreset p : taggingPresets) { JMenu m = p.group != null ? submenus.get(p.group) : Main.main.menu.presetsMenu; if (p instanceof TaggingPresetSeparator) { m.add(new JSeparator()); } else if (p instanceof TaggingPresetMenu) { JMenu submenu = new JMenu(p); submenu.setText(p.getLocaleName()); ((TaggingPresetMenu)p).menu = submenu; submenus.put((TaggingPresetMenu)p, submenu); m.add(submenu); } else { JMenuItem mi = new JMenuItem(p); mi.setText(p.getLocaleName()); m.add(mi); } } } if(Main.pref.getBoolean("taggingpreset.sortmenu")) { TaggingPresetMenu.sortMenu(Main.main.menu.presetsMenu); } } }