source: josm/src/org/openstreetmap/josm/gui/preferences/AdvancedPreference.java@ 171

Last change on this file since 171 was 171, checked in by imi, 17 years ago
  • fixed bug that properties in advanced preferences could not be deleted
  • added "selected" and "property:key=value" as search criteria
File size: 4.1 KB
Line 
1package org.openstreetmap.josm.gui.preferences;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.awt.Dimension;
6import java.awt.GridBagLayout;
7import java.awt.event.ActionEvent;
8import java.awt.event.ActionListener;
9import java.awt.event.MouseAdapter;
10import java.awt.event.MouseEvent;
11import java.util.Map;
12import java.util.TreeSet;
13import java.util.Map.Entry;
14
15import javax.swing.Box;
16import javax.swing.JButton;
17import javax.swing.JLabel;
18import javax.swing.JOptionPane;
19import javax.swing.JPanel;
20import javax.swing.JScrollPane;
21import javax.swing.JTable;
22import javax.swing.JTextField;
23import javax.swing.table.DefaultTableModel;
24
25import org.openstreetmap.josm.Main;
26import org.openstreetmap.josm.tools.GBC;
27
28public class AdvancedPreference implements PreferenceSetting {
29
30 private Map<String,String> orig;
31 private DefaultTableModel model;
32
33 public void addGui(final PreferenceDialog gui) {
34 JPanel p = gui.createPreferenceTab("advanced", tr("Advanced Preferences"), tr("Setting Preference entries directly. Use with caution!"));
35
36 model = new DefaultTableModel(new String[]{"Key", "Value"},0) {
37 @Override public boolean isCellEditable(int row, int column) {
38 return column != 0;
39 }
40 };
41 final JTable list = new JTable(model);
42 JScrollPane scroll = new JScrollPane(list);
43 p.add(scroll, GBC.eol().fill(GBC.BOTH));
44 scroll.setPreferredSize(new Dimension(400,200));
45
46 orig = Main.pref.getAllPrefix("");
47 orig.remove("osm-server.password");
48
49 for (String s : new TreeSet<String>(orig.keySet()))
50 model.addRow(new String[]{s, Main.pref.get(s)});
51
52 JButton add = new JButton(tr("Add"));
53 p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
54 p.add(add, GBC.std().insets(0,5,0,0));
55 add.addActionListener(new ActionListener(){
56 public void actionPerformed(ActionEvent e) {
57 JPanel p = new JPanel(new GridBagLayout());
58 p.add(new JLabel("Key"), GBC.std().insets(0,0,5,0));
59 JTextField key = new JTextField(10);
60 JTextField value = new JTextField(10);
61 p.add(key, GBC.eop().insets(5,0,0,0).fill(GBC.HORIZONTAL));
62 p.add(new JLabel("Value"), GBC.std().insets(0,0,5,0));
63 p.add(value, GBC.eol().insets(5,0,0,0).fill(GBC.HORIZONTAL));
64 int answer = JOptionPane.showConfirmDialog(gui, p, tr("Enter a new key/value pair"), JOptionPane.OK_CANCEL_OPTION);
65 if (answer == JOptionPane.OK_OPTION)
66 model.addRow(new String[]{key.getText(), value.getText()});
67 }
68 });
69
70 JButton edit = new JButton(tr("Edit"));
71 p.add(edit, GBC.std().insets(5,5,5,0));
72 edit.addActionListener(new ActionListener(){
73 public void actionPerformed(ActionEvent e) {
74 edit(gui, list);
75 }
76 });
77
78 JButton delete = new JButton(tr("Delete"));
79 p.add(delete, GBC.std().insets(0,5,0,0));
80 delete.addActionListener(new ActionListener(){
81 public void actionPerformed(ActionEvent e) {
82 if (list.getSelectedRowCount() == 0) {
83 JOptionPane.showMessageDialog(gui, tr("Please select the row to delete."));
84 return;
85 }
86 while (list.getSelectedRow() != -1)
87 model.removeRow(list.getSelectedRow());
88 }
89 });
90
91 list.addMouseListener(new MouseAdapter(){
92 @Override public void mouseClicked(MouseEvent e) {
93 if (e.getClickCount() == 2)
94 edit(gui, list);
95 }
96 });
97 }
98
99 public void ok() {
100 for (int i = 0; i < model.getRowCount(); ++i) {
101 String key = model.getValueAt(i,0).toString();
102 String value = model.getValueAt(i,1).toString();
103 String origValue = orig.get(key);
104 if (origValue == null || !origValue.equals(value))
105 Main.pref.put(key, value);
106 orig.remove(key); // processed.
107 }
108 for (Entry<String, String> e : orig.entrySet())
109 Main.pref.put(e.getKey(), null);
110 }
111
112
113 private void edit(final PreferenceDialog gui, final JTable list) {
114 if (list.getSelectedRowCount() != 1) {
115 JOptionPane.showMessageDialog(gui, tr("Please select the row to edit."));
116 return;
117 }
118 String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1));
119 if (v != null)
120 model.setValueAt(v, list.getSelectedRow(), 1);
121 }
122}
Note: See TracBrowser for help on using the repository browser.