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 java.util.List; 007 008import javax.swing.JPanel; 009import javax.swing.table.AbstractTableModel; 010 011import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting; 012import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 013import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory; 014import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; 015import org.openstreetmap.josm.tools.GBC; 016import org.openstreetmap.josm.tools.Shortcut; 017 018public final class ShortcutPreference extends DefaultTabPreferenceSetting { 019 020 private String defaultFilter; 021 022 public static class Factory implements PreferenceSettingFactory { 023 @Override 024 public PreferenceSetting createPreferenceSetting() { 025 return new ShortcutPreference(); 026 } 027 } 028 029 private ShortcutPreference() { 030 // icon source: http://www.iconfinder.net/index.php?q=key&page=icondetails&iconid=8553&size=128&q=key&s12=on&s16=on&s22=on&s32=on&s48=on&s64=on&s128=on 031 // icon licence: GPL 032 // icon designer: Paolino, http://www.paolinoland.it/ 033 // icon original filename: keyboard.png 034 // icon original size: 128x128 035 // modifications: icon was cropped, then resized 036 super("shortcuts", tr("Keyboard Shortcuts"), tr("Changing keyboard shortcuts manually.")); 037 } 038 039 @Override 040 public void addGui(PreferenceTabbedPane gui) { 041 JPanel p = gui.createPreferenceTab(this); 042 043 PrefJPanel prefpanel = new PrefJPanel(new ScListModel()); 044 p.add(prefpanel, GBC.eol().fill(GBC.BOTH)); 045 if (defaultFilter!=null) prefpanel.filter(defaultFilter); 046 } 047 048 @Override 049 public boolean ok() { 050 return Shortcut.savePrefs(); 051 } 052 053 public void setDefaultFilter(String substring) { 054 defaultFilter = substring; 055 } 056 057 // Maybe move this to prefPanel? There's no need for it to be here. 058 private static class ScListModel extends AbstractTableModel { 059 private String[] columnNames = new String[]{tr("Action"), tr("Shortcut")}; 060 private List<Shortcut> data; 061 062 public ScListModel() { 063 data = Shortcut.listAll(); 064 } 065 @Override 066 public int getColumnCount() { 067 return columnNames.length; 068 } 069 @Override 070 public int getRowCount() { 071 return data.size(); 072 } 073 @Override 074 public String getColumnName(int col) { 075 return columnNames[col]; 076 } 077 @Override 078 public Object getValueAt(int row, int col) { 079 return (col==0)? data.get(row).getLongText() : data.get(row); 080 } 081 @Override 082 public boolean isCellEditable(int row, int col) { 083 return false; 084 } 085 } 086}