// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions; import static org.openstreetmap.josm.gui.help.HelpUtil.ht; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.preferences.PreferenceDialog; import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting; import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting; import org.openstreetmap.josm.tools.CheckParameterUtil; import org.openstreetmap.josm.tools.Shortcut; import org.openstreetmap.josm.tools.Utils; /** * Open the Preferences dialog. * * @author imi */ public class PreferencesAction extends JosmAction implements Runnable { private final Class<? extends TabPreferenceSetting> tab; private final Class<? extends SubPreferenceSetting> subTab; private PreferencesAction(String name, String icon, String tooltip, Class<? extends TabPreferenceSetting> tab, Class<? extends SubPreferenceSetting> subTab) { super(name, icon, tooltip, null, false, "preference_" + Utils.<Class<?>>firstNonNull(tab, subTab).getName(), false); this.tab = tab; this.subTab = subTab; } /** * Returns a new {@code PreferenceAction} opening preferences dialog directly to the given tab, with default icon. * @param name The action name * @param tooltip The action tooltip * @param tab The preferences tab to select * @return The created action */ public static PreferencesAction forPreferenceTab(String name, String tooltip, Class<? extends TabPreferenceSetting> tab) { return forPreferenceTab(name, tooltip, tab, "preference"); } /** * Returns a new {@code PreferenceAction} opening preferences dialog directly to the given tab, with custom icon. * @param name The action name * @param tooltip The action tooltip * @param tab The preferences tab to select * @param icon The action icon * @return The created action * @since 6969 */ public static PreferencesAction forPreferenceTab(String name, String tooltip, Class<? extends TabPreferenceSetting> tab, String icon) { CheckParameterUtil.ensureParameterNotNull(tab); return new PreferencesAction(name, icon, tooltip, tab, null); } /** * Returns a new {@code PreferenceAction} opening preferences dialog directly to the given subtab, with default icon. * @param name The action name * @param tooltip The action tooltip * @param subTab The preferences subtab to select * @return The created action */ public static PreferencesAction forPreferenceSubTab(String name, String tooltip, Class<? extends SubPreferenceSetting> subTab) { return forPreferenceSubTab(name, tooltip, subTab, "preference"); } /** * Returns a new {@code PreferenceAction} opening preferences dialog directly to the given subtab, with custom icon. * @param name The action name * @param tooltip The action tooltip * @param subTab The preferences subtab to select * @param icon The action icon * @return The created action * @since 6969 */ public static PreferencesAction forPreferenceSubTab(String name, String tooltip, Class<? extends SubPreferenceSetting> subTab, String icon) { CheckParameterUtil.ensureParameterNotNull(subTab); return new PreferencesAction(name, icon, tooltip, null, subTab); } /** * Create the preference action with "Preferences" as label. */ public PreferencesAction() { super(tr("Preferences..."), "preference", tr("Open a preferences dialog for global settings."), Shortcut.registerShortcut("system:preferences", tr("Preferences"), KeyEvent.VK_F12, Shortcut.DIRECT), true); putValue("help", ht("/Action/Preferences")); this.tab = null; this.subTab = null; } /** * Launch the preferences dialog. */ @Override public void actionPerformed(ActionEvent e) { run(); } @Override public void run() { final PreferenceDialog p = new PreferenceDialog(Main.parent); if (tab != null) { p.selectPreferencesTabByClass(tab); } else if (subTab != null) { p.selectSubPreferencesTabByClass(subTab); } p.setVisible(true); } }