- Timestamp:
- 2008-08-15T20:26:17+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
r765 r783 1 1 package org.openstreetmap.josm.gui.dialogs; 2 2 3 import static org.openstreetmap.josm.tools.I18n.marktr; 3 4 import static org.openstreetmap.josm.tools.I18n.tr; 4 import static org.openstreetmap.josm.tools.I18n.marktr;5 5 6 6 import java.awt.BorderLayout; … … 14 14 import java.beans.PropertyChangeListener; 15 15 import java.io.IOException; 16 import java.text.Collator; 16 17 import java.util.ArrayList; 18 import java.util.Comparator; 17 19 import java.util.Map.Entry; 18 20 19 21 import javax.swing.JButton; 20 import javax.swing.JDialog;21 22 import javax.swing.JFrame; 22 23 import javax.swing.JLabel; … … 30 31 import javax.swing.event.TableModelListener; 31 32 import javax.swing.table.DefaultTableModel; 33 import javax.swing.table.TableRowSorter; 32 34 33 35 import org.openstreetmap.josm.Main; … … 46 48 import org.xml.sax.SAXException; 47 49 50 48 51 /** 49 52 * This dialog is for editing relations. … … 59 62 public class RelationEditor extends JFrame { 60 63 64 65 61 66 /** 62 67 * The relation that this editor is working on, and the clone made for … … 96 101 private final JTable propertyTable = new JTable(propertyData); 97 102 private final JTable memberTable = new JTable(memberData); 103 104 /** 105 * Collator for sorting the roles and entries of the member table. 106 */ 107 private static final Collator collator; 108 static { 109 collator = Collator.getInstance(); 110 collator.setStrength(Collator.PRIMARY); 111 } 112 113 /** 114 * Comparator for member roles. Tries to sort even roles like "stop_nn" correct. 115 */ 116 private final Comparator<String> memberRoleComp = new Comparator<String>() { 117 public int compare(String s1, String s2) { 118 119 int last1 = s1.lastIndexOf('_'); 120 if (last1 > 0) { 121 int last2 = s2.lastIndexOf('_'); 122 if (last2 == last1) { 123 String prefix1 = s1.substring(0, last1); 124 String prefix2 = s2.substring(0, last2); 125 126 if (prefix1.equalsIgnoreCase(prefix2)) { 127 // Both roles have the same prefix, now determine the suffix. 128 String suffix1 = s1.substring(last1+1, s1.length()); 129 String suffix2 = s2.substring(last2+1, s2.length()); 130 131 if (suffix1.matches("\\d+") && suffix2.matches("\\d+")) { 132 // Suffix is an number -> compare it. 133 int i1 = Integer.parseInt(suffix1); 134 int i2 = Integer.parseInt(suffix2); 135 136 return i1 - i2; 137 } 138 } 139 } 140 } 141 142 // Default handling if the role name is nothing like "stop_xx" 143 return collator.compare(s1, s2); 144 145 } 146 }; 147 148 /** 149 * Comparator for the member names. 150 */ 151 private final Comparator<OsmPrimitive> memberValueComp = new Comparator<OsmPrimitive>() { 152 public int compare(OsmPrimitive o1, OsmPrimitive o2) { 153 return collator.compare(o1.getName(), o2.getName()); 154 } 155 }; 156 157 private final TableRowSorter<DefaultTableModel> memberSorter = new TableRowSorter<DefaultTableModel>(memberData); 98 158 99 159 /** … … 163 223 propertyData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")}); 164 224 propertyTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 225 165 226 propertyData.addTableModelListener(new TableModelListener() { 166 227 public void tableChanged(TableModelEvent tme) { … … 186 247 memberData.setColumnIdentifiers(new String[]{tr("Role"),tr("Occupied By")}); 187 248 memberTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); 249 188 250 memberTable.getColumnModel().getColumn(1).setCellRenderer(new OsmPrimitivRenderer()); 251 252 memberSorter.setComparator(0, memberRoleComp); 253 memberSorter.setComparator(1, memberValueComp); 254 memberTable.setRowSorter(memberSorter); 255 189 256 /* 190 257 memberTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
Note:
See TracChangeset
for help on using the changeset viewer.