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.preferences.DefaultTabPreferenceSetting;
009import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
010import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
011import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
012import org.openstreetmap.josm.tools.GBC;
013import org.openstreetmap.josm.tools.Shortcut;
014
015/**
016 * Keyboard shortcut preferences.
017 */
018public final class ShortcutPreference extends DefaultTabPreferenceSetting {
019
020    private String defaultFilter;
021
022    /**
023     * Factory used to create a new {@code ShortcutPreference}.
024     */
025    public static class Factory implements PreferenceSettingFactory {
026        @Override
027        public PreferenceSetting createPreferenceSetting() {
028            return new ShortcutPreference();
029        }
030    }
031
032    private ShortcutPreference() {
033        super("shortcuts", tr("Keyboard Shortcuts"), tr("Changing keyboard shortcuts manually."));
034    }
035
036    @Override
037    public void addGui(PreferenceTabbedPane gui) {
038        JPanel p = gui.createPreferenceTab(this);
039
040        PrefJPanel prefpanel = new PrefJPanel();
041        p.add(prefpanel, GBC.eol().fill(GBC.BOTH));
042        if (defaultFilter != null) {
043            prefpanel.filter(defaultFilter);
044        }
045    }
046
047    @Override
048    public boolean ok() {
049        return Shortcut.savePrefs();
050    }
051
052    /**
053     * Sets the default filter used to show only shortcuts with descriptions containing given substring.
054     * @param substring The substring used to filter
055     * @see PrefJPanel#filter(String)
056     */
057    public void setDefaultFilter(String substring) {
058        defaultFilter = substring;
059    }
060}