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

Last change on this file since 1180 was 1180, checked in by stoecker, 15 years ago

fixed bug #1871, removed all deprecations

  • Property svn:eol-style set to native
File size: 6.2 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.Dimension;
8import java.awt.GridBagLayout;
9import java.awt.event.ActionEvent;
10import java.awt.event.ActionListener;
11import java.awt.event.MouseAdapter;
12import java.awt.event.MouseEvent;
13import java.util.Map;
14import java.util.TreeSet;
15import java.util.Map.Entry;
16
17import javax.swing.Box;
18import javax.swing.JButton;
19import javax.swing.JLabel;
20import javax.swing.JOptionPane;
21import javax.swing.JPanel;
22import javax.swing.JScrollPane;
23import javax.swing.JTable;
24import javax.swing.JTextField;
25import javax.swing.table.DefaultTableCellRenderer;
26import javax.swing.table.DefaultTableModel;
27
28import org.openstreetmap.josm.Main;
29import org.openstreetmap.josm.tools.GBC;
30
31public class AdvancedPreference implements PreferenceSetting {
32
33 private Map<String,String> orig;
34 private Map<String,String> defaults;
35 private DefaultTableModel model;
36
37 public void addGui(final PreferenceDialog gui) {
38 JPanel p = gui.createPreferenceTab("advanced", tr("Advanced Preferences"),
39 tr("Setting Preference entries directly. Use with caution!"), false);
40
41 model = new DefaultTableModel(new String[]{tr("Key"), tr("Value")},0) {
42 @Override public boolean isCellEditable(int row, int column) {
43 return column != 0;
44 }
45 };
46 DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
47 public Component getTableCellRendererComponent(JTable table, Object value,
48 boolean isSelected, boolean hasFocus, int row, int column)
49 {
50 JLabel label=new JLabel();
51 String s = defaults.get(value);
52 if(s != null)
53 {
54 if(s.equals(model.getValueAt(row, 1)))
55 label.setToolTipText(tr("Current value is default."));
56 else
57 label.setToolTipText(tr("Default value is ''{0}''.", s));
58 }
59 else
60 label.setToolTipText(tr("Default value currently unknown (setting has not been used yet)."));
61 label.setText((String)value);
62 return label;
63 }
64 };
65 final JTable list = new JTable(model);
66 list.getColumn(tr("Key")).setCellRenderer(renderer);
67 JScrollPane scroll = new JScrollPane(list);
68 p.add(scroll, GBC.eol().fill(GBC.BOTH));
69 scroll.setPreferredSize(new Dimension(400,200));
70
71 orig = Main.pref.getAllPrefix("");
72 defaults = Main.pref.getDefaults();
73 orig.remove("osm-server.password");
74 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 }
88
89 JButton add = new JButton(tr("Add"));
90 p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
91 p.add(add, GBC.std().insets(0,5,0,0));
92 add.addActionListener(new ActionListener(){
93 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()});
104 }
105 });
106
107 JButton edit = new JButton(tr("Edit"));
108 p.add(edit, GBC.std().insets(5,5,5,0));
109 edit.addActionListener(new ActionListener(){
110 public void actionPerformed(ActionEvent e) {
111 edit(gui, list);
112 }
113 });
114
115 JButton delete = new JButton(tr("Delete"));
116 p.add(delete, GBC.std().insets(0,5,0,0));
117 delete.addActionListener(new ActionListener(){
118 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);
125 }
126 });
127
128 list.addMouseListener(new MouseAdapter(){
129 @Override public void mouseClicked(MouseEvent e) {
130 if (e.getClickCount() == 2)
131 edit(gui, list);
132 }
133 });
134 }
135
136 public boolean ok() {
137 for (int i = 0; i < model.getRowCount(); ++i) {
138 String value = model.getValueAt(i,1).toString();
139 if(value.length() != 0)
140 {
141 String key = model.getValueAt(i,0).toString();
142 String origValue = orig.get(key);
143 if (origValue == null || !origValue.equals(value))
144 Main.pref.put(key, value);
145 orig.remove(key); // processed.
146 }
147 }
148 for (Entry<String, String> e : orig.entrySet())
149 Main.pref.put(e.getKey(), null);
150 return false;
151 }
152
153
154 private void edit(final PreferenceDialog gui, final JTable list) {
155 if (list.getSelectedRowCount() != 1) {
156 JOptionPane.showMessageDialog(gui, tr("Please select the row to edit."));
157 return;
158 }
159 String v = JOptionPane.showInputDialog(tr("New value for {0}", model.getValueAt(list.getSelectedRow(), 0)), model.getValueAt(list.getSelectedRow(), 1));
160 if (v != null)
161 model.setValueAt(v, list.getSelectedRow(), 1);
162 }
163}
Note: See TracBrowser for help on using the repository browser.