Ticket #7449: shortcutSchemas.patch
| File shortcutSchemas.patch, 10.1 KB (added by , 14 years ago) |
|---|
-
org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
9 9 import java.awt.Insets; 10 10 import java.awt.Toolkit; 11 11 12 import java.awt.event.ActionEvent; 13 import java.awt.event.ActionListener; 12 14 import static org.openstreetmap.josm.tools.I18n.marktr; 13 15 import static org.openstreetmap.josm.tools.I18n.tr; 14 16 … … 16 18 import java.lang.reflect.Field; 17 19 import java.util.ArrayList; 18 20 import java.util.LinkedHashMap; 19 import java.util.HashMap;20 21 import java.util.Map; 21 22 22 23 import java.util.regex.PatternSyntaxException; … … 24 25 import javax.swing.BorderFactory; 25 26 import javax.swing.BoxLayout; 26 27 import javax.swing.DefaultComboBoxModel; 28 import javax.swing.JButton; 27 29 import javax.swing.JCheckBox; 28 30 import javax.swing.JComboBox; 29 import javax.swing.JEditorPane;30 31 import javax.swing.JLabel; 31 32 import javax.swing.JPanel; 32 33 import javax.swing.JScrollPane; … … 48 49 import javax.swing.table.TableRowSorter; 49 50 import org.openstreetmap.josm.Main; 50 51 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator; 52 import org.openstreetmap.josm.tools.GBC; 51 53 import org.openstreetmap.josm.tools.Shortcut; 54 import org.openstreetmap.josm.tools.ImageProvider; 52 55 53 56 /** 54 57 * This is the keyboard preferences content. … … 138 141 private JComboBox tfKey = new JComboBox(); 139 142 140 143 JTable shortcutTable = new JTable(); 144 145 JComboBox<String> cboxSchema = new JComboBox<String>(); 146 JButton saveButton = new JButton(ImageProvider.get("save")); 147 JButton loadButton = new JButton(ImageProvider.get("open")); 148 JButton resetButton = new JButton(ImageProvider.get("undo")); 141 149 142 150 private JTextField filterField = new JTextField(); 143 151 … … 247 255 // copied from PluginPreference 248 256 JPanel pnl = new JPanel(new GridBagLayout()); 249 257 pnl.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 250 GridBagConstraints gc = new GridBagConstraints(); 251 252 gc.anchor = GridBagConstraints.NORTHWEST; 253 gc.fill = GridBagConstraints.HORIZONTAL; 254 gc.weightx = 0.0; 255 gc.insets = new Insets(0,0,0,5); 256 pnl.add(new JLabel(tr("Search:")), gc); 257 258 gc.gridx = 1; 259 gc.weightx = 1.0; 260 pnl.add(filterField, gc); 258 259 pnl.add(new JLabel(tr("Search:")),GBC.std()); 260 pnl.add(filterField,GBC.std().fill(GBC.HORIZONTAL)); 261 261 filterField.setToolTipText(tr("Enter a search expression")); 262 262 SelectAllOnFocusGainedDecorator.decorate(filterField); 263 263 filterField.getDocument().addDocumentListener(new FilterFieldAdapter()); 264 pnl.setMaximumSize(new Dimension(300,10)); 264 pnl.add(new JLabel(tr("Schema:")),GBC.std().insets(10,0,0,0)); 265 266 final String presetsFolder = Main.pref.getPreferencesDir(); 267 rebuildSchemaList(presetsFolder); 268 pnl.add(cboxSchema,GBC.std().fill(GBC.HORIZONTAL).weight(0.5,1)); 269 pnl.add(loadButton,GBC.std().insets(10,0,0,0).weight(0.1, 1)); 270 pnl.add(saveButton,GBC.std().weight(0.1, 1)); 271 pnl.add(resetButton,GBC.std().weight(0.1, 1)); 272 273 loadButton.addActionListener(new ActionListener() { 274 @Override 275 public void actionPerformed(ActionEvent e) { 276 if (cboxSchema.getSelectedItem()==null) return; 277 ShortcutPresetsManager.resetShortcutsToDefaults(); 278 ShortcutPresetsManager.loadShortcutsFromFile(presetsFolder,cboxSchema.getSelectedItem().toString()); 279 model.fireTableDataChanged(); 280 }}); 281 282 saveButton.addActionListener(new ActionListener() { 283 @Override 284 public void actionPerformed(ActionEvent e) { 285 System.out.println(cboxSchema.getSelectedItem()); 286 if (cboxSchema.getSelectedItem()==null) return; 287 String sel = cboxSchema.getSelectedItem().toString().trim(); 288 if (sel.length()==0) return; 289 if (cboxSchema.getSelectedIndex()<0) { 290 sel=sel+".scm"; 291 ShortcutPresetsManager.saveShortcutsToFile(presetsFolder,sel); 292 rebuildSchemaList(presetsFolder); 293 cboxSchema.setSelectedItem(sel); 294 } else { 295 ShortcutPresetsManager.saveShortcutsToFile(presetsFolder,sel); 296 } 297 } 298 }); 299 300 resetButton.addActionListener(new ActionListener() { 301 @Override 302 public void actionPerformed(ActionEvent e) { 303 ShortcutPresetsManager.resetShortcutsToDefaults(); 304 model.fireTableDataChanged(); 305 } 306 }); 307 308 pnl.setMaximumSize(new Dimension(600,10)); 265 309 return pnl; 266 310 } 267 311 312 private void rebuildSchemaList(final String presetsFolder) { 313 cboxSchema.setModel(new DefaultComboBoxModel<String>( 314 ShortcutPresetsManager.getSchemaFileNames(presetsFolder))); 315 cboxSchema.setEditable(true); 316 } 317 268 318 private void disableAllModifierCheckboxes() { 269 319 cbDefault.setEnabled(false); 270 320 cbDisable.setEnabled(false); … … 317 367 } 318 368 } 319 369 public void actionPerformed(java.awt.event.ActionEvent e) { 370 // calls setAcssignedKey, setAdssignedUser, setAssignedModifier 320 371 ListSelectionModel lsm = panel.shortcutTable.getSelectionModel(); 321 372 if (lsm != null && !lsm.isSelectionEmpty()) { 322 373 if (e != null) { // only if we've been called by a user action … … 383 434 public void insertUpdate(DocumentEvent arg0) { filter(); } 384 435 public void removeUpdate(DocumentEvent arg0) { filter(); } 385 436 } 386 437 387 438 } -
org/openstreetmap/josm/gui/preferences/shortcut/ShortcutPresetsManager.java
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 package org.openstreetmap.josm.gui.preferences.shortcut; 6 7 import java.io.*; 8 import java.util.ArrayList; 9 import org.openstreetmap.josm.tools.Shortcut; 10 11 /** 12 * 13 * @author Alexei 14 */ 15 public class ShortcutPresetsManager { 16 17 public static void saveShortcutsToFile(String dir, String fileName) { 18 19 File f = new File(dir, fileName); 20 PrintWriter fw = null; 21 try { 22 fw = new PrintWriter(f); 23 for (Shortcut s : Shortcut.listAll()) { 24 String txt = s.getSettingsText(); 25 if (txt != null) fw.println(txt); 26 } 27 } catch (IOException ex) { 28 System.err.println("can not write file"); 29 } finally { 30 try { 31 if (fw != null) fw.close(); 32 } catch (Exception ex) { } 33 } 34 } 35 36 37 public static void loadShortcutsFromFile(String dir, String fileName) { 38 ArrayList<String> items = new ArrayList<String>(); 39 BufferedReader fr = null; 40 try { 41 File f = new File(dir, fileName); 42 fr = new BufferedReader(new FileReader(f)); 43 String s; 44 while ((s = fr.readLine()) != null) { 45 items.add(s); 46 } 47 } catch (IOException ex) { 48 System.err.println("can not read file"); 49 return; 50 } finally { 51 try { 52 if (fr != null) fr.close(); 53 } catch (IOException ex2) { } 54 } 55 for (String s : items) { 56 // System.out.println(s); 57 Shortcut.addOrModifyShortcutPreferences(s); 58 } 59 } 60 61 public static void resetShortcutsToDefaults() { 62 for (Shortcut s: Shortcut.listAll()) { 63 s.setAssignedUser(false); 64 } 65 } 66 public static String[] getSchemaFileNames(String dir) { 67 return new File(dir).list(new FilenameFilter() { 68 public boolean accept(File dir, String name) { 69 return name.endsWith(".scm"); 70 } 71 }); 72 73 } 74 75 } -
org/openstreetmap/josm/tools/Shortcut.java
184 184 String.valueOf(assignedModifier), String.valueOf(assignedDefault), String.valueOf(assignedUser)})); 185 185 } 186 186 } 187 187 188 public String getSettingsText() { 189 if (getAutomatic() || getReset() || !getAssignedUser()) { 190 return null; 191 } else { 192 return String.format("%s\t%s\t%d\t%d\t%d\t%d\t%s\t%s",shortText,longText,requestedKey,requestedGroup,assignedKey,assignedModifier, String.valueOf(assignedDefault), String.valueOf(assignedUser)); 193 } 194 } 195 196 public static void addOrModifyShortcutPreferences(String settingsText) { 197 String elems[] = settingsText.split("\t"); 198 String shortText = elems[0]; 199 Shortcut s = shortcuts.get(shortText); 200 s.longText = elems[1]; 201 s.requestedKey = Integer.parseInt(elems[2]); 202 s.requestedGroup = Integer.parseInt(elems[3]); 203 s.assignedKey = Integer.parseInt(elems[4]); 204 s.assignedModifier = Integer.parseInt(elems[5]); 205 s.assignedDefault = Boolean.parseBoolean(elems[6]); 206 s.assignedUser = Boolean.parseBoolean(elems[7]); 207 } 208 209 188 210 private boolean isSame(int isKey, int isModifier) { 189 211 // an unassigned shortcut is different from any other shortcut 190 212 return isKey == assignedKey && isModifier == assignedModifier && assignedModifier != getGroupModifier(NONE);
