Changeset 13957 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs
- Timestamp:
- 2018-06-18T21:53:59+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
r13926 r13957 35 35 import org.openstreetmap.josm.Main; 36 36 import org.openstreetmap.josm.actions.ExpertToggleAction; 37 import org.openstreetmap.josm.actions. OsmPrimitiveAction;37 import org.openstreetmap.josm.actions.IPrimitiveAction; 38 38 import org.openstreetmap.josm.actions.relation.AddSelectionToRelations; 39 39 import org.openstreetmap.josm.actions.relation.DeleteRelationsAction; … … 50 50 import org.openstreetmap.josm.data.osm.DefaultNameFormatter; 51 51 import org.openstreetmap.josm.data.osm.IPrimitive; 52 import org.openstreetmap.josm.data.osm.IRelation; 53 import org.openstreetmap.josm.data.osm.OsmData; 52 54 import org.openstreetmap.josm.data.osm.OsmPrimitive; 53 55 import org.openstreetmap.josm.data.osm.Relation; … … 72 74 import org.openstreetmap.josm.gui.SideButton; 73 75 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 74 import org.openstreetmap.josm.gui.layer.Layer;75 76 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; 76 77 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; … … 79 80 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 80 81 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 81 import org.openstreetmap.josm.gui.layer.OsmDataLayer;82 82 import org.openstreetmap.josm.gui.util.HighlightHelper; 83 83 import org.openstreetmap.josm.gui.widgets.CompileSearchTextDecorator; … … 90 90 import org.openstreetmap.josm.tools.Shortcut; 91 91 import org.openstreetmap.josm.tools.SubclassFilteredCollection; 92 import org.openstreetmap.josm.tools.Utils; 92 93 93 94 /** … … 100 101 implements DataSetListener, NavigatableComponent.ZoomChangeListener, ExpertToggleAction.ExpertModeChangeListener { 101 102 /** The display list. */ 102 private final JList< Relation> displaylist;103 private final JList<IRelation<?>> displaylist; 103 104 /** the list model used */ 104 105 private final RelationListModel model; … … 222 223 // inform all actions about list of relations they need 223 224 private void updateActionsRelationLists() { 224 List< Relation> sel = model.getSelectedRelations();225 List<IRelation<?>> sel = model.getSelectedRelations(); 225 226 popupMenuHandler.setPrimitives(sel); 226 227 … … 228 229 229 230 //update highlights 230 if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView() && highlightHelper.highlightOnly(sel)) { 231 if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView() 232 && highlightHelper.highlightOnly(Utils.filteredCollection(sel, Relation.class))) { 231 233 MainApplication.getMap().mapView.repaint(); 232 234 } … … 261 263 262 264 /** 263 * Initializes the relation list dialog from a layer. If <code>layer</code> is null264 * or if it isn't an {@link OsmDataLayer}the dialog is reset to an empty dialog.265 * Initializes the relation list dialog from a dataset. If <code>data</code> is null 266 * the dialog is reset to an empty dialog. 265 267 * Otherwise it is initialized with the list of non-deleted and visible relations 266 * in the layer'sdataset.268 * in the dataset. 267 269 * 268 * @param layer the layer. May be null. 269 */ 270 protected void initFromLayer(Layer layer) { 271 if (!(layer instanceof OsmDataLayer)) { 270 * @param data the dataset. May be null. 271 * @since 13957 272 */ 273 protected void initFromData(OsmData<?, ?, ?, ?> data) { 274 if (data == null) { 272 275 model.setRelations(null); 273 276 return; 274 277 } 275 OsmDataLayer l = (OsmDataLayer) layer; 276 model.setRelations(l.data.getRelations()); 278 model.setRelations(data.getRelations()); 277 279 model.updateTitle(); 278 280 updateActionsRelationLists(); … … 282 284 * @return The selected relation in the list 283 285 */ 284 private RelationgetSelected() {286 private IRelation<?> getSelected() { 285 287 if (model.getSize() == 1) { 286 288 displaylist.setSelectedIndex(0); … … 301 303 * Selects the relations in the list of relations. 302 304 * @param relations the relations to be selected 303 */ 304 public void selectRelations(Collection<Relation> relations) { 305 * @since 13957 (signature) 306 */ 307 public void selectRelations(Collection<? extends IRelation<?>> relations) { 305 308 if (relations == null || relations.isEmpty()) { 306 309 model.setSelectedRelations(null); … … 348 351 349 352 protected void editCurrentRelation() { 350 EditRelationAction.launchEditor(getSelected()); 353 IRelation<?> rel = getSelected(); 354 if (rel instanceof Relation) { 355 EditRelationAction.launchEditor((Relation) rel); 356 } 351 357 } 352 358 … … 412 418 * The list model for the list of relations displayed in the relation list dialog. 413 419 */ 414 private class RelationListModel extends AbstractListModel< Relation> {415 private final transient List< Relation> relations = new ArrayList<>();416 private transient List< Relation> filteredRelations;420 private class RelationListModel extends AbstractListModel<IRelation<?>> { 421 private final transient List<IRelation<?>> relations = new ArrayList<>(); 422 private transient List<IRelation<?>> filteredRelations; 417 423 private final DefaultListSelectionModel selectionModel; 418 424 private transient SearchCompiler.Match filter; … … 439 445 } 440 446 441 private boolean isValid( Relationr) {447 private boolean isValid(IRelation<?> r) { 442 448 return !r.isDeleted() && !r.isIncomplete(); 443 449 } 444 450 445 public void setRelations(Collection< Relation> relations) {446 List< Relation> sel = getSelectedRelations();451 public void setRelations(Collection<? extends IRelation<?>> relations) { 452 List<IRelation<?>> sel = getSelectedRelations(); 447 453 this.relations.clear(); 448 454 this.filteredRelations = null; … … 452 458 return; 453 459 } 454 for ( Relationr: relations) {460 for (IRelation<?> r: relations) { 455 461 if (isValid(r)) { 456 462 this.relations.add(r); … … 487 493 } 488 494 if (added) { 489 List< Relation> sel = getSelectedRelations();495 List<IRelation<?>> sel = getSelectedRelations(); 490 496 sort(); 491 497 updateFilteredRelations(); … … 520 526 } 521 527 if (size != relations.size()) { 522 List< Relation> sel = getSelectedRelations();528 List<IRelation<?>> sel = getSelectedRelations(); 523 529 sort(); 524 530 fireContentsChanged(this, 0, getSize()); … … 538 544 this.filter = filter; 539 545 updateFilteredRelations(); 540 List< Relation> sel = getSelectedRelations();546 List<IRelation<?>> sel = getSelectedRelations(); 541 547 fireContentsChanged(this, 0, getSize()); 542 548 setSelectedRelations(sel); … … 544 550 } 545 551 546 private List< Relation> getVisibleRelations() {552 private List<IRelation<?>> getVisibleRelations() { 547 553 return filteredRelations == null ? relations : filteredRelations; 548 554 } 549 555 550 private RelationgetVisibleRelation(int index) {556 private IRelation<?> getVisibleRelation(int index) { 551 557 if (index < 0 || index >= getVisibleRelations().size()) return null; 552 558 return getVisibleRelations().get(index); … … 554 560 555 561 @Override 556 public RelationgetElementAt(int index) {562 public IRelation<?> getElementAt(int index) { 557 563 return getVisibleRelation(index); 558 564 } … … 568 574 * 569 575 * @return the list of selected, non-new relations. 576 * @since 13957 (signature) 570 577 */ 571 public List< Relation> getSelectedRelations() {572 List< Relation> ret = new ArrayList<>();578 public List<IRelation<?>> getSelectedRelations() { 579 List<IRelation<?>> ret = new ArrayList<>(); 573 580 for (int i = 0; i < getSize(); i++) { 574 581 if (!selectionModel.isSelectedIndex(i)) { … … 584 591 * 585 592 * @param sel the list of selected relations 593 * @since 13957 (signature) 586 594 */ 587 public void setSelectedRelations(Collection< Relation> sel) {595 public void setSelectedRelations(Collection<? extends IRelation<?>> sel) { 588 596 selectionModel.setValueIsAdjusting(true); 589 597 selectionModel.clearSelection(); … … 592 600 resetFilter(); 593 601 } 594 for ( Relationr: sel) {602 for (IRelation<?> r: sel) { 595 603 Integer i = getVisibleRelationIndex(r); 596 604 if (i != null) { … … 602 610 } 603 611 604 private Integer getVisibleRelationIndex( Relationrel) {612 private Integer getVisibleRelationIndex(IRelation<?> rel) { 605 613 int i = getVisibleRelations().indexOf(rel); 606 614 if (i < 0) … … 655 663 public void popupMenuWillBecomeVisible(PopupMenuEvent e) { 656 664 for (JMenuItem mi: checkDisabled) { 657 mi.setVisible((( OsmPrimitiveAction) mi.getAction()).isEnabled());665 mi.setVisible(((IPrimitiveAction) mi.getAction()).isEnabled()); 658 666 659 667 Component sep = popupMenu.getComponent( … … 692 700 * Replies the list of selected relations. Empty list, if there are no selected relations. 693 701 * @return the list of selected, non-new relations. 694 */ 695 public Collection<Relation> getSelectedRelations() { 702 * @since 13957 (signature) 703 */ 704 public Collection<IRelation<?>> getSelectedRelations() { 696 705 return model.getSelectedRelations(); 697 706 } … … 725 734 @Override 726 735 public void relationMembersChanged(final RelationMembersChangedEvent event) { 727 List< Relation> sel = model.getSelectedRelations();736 List<IRelation<?>> sel = model.getSelectedRelations(); 728 737 model.sort(); 729 738 model.setSelectedRelations(sel); … … 737 746 return; 738 747 // trigger a sort of the relation list because the display name may have changed 739 List< Relation> sel = model.getSelectedRelations();748 List<IRelation<?>> sel = model.getSelectedRelations(); 740 749 model.sort(); 741 750 model.setSelectedRelations(sel); … … 745 754 @Override 746 755 public void dataChanged(DataChangedEvent event) { 747 initFrom Layer(MainApplication.getLayerManager().getActiveDataLayer());756 initFromData(MainApplication.getLayerManager().getActiveData()); 748 757 } 749 758
Note:
See TracChangeset
for help on using the changeset viewer.