Ticket #21889: 21889.patch

File 21889.patch, 1.7 KB (added by taylor.smock, 4 years ago)

Modify MemberTableModel#addMembersAtIndexKeepingOldSelection to have the implied behavior (keep the old selection)

  • src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    diff --git a/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java b/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
    index 1931138b4c..841902e701 100644
    a b implements TableModelListener, DataSelectionListener, DataSetListener, OsmPrimit  
    444444
    445445    void addMembersAtIndexKeepingOldSelection(final Iterable<RelationMember> newMembers, final int index) {
    446446        int idx = index;
     447        // Avoid having the inserted rows from being part of the selection. See JOSM #21889.
     448        int[] originalSelection = null;
     449        if (selectedIndices().anyMatch(selectedRow -> selectedRow == index)) {
     450            originalSelection = selectedIndices().toArray();
     451        }
    447452        for (RelationMember member : newMembers) {
    448453            members.add(idx++, member);
    449454        }
    450455        invalidateConnectionType();
    451456        fireTableRowsInserted(index, idx - 1);
     457        if (originalSelection != null) {
     458            final DefaultListSelectionModel model = this.getSelectionModel();
     459            model.setValueIsAdjusting(true);
     460            model.clearSelection();
     461            for (int row : originalSelection) {
     462                if (row < index) {
     463                    model.addSelectionInterval(row, row);
     464                } else {
     465                    model.addSelectionInterval(row + idx - index, row + idx - index);
     466                }
     467            }
     468            model.setValueIsAdjusting(false);
     469        }
    452470    }
    453471
    454472    public void addMembersAtBeginning(List<? extends OsmPrimitive> primitives) {