001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.shortcut;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import javax.swing.JPanel;
007
008import org.openstreetmap.josm.gui.help.HelpUtil;
009import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
010import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
011import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
012import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
013import org.openstreetmap.josm.tools.GBC;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017 * Keyboard shortcut preferences.
018 */
019public final class ShortcutPreference extends DefaultTabPreferenceSetting {
020
021    private String defaultFilter;
022
023    /**
024     * Factory used to create a new {@code ShortcutPreference}.
025     */
026    public static class Factory implements PreferenceSettingFactory {
027        @Override
028        public PreferenceSetting createPreferenceSetting() {
029            return new ShortcutPreference();
030        }
031    }
032
033    private ShortcutPreference() {
034        super(/* ICON(preferences/) */ "shortcuts", tr("Keyboard Shortcuts"), tr("Changing keyboard shortcuts manually."));
035    }
036
037    @Override
038    public void addGui(PreferenceTabbedPane gui) {
039        JPanel p = gui.createPreferenceTab(this);
040
041        PrefJPanel prefpanel = new PrefJPanel();
042        p.add(prefpanel, GBC.eol().fill(GBC.BOTH));
043        if (defaultFilter != null) {
044            prefpanel.filter(defaultFilter);
045        }
046    }
047
048    @Override
049    public boolean ok() {
050        return Shortcut.savePrefs();
051    }
052
053    /**
054     * Sets the default filter used to show only shortcuts with descriptions containing given substring.
055     * @param substring The substring used to filter
056     * @see PrefJPanel#filter(String)
057     */
058    public void setDefaultFilter(String substring) {
059        defaultFilter = substring;
060    }
061
062    @Override
063    public String getHelpContext() {
064        return HelpUtil.ht("/Preferences/Shortcuts");
065    }
066}