Ticket #147: bi-combo

File bi-combo, 3.3 KB (added by guilhem.bonnefille@…, 18 years ago)

Small and dirty hack to "link" key and value fields

Line 
1Orients adding properties
2
3From: <>
4
5
6---
7
8 .../josm/gui/dialogs/PropertiesDialog.java | 39 +++++++++++++++++++----
9 1 files changed, 32 insertions(+), 7 deletions(-)
10
11diff --git a/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
12index 80ee10a..36e9f58 100644
13--- a/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
14+++ b/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
15@@ -23,6 +23,7 @@ import java.util.Vector;
16 import java.util.Map.Entry;
17
18 import javax.swing.Box;
19+import javax.swing.ComboBoxModel;
20 import javax.swing.DefaultComboBoxModel;
21 import javax.swing.JButton;
22 import javax.swing.JComboBox;
23@@ -177,20 +178,44 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
24 JPanel p = new JPanel(new BorderLayout());
25 p.add(new JLabel("<html>"+trn("This will change {0} object.","This will change {0} objects.", sel.size(),sel.size())+"<br><br>"+tr("Please select a key")),
26 BorderLayout.NORTH);
27- TreeSet<String> allKeys = new TreeSet<String>();
28- for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives())
29- allKeys.addAll(osm.keySet());
30+ final TreeMap<String,TreeSet<String>> allData = new TreeMap<String,TreeSet<String>>();
31+ for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives()) {
32+ for (String key : osm.keySet()) {
33+ TreeSet<String> values = null;
34+ if (allData.containsKey(key))
35+ values = allData.get(key);
36+ else {
37+ values = new TreeSet<String>();
38+ allData.put(key, values);
39+ }
40+ values.add(osm.get(key));
41+ }
42+ }
43 for (int i = 0; i < data.getRowCount(); ++i)
44- allKeys.remove(data.getValueAt(i, 0));
45- final JComboBox keys = new JComboBox(new Vector<String>(allKeys));
46+ allData.remove(data.getValueAt(i, 0));
47+ final JComboBox keys = new JComboBox(new Vector<String>(allData.keySet()));
48 keys.setEditable(true);
49 p.add(keys, BorderLayout.CENTER);
50
51 JPanel p2 = new JPanel(new BorderLayout());
52 p.add(p2, BorderLayout.SOUTH);
53 p2.add(new JLabel(tr("Please select a value")), BorderLayout.NORTH);
54- final JTextField values = new JTextField();
55+ final JComboBox values = new JComboBox();
56+ values.setEditable(true);
57 p2.add(values, BorderLayout.CENTER);
58+
59+ ActionListener link = new ActionListener() {
60+
61+ public void actionPerformed(ActionEvent e) {
62+ String key = keys.getEditor().getItem().toString();
63+ Vector<String> newValues = new Vector<String>(allData.get(key));
64+ values.setModel(new DefaultComboBoxModel(newValues));
65+
66+ }
67+
68+ };
69+ keys.addActionListener(link);
70+
71 JOptionPane pane = new JOptionPane(p, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION){
72 @Override public void selectInitialValue() {
73 keys.requestFocusInWindow();
74@@ -201,7 +226,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi
75 if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(pane.getValue()))
76 return;
77 String key = keys.getEditor().getItem().toString();
78- String value = values.getText();
79+ String value = values.getEditor().getItem().toString();
80 if (value.equals(""))
81 return;
82 Main.main.editLayer().add(new ChangePropertyCommand(sel, key, value));