Changeset 1886 in josm


Ignore:
Timestamp:
2009-08-02T20:59:26+02:00 (16 years ago)
Author:
Gubaer
Message:

fixed #3154 : readd relation member selection feature

Location:
trunk/src/org/openstreetmap/josm/gui/dialogs
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r1868 r1886  
    99import java.awt.event.MouseAdapter;
    1010import java.awt.event.MouseEvent;
     11import java.util.Collection;
     12import java.util.HashSet;
    1113
    1214import javax.swing.AbstractAction;
     
    2325import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2426import org.openstreetmap.josm.data.osm.Relation;
     27import org.openstreetmap.josm.data.osm.RelationMember;
    2528import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    2629import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     
    3538import org.openstreetmap.josm.tools.Shortcut;
    3639
     40import com.sun.corba.se.spi.legacy.connection.GetEndPointInfoAgainException;
     41
    3742/**
    3843 * A dialog showing all known relations, with buttons to add, edit, and
     
    245250            setEnabled(false);
    246251        }
     252        protected Collection<RelationMember> getMembersForCurrentSelection(Relation r) {
     253            Collection<RelationMember> members = new HashSet<RelationMember>();
     254            Collection<OsmPrimitive> selection = Main.map.mapView.getEditLayer().data.getSelected();
     255            for (RelationMember member: r.members) {
     256                if (selection.contains(member.member)) {
     257                    members.add(member);
     258                }
     259            }
     260            return members;
     261        }
    247262
    248263        public void run() {
     
    251266            if (toEdit == null)
    252267                return;
    253             RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, null).setVisible(true);
     268            RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, getMembersForCurrentSelection(toEdit)).setVisible(true);
    254269        }
    255270
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r1878 r1886  
    2424import java.util.Collection;
    2525import java.util.Collections;
     26import java.util.HashSet;
    2627import java.util.Iterator;
    2728import java.util.List;
     
    8384 * This dialog is for editing relations.
    8485 *
    85  * In the basic form, it provides two tables, one with the relation tags and one with the relation
    86  * members. (Relation tags can be edited through the normal properties dialog as well, if you manage
    87  * to get a relation selected!)
    88  *
    89  * @author Frederik Ramm <frederik@remote.org>
    90  *
    9186 */
    9287public class GenericRelationEditor extends RelationEditor {
     
    146141            this.memberTableModel.populate(null);
    147142        }
    148         memberTableModel.setSelectedMembers(selectedMembers);
    149143        tagEditorModel.ensureOneTag();
    150144
     
    196190        );
    197191
     192        memberTableModel.setSelectedMembers(selectedMembers);
    198193    }
    199194
     
    331326        memberTable.getSelectionModel().addListSelectionListener(new SelectionSynchronizer());
    332327        memberTable.addMouseListener(new MemberTableDblClickAdapter());
     328        memberTableModel.addMemberModelListener(memberTable);
    333329
    334330        final JScrollPane scrollPane = new JScrollPane(memberTable);
     
    13891385        }
    13901386
     1387        protected Collection<RelationMember> getMembersForCurrentSelection(Relation r) {
     1388            Collection<RelationMember> members = new HashSet<RelationMember>();
     1389            Collection<OsmPrimitive> selection = getLayer().data.getSelected();
     1390            for (RelationMember member: r.members) {
     1391                if (selection.contains(member.member)) {
     1392                    members.add(member);
     1393                }
     1394            }
     1395            return members;
     1396        }
     1397
    13911398        public void run() {
    13921399            int idx = memberTable.getSelectedRow();
     
    13991406            if (r.incomplete)
    14001407                return;
    1401             RelationEditor editor = RelationEditor.getEditor(getLayer(), r, null);
     1408
     1409            RelationEditor editor = RelationEditor.getEditor(getLayer(), r, getMembersForCurrentSelection(r));
    14021410            editor.setVisible(true);
    14031411        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r1857 r1886  
    374374        ArrayList<Integer> selectedIndices = new ArrayList<Integer>();
    375375        for (RelationMember member : selectedMembers) {
    376             int idx = members.indexOf(member);
    377             if (idx >= 0 && !selectedIndices.contains(idx)) {
    378                 selectedIndices.add(idx);
     376            for (int idx = 0; idx < members.size(); idx ++) {
     377                if (members.get(idx).equals(member)) {
     378                    if (!selectedIndices.contains(idx)) {
     379                        selectedIndices.add(idx);
     380                    }
     381                }
    379382            }
    380383        }
     
    487490         */
    488491
    489         if (map.isEmpty()) {
     492        if (map.isEmpty())
    490493            // empty relation or incomplete members
    491494            return;
    492         }
    493495        segments = new Vector<LinkedList<Integer>>();
    494496
Note: See TracChangeset for help on using the changeset viewer.