Changeset 1554 in josm
- Timestamp:
- 2009-04-24T16:08:34+02:00 (15 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/gui/dialogs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
r1499 r1554 71 71 72 72 /** 73 * True if the relation is ordered (API 0.6). False for API 0.5.74 */75 boolean ordered;76 77 /**78 73 * The property data. 79 74 */ … … 104 99 private final JTable propertyTable = new JTable(propertyData); 105 100 private final JTable memberTable = new JTable(memberData); 106 107 // =================== FIXME =====================108 // As soon as API 0.5 is dead, drop all the collation stuff from here ...109 110 /**111 * Collator for sorting the roles and entries of the member table.112 */113 private static final Collator collator;114 static {115 collator = Collator.getInstance();116 collator.setStrength(Collator.PRIMARY);117 }118 119 /**120 * Compare role strings.121 */122 private static int compareRole(String s1, String s2) {123 int last1 = s1.lastIndexOf('_');124 if (last1 > 0) {125 int last2 = s2.lastIndexOf('_');126 if (last2 == last1) {127 String prefix1 = s1.substring(0, last1);128 String prefix2 = s2.substring(0, last2);129 130 if (prefix1.equalsIgnoreCase(prefix2)) {131 // Both roles have the same prefix, now determine the132 // suffix.133 String suffix1 = s1.substring(last1 + 1, s1.length());134 String suffix2 = s2.substring(last2 + 1, s2.length());135 136 if (suffix1.matches("\\d+") && suffix2.matches("\\d+")) {137 // Suffix is an number -> compare it.138 int i1 = Integer.parseInt(suffix1);139 int i2 = Integer.parseInt(suffix2);140 141 return i1 - i2;142 }143 }144 }145 }146 if(s1.length() == 0 && s2.length() != 0)147 return 1;148 else if(s2.length() == 0 && s1.length() != 0)149 return -1;150 151 // Default handling if the role name is nothing like "stop_xx"152 return collator.compare(s1, s2);153 }154 155 156 /**157 * Compare two OsmPrimitives.158 */159 private static int compareMembers(OsmPrimitive o1, OsmPrimitive o2) {160 return collator.compare(o1.getName(), o2.getName());161 }162 163 private final Comparator<RelationMember> memberComparator = new Comparator<RelationMember>() {164 public int compare(RelationMember r1, RelationMember r2) {165 int roleResult = compareRole(r1.role, r2.role);166 167 if (roleResult == 0)168 roleResult = compareMembers(r1.member, r2.member);169 170 return roleResult;171 }172 };173 174 // =================== FIXME FIXME FIXME =====================175 // ... until here, and also get rid of the "Collections.sort..." below.176 101 177 102 // We need this twice, so cache result … … 214 139 215 140 this.relation = relation; 216 ordered = !Main.pref.get("osm-server.version", "0.5").equals("0.5");217 141 218 142 if (relation == null) { … … 222 146 // edit an existing relation 223 147 this.clone = new Relation(relation); 224 if (!ordered) Collections.sort(this.clone.members, memberComparator);225 148 } 226 149 … … 346 269 */ 347 270 private JPanel setupBasicButtons() { 348 JPanel buttonPanel = new JPanel(new GridLayout(2,ordered ? 3 : 2)); 349 350 if (ordered) { 351 buttonPanel.add(createButton(marktr("Move Up"), "moveup", tr("Move the currently selected members up"), KeyEvent.VK_N, new ActionListener() { 352 public void actionPerformed(ActionEvent e) { 353 moveMembers(-1); 354 } 355 })); 356 } 271 JPanel buttonPanel = new JPanel(new GridLayout(2, 3)); 272 273 buttonPanel.add(createButton(marktr("Move Up"), "moveup", tr("Move the currently selected members up"), KeyEvent.VK_N, new ActionListener() { 274 public void actionPerformed(ActionEvent e) { 275 moveMembers(-1); 276 } 277 })); 357 278 358 279 buttonPanel.add(createButton(marktr("Add Selected"),"addselected", … … 370 291 })); 371 292 372 if(ordered) { 373 buttonPanel.add(createButton(marktr("Move Down"), "movedown", tr("Move the currently selected members down"), KeyEvent.VK_J, new ActionListener() { 374 public void actionPerformed(ActionEvent e) { 375 moveMembers(1); 376 } 377 })); 378 } 293 buttonPanel.add(createButton(marktr("Move Down"), "movedown", tr("Move the currently selected members down"), KeyEvent.VK_J, new ActionListener() { 294 public void actionPerformed(ActionEvent e) { 295 moveMembers(1); 296 } 297 })); 379 298 380 299 buttonPanel.add(createButton(marktr("Remove"),"remove", … … 467 386 private void addSelected() { 468 387 for (OsmPrimitive p : Main.ds.getSelected()) { 469 boolean skip = false;470 388 // ordered relations may have the same member multiple times. 471 389 // TODO: visual indication of the fact that one is there more than once? 472 if (!ordered) 473 { 474 for (RelationMember rm : clone.members) { 475 if (rm.member == p || p == relation) 476 { 477 skip = true; 478 break; 479 } 480 } 481 } 482 if (!skip) 483 { 484 RelationMember em = new RelationMember(); 485 em.member = p; 486 em.role = ""; 487 // when working with ordered relations, we make an effort to 488 // add the element before the first selected member. 489 int[] rows = memberTable.getSelectedRows(); 490 if (ordered && rows.length > 0) { 491 clone.members.add(rows[0], em); 492 } else { 493 clone.members.add(em); 494 } 390 RelationMember em = new RelationMember(); 391 em.member = p; 392 em.role = ""; 393 // when working with ordered relations, we make an effort to 394 // add the element before the first selected member. 395 int[] rows = memberTable.getSelectedRows(); 396 if (rows.length > 0) { 397 clone.members.add(rows[0], em); 398 } else { 399 clone.members.add(em); 495 400 } 496 401 } -
trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
r1419 r1554 38 38 * delete them. 39 39 * 40 * We don't have such dialogs for nodes, segments, and ways, becaus those40 * We don't have such dialogs for nodes, segments, and ways, because those 41 41 * objects are visible on the map and can be selected there. Relations are not. 42 42 *
Note:
See TracChangeset
for help on using the changeset viewer.