Changeset 2563 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
- Timestamp:
- 03.12.2009 19:02:25 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
r2512 r2563 26 26 27 27 import org.openstreetmap.josm.Main; 28 import org.openstreetmap.josm.data.SelectionChangedListener; 28 29 import org.openstreetmap.josm.data.coor.EastNorth; 30 import org.openstreetmap.josm.data.osm.DataSetListener; 29 31 import org.openstreetmap.josm.data.osm.Node; 30 32 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 33 35 import org.openstreetmap.josm.data.osm.Way; 34 36 import org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction; 37 import org.openstreetmap.josm.gui.layer.DataChangeListener; 35 38 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 36 39 37 public class MemberTableModel extends AbstractTableModel implements TableModelListener {40 public class MemberTableModel extends AbstractTableModel implements TableModelListener, SelectionChangedListener, DataChangeListener, DataSetListener{ 38 41 39 42 /** … … 56 59 addTableModelListener(this); 57 60 } 61 62 public OsmDataLayer getLayer() { 63 return layer; 64 } 65 66 /* --------------------------------------------------------------------------- */ 67 /* Interface SelectionChangedListener */ 68 /* --------------------------------------------------------------------------- */ 69 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) { 70 if (Main.main.getEditLayer() != this.layer) return; 71 // just trigger a repaint 72 Collection<RelationMember> sel = getSelectedMembers(); 73 fireTableDataChanged(); 74 setSelectedMembers(sel); 75 } 76 77 /* --------------------------------------------------------------------------- */ 78 /* Interface DataChangeListener */ 79 /* --------------------------------------------------------------------------- */ 80 public void dataChanged(OsmDataLayer l) { 81 if (l != this.layer) return; 82 // just trigger a repaint 83 Collection<RelationMember> sel = getSelectedMembers(); 84 fireTableDataChanged(); 85 setSelectedMembers(sel); 86 } 87 /* --------------------------------------------------------------------------- */ 88 /* Interface DataSetListener */ 89 /* --------------------------------------------------------------------------- */ 90 public void dataChanged() { 91 // just trigger a repaint - the display name of the relation members may 92 // have changed 93 Collection<RelationMember> sel = getSelectedMembers(); 94 fireTableDataChanged(); 95 setSelectedMembers(sel); 96 } 97 98 public void nodeMoved(Node node) {/* ignore */} 99 public void primtivesAdded(Collection<? extends OsmPrimitive> added) {/* ignore */} 100 101 public void primtivesRemoved(Collection<? extends OsmPrimitive> removed) { 102 // ignore - the relation in the editor might become out of sync with the relation 103 // in the dataset. We will deal with it when the relation editor is closed or 104 // when the changes in the editor are applied. 105 } 106 107 public void relationMembersChanged(Relation r) { 108 // ignore - the relation in the editor might become out of sync with the relation 109 // in the dataset. We will deal with it when the relation editor is closed or 110 // when the changes in the editor are applied. 111 } 112 113 public void tagsChanged(OsmPrimitive prim) { 114 // just refresh the respective table cells 115 // 116 Collection<RelationMember> sel = getSelectedMembers(); 117 for (int i=0; i < members.size();i++) { 118 if (members.get(i).getMember() == prim) { 119 fireTableCellUpdated(i, 1 /* the column with the primitive name */); 120 } 121 } 122 setSelectedMembers(sel); 123 } 124 125 public void wayNodesChanged(Way way) {/* ignore */} 126 /* --------------------------------------------------------------------------- */ 58 127 59 128 public void addMemberModelListener(IMemberModelListener listener) { … … 242 311 } 243 312 313 /** 314 * Replies the set of incomplete primitives 315 * 316 * @return the set of incomplete primitives 317 */ 318 public Set<OsmPrimitive> getIncompleteMemberPrimitives() { 319 Set<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 320 for (RelationMember member : members) { 321 if (member.getMember().incomplete) { 322 ret.add(member.getMember()); 323 } 324 } 325 return ret; 326 } 327 328 /** 329 * Replies the set of selected incomplete primitives 330 * 331 * @return the set of selected incomplete primitives 332 */ 333 public Set<OsmPrimitive> getSelectedIncompleteMemberPrimitives() { 334 Set<OsmPrimitive> ret = new HashSet<OsmPrimitive>(); 335 for (RelationMember member : getSelectedMembers()) { 336 if (member.getMember().incomplete) { 337 ret.add(member.getMember()); 338 } 339 } 340 return ret; 341 } 342 343 /** 344 * Replies true if at least one the relation members is incomplete 345 * 346 * @return true if at least one the relation members is incomplete 347 */ 244 348 public boolean hasIncompleteMembers() { 245 349 for (RelationMember member : members) { 350 if (member.getMember().incomplete) 351 return true; 352 } 353 return false; 354 } 355 356 /** 357 * Replies true if at least one of the selected members is incomplete 358 * 359 * @return true if at least one of the selected members is incomplete 360 */ 361 public boolean hasIncompleteSelectedMembers() { 362 for (RelationMember member : getSelectedMembers()) { 246 363 if (member.getMember().incomplete) 247 364 return true; … … 408 525 409 526 /** 410 * Replies true, if the selected {@see OsmPrimitive}s in the layer belonging411 * to this model are in sync with the selected referers in this model.412 *413 * @return414 */415 public boolean selectionsAreInSync() {416 HashSet<OsmPrimitive> s1 = new HashSet<OsmPrimitive>(getSelectedChildPrimitives());417 if (s1.size() != layer.data.getSelected().size()) return false;418 s1.removeAll(layer.data.getSelected());419 return s1.isEmpty();420 }421 /**422 527 * Selects the members in the collection selectedMembers 423 528 * … … 425 530 */ 426 531 public void setSelectedMembers(Collection<RelationMember> selectedMembers) { 427 if (selectedMembers == null || selectedMembers.isEmpty()) 532 if (selectedMembers == null || selectedMembers.isEmpty()) { 533 getSelectionModel().clearSelection(); 428 534 return; 535 } 429 536 430 537 // lookup the indices for the respective members 431 538 // 432 ArrayList<Integer> selectedIndices = new ArrayList<Integer>();539 Set<Integer> selectedIndices = new HashSet<Integer>(); 433 540 for (RelationMember member : selectedMembers) { 434 for (int idx = 0; idx < members.size(); idx ++) { 435 if (members.get(idx).equals(member)) { 436 if (!selectedIndices.contains(idx)) { 437 selectedIndices.add(idx); 438 } 439 } 541 int idx = members.indexOf(member); 542 if ( idx >= 0) { 543 selectedIndices.add(idx); 440 544 } 441 545 } … … 443 547 // select the members 444 548 // 445 Collections.sort(selectedIndices);446 549 getSelectionModel().setValueIsAdjusting(true); 447 550 getSelectionModel().clearSelection(); … … 450 553 } 451 554 getSelectionModel().setValueIsAdjusting(false); 452 453 555 // make the first selected member visible 454 556 // 455 557 if (selectedIndices.size() > 0) { 456 fireMakeMemberVisible( selectedIndices.get(0));558 fireMakeMemberVisible(Collections.min(selectedIndices)); 457 559 } 458 560 } … … 523 625 fireMakeMemberVisible(getSelectedIndices().get(0)); 524 626 } 627 } 628 629 /** 630 * Replies true if <code>primitive</code> is currently selected in the layer this 631 * model is attached to 632 * 633 * @param primitive the primitive 634 * @return true if <code>primitive</code> is currently selected in the layer this 635 * model is attached to, false otherwise 636 */ 637 public boolean isInJosmSelection(OsmPrimitive primitive) { 638 return layer.data.isSelected(primitive); 525 639 } 526 640
Note: See TracChangeset
for help on using the changeset viewer.
