Ticket #2423: filter_preferences.patch
| File filter_preferences.patch, 8.2 KB (added by , 17 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java
### Eclipse Workspace Patch 1.0 #P JOSM
11 11 import java.awt.event.MouseAdapter; 12 12 import java.awt.event.MouseEvent; 13 13 import java.util.Map; 14 import java.util.TreeMap; 14 15 import java.util.TreeSet; 15 16 import java.util.Map.Entry; 16 17 … … 22 23 import javax.swing.JScrollPane; 23 24 import javax.swing.JTable; 24 25 import javax.swing.JTextField; 26 import javax.swing.event.DocumentEvent; 27 import javax.swing.event.DocumentListener; 25 28 import javax.swing.table.DefaultTableCellRenderer; 26 29 import javax.swing.table.DefaultTableModel; 27 30 … … 33 36 private Map<String,String> orig; 34 37 private Map<String,String> defaults; 35 38 private DefaultTableModel model; 39 protected Map<String, String> data; 40 protected JTextField txtFilter; 36 41 37 42 public void addGui(final PreferenceDialog gui) { 38 43 JPanel p = gui.createPreferenceTab("advanced", tr("Advanced Preferences"), 39 44 tr("Setting Preference entries directly. Use with caution!"), false); 45 46 txtFilter = new JTextField(); 47 JLabel lbFilter = new JLabel(tr("Search: ")); 48 lbFilter.setLabelFor(txtFilter); 49 p.add(lbFilter); 50 p.add(txtFilter, GBC.eol().fill(GBC.HORIZONTAL)); 51 txtFilter.getDocument().addDocumentListener(new DocumentListener(){ 52 public void changedUpdate(DocumentEvent e) { 53 action(); 54 } 55 56 public void insertUpdate(DocumentEvent e) { 57 action(); 58 } 59 60 public void removeUpdate(DocumentEvent e) { 61 action(); 62 } 63 64 private void action() { 65 dataToModel(); 66 } 67 }); 40 68 41 69 model = new DefaultTableModel(new String[]{tr("Key"), tr("Value")},0) { 42 70 @Override public boolean isCellEditable(int row, int column) { … … 72 100 defaults = Main.pref.getDefaults(); 73 101 orig.remove("osm-server.password"); 74 102 defaults.remove("osm-server.password"); 75 TreeSet<String> ts = new TreeSet<String>(orig.keySet()); 76 for (String s : defaults.keySet()) 77 { 78 if(!ts.contains(s)) 79 ts.add(s); 80 } 81 82 for (String s : ts) 83 { 84 String val = Main.pref.get(s); 85 if(val == null) val = ""; 86 model.addRow(new String[]{s, val}); 87 } 103 prepareData(); 104 dataToModel(); 88 105 89 106 JButton add = new JButton(tr("Add")); 90 107 p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL)); 91 108 p.add(add, GBC.std().insets(0,5,0,0)); 92 109 add.addActionListener(new ActionListener(){ 93 110 public void actionPerformed(ActionEvent e) { 94 JPanel p = new JPanel(new GridBagLayout()); 95 p.add(new JLabel(tr("Key")), GBC.std().insets(0,0,5,0)); 96 JTextField key = new JTextField(10); 97 JTextField value = new JTextField(10); 98 p.add(key, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL)); 99 p.add(new JLabel(tr("Value")), GBC.std().insets(0,0,5,0)); 100 p.add(value, GBC.eol().insets(5,0,0,0).fill(GBC.HORIZONTAL)); 101 int answer = JOptionPane.showConfirmDialog(gui, p, tr("Enter a new key/value pair"), JOptionPane.OK_CANCEL_OPTION); 102 if (answer == JOptionPane.OK_OPTION) 103 model.addRow(new String[]{key.getText(), value.getText()}); 111 addPreference(gui); 104 112 } 105 113 }); 106 114 … … 108 116 p.add(edit, GBC.std().insets(5,5,5,0)); 109 117 edit.addActionListener(new ActionListener(){ 110 118 public void actionPerformed(ActionEvent e) { 111 edit (gui, list);119 editPreference(gui, list); 112 120 } 113 121 }); 114 122 … … 116 124 p.add(delete, GBC.std().insets(0,5,0,0)); 117 125 delete.addActionListener(new ActionListener(){ 118 126 public void actionPerformed(ActionEvent e) { 119 if (list.getSelectedRowCount() == 0) { 120 JOptionPane.showMessageDialog(gui, tr("Please select the row to delete.")); 121 return; 122 } 123 for(int row: list.getSelectedRows()) 124 model.setValueAt("", row, 1); 127 removePreference(gui, list); 125 128 } 126 129 }); 127 130 128 131 list.addMouseListener(new MouseAdapter(){ 129 132 @Override public void mouseClicked(MouseEvent e) { 130 133 if (e.getClickCount() == 2) 131 edit (gui, list);134 editPreference(gui, list); 132 135 } 133 136 }); 134 137 } 135 138 139 private void prepareData() { 140 TreeSet<String> ts = new TreeSet<String>(orig.keySet()); 141 for (String s : defaults.keySet()) 142 { 143 if(!ts.contains(s)) 144 ts.add(s); 145 } 146 data = new TreeMap<String, String>(); 147 for (String s : ts) 148 { 149 String val = Main.pref.get(s); 150 if(val == null) val = ""; 151 data.put(s, val); 152 } 153 } 154 155 private void dataToModel() { 156 while (model.getRowCount() > 0) { 157 model.removeRow(0); 158 } 159 for (String prefKey : data.keySet()) { 160 String prefValue = data.get(prefKey); 161 if (prefKey.contains(txtFilter.getText()) || 162 prefValue.contains(txtFilter.getText())) { 163 model.addRow(new String[] {prefKey, prefValue}); 164 } 165 } 166 } 167 136 168 public boolean ok() { 137 for ( int i = 0; i < model.getRowCount(); ++i) {138 String value = model.getValueAt(i,1).toString();169 for (String key : data.keySet()) { 170 String value = data.get(key); 139 171 if(value.length() != 0) 140 172 { 141 String key = model.getValueAt(i,0).toString();142 173 String origValue = orig.get(key); 143 174 if (origValue == null || !origValue.equals(value)) 144 175 Main.pref.put(key, value); … … 151 182 } 152 183 153 184 154 private void edit (final PreferenceDialog gui, final JTable list) {185 private void editPreference(final PreferenceDialog gui, final JTable list) { 155 186 if (list.getSelectedRowCount() != 1) { 156 187 JOptionPane.showMessageDialog(gui, tr("Please select the row to edit.")); 157 188 return; 158 189 } 159 190 String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1)); 160 if (v != null) 191 if (v != null) { 192 data.put((String) model.getValueAt(list.getSelectedRow(), 0), v); 161 193 model.setValueAt(v, list.getSelectedRow(), 1); 194 } 195 } 196 197 private void removePreference(final PreferenceDialog gui, final JTable list) { 198 if (list.getSelectedRowCount() == 0) { 199 JOptionPane.showMessageDialog(gui, tr("Please select the row to delete.")); 200 return; 201 } 202 for(int row: list.getSelectedRows()) { 203 data.put((String) model.getValueAt(row, 0), ""); 204 model.setValueAt("", row, 1); 205 } 206 } 207 208 private void addPreference(final PreferenceDialog gui) { 209 JPanel p = new JPanel(new GridBagLayout()); 210 p.add(new JLabel(tr("Key")), GBC.std().insets(0,0,5,0)); 211 JTextField key = new JTextField(10); 212 JTextField value = new JTextField(10); 213 p.add(key, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL)); 214 p.add(new JLabel(tr("Value")), GBC.std().insets(0,0,5,0)); 215 p.add(value, GBC.eol().insets(5,0,0,0).fill(GBC.HORIZONTAL)); 216 int answer = JOptionPane.showConfirmDialog(gui, p, tr("Enter a new key/value pair"), JOptionPane.OK_CANCEL_OPTION); 217 if (answer == JOptionPane.OK_OPTION) { 218 data.put(key.getText(), value.getText()); 219 model.addRow(new String[]{key.getText(), value.getText()}); 220 } 162 221 } 163 222 }
