Orients adding properties From: <> --- .../josm/gui/dialogs/PropertiesDialog.java | 39 +++++++++++++++++++---- 1 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java b/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java index 80ee10a..36e9f58 100644 --- a/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java +++ b/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java @@ -23,6 +23,7 @@ import java.util.Vector; import java.util.Map.Entry; import javax.swing.Box; +import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; @@ -177,20 +178,44 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi JPanel p = new JPanel(new BorderLayout()); p.add(new JLabel(""+trn("This will change {0} object.","This will change {0} objects.", sel.size(),sel.size())+"

"+tr("Please select a key")), BorderLayout.NORTH); - TreeSet allKeys = new TreeSet(); - for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives()) - allKeys.addAll(osm.keySet()); + final TreeMap> allData = new TreeMap>(); + for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives()) { + for (String key : osm.keySet()) { + TreeSet values = null; + if (allData.containsKey(key)) + values = allData.get(key); + else { + values = new TreeSet(); + allData.put(key, values); + } + values.add(osm.get(key)); + } + } for (int i = 0; i < data.getRowCount(); ++i) - allKeys.remove(data.getValueAt(i, 0)); - final JComboBox keys = new JComboBox(new Vector(allKeys)); + allData.remove(data.getValueAt(i, 0)); + final JComboBox keys = new JComboBox(new Vector(allData.keySet())); keys.setEditable(true); p.add(keys, BorderLayout.CENTER); JPanel p2 = new JPanel(new BorderLayout()); p.add(p2, BorderLayout.SOUTH); p2.add(new JLabel(tr("Please select a value")), BorderLayout.NORTH); - final JTextField values = new JTextField(); + final JComboBox values = new JComboBox(); + values.setEditable(true); p2.add(values, BorderLayout.CENTER); + + ActionListener link = new ActionListener() { + + public void actionPerformed(ActionEvent e) { + String key = keys.getEditor().getItem().toString(); + Vector newValues = new Vector(allData.get(key)); + values.setModel(new DefaultComboBoxModel(newValues)); + + } + + }; + keys.addActionListener(link); + JOptionPane pane = new JOptionPane(p, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION){ @Override public void selectInitialValue() { keys.requestFocusInWindow(); @@ -201,7 +226,7 @@ public class PropertiesDialog extends ToggleDialog implements SelectionChangedLi if (!Integer.valueOf(JOptionPane.OK_OPTION).equals(pane.getValue())) return; String key = keys.getEditor().getItem().toString(); - String value = values.getText(); + String value = values.getEditor().getItem().toString(); if (value.equals("")) return; Main.main.editLayer().add(new ChangePropertyCommand(sel, key, value));