Ticket #2643: linkedmembers.diff

File linkedmembers.diff, 4.0 KB (added by Teemu Koskinen <teemu.koskinen@…>, 17 years ago)
  • src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

     
    337337           
    338338            RelationMember em = clone.members.get(i);
    339339            boolean linked = false;
    340             Node n1 = null;
    341             Node n2 = null;
    342340            RelationMember m = em;
     341            RelationMember way1 = null;
     342            RelationMember way2 = null;
     343
    343344            while (m != null) {
    344345                if (m.member instanceof Way) {
    345                     n1 = ((Way) m.member).lastNode();
     346                    way1 = m;
    346347                    break;
    347                 } else if (em.member instanceof Relation) {
     348                } else if (m.member instanceof Relation) {
    348349                    m = ((Relation)m.member).lastMember();
    349350                } else {
    350351                    break;
    351352                }
    352353            }
    353             if (i<clone.members.size()-1) {
    354                 m = clone.members.get(i+1);
    355                 while (m != null) {
    356                     if (m.member instanceof Way) {
    357                         n2 = ((Way) (m.member)).firstNode();
     354            if (way1 != null) {
     355                int next = i+1;
     356                while (next < clone.members.size()) {
     357                    m = clone.members.get(next++);
     358                    while (m != null) {
     359                        if (m.member instanceof Way) {
     360                            way2 = m;
     361                            break;
     362                        } else if (m.member instanceof Relation) {
     363                            m = ((Relation)(m.member)).firstMember();
     364                        } else {
     365                            break;
     366                        }
     367                    }
     368                    if (way2 != null)
    358369                        break;
    359                     } else if (em.member instanceof Relation) {
    360                         m = ((Relation)(m.member)).firstMember();
    361                     } else {
    362                         break;
    363                     }
    364370                }
    365371            }
    366             linked = (n1 != null) && n1.equals(n2);
    367            
    368             // end of section to determine linkedness.
    369            
    370             memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")});
     372            if (way2 != null) {
     373                Node way1first = ((Way)(way1.member)).firstNode();
     374                Node way1last = ((Way)(way1.member)).lastNode();
     375                Node way2first = ((Way)(way2.member)).firstNode();
     376                Node way2last = ((Way)(way2.member)).lastNode();
     377                if (way1.role.equals("forward")) {
     378                    way1first = null;
     379                } else if (way1.role.equals("backward")) {
     380                    way1last = null;
     381                }
     382                if (way2.role.equals("forward")) {
     383                    way2last = null;
     384                } else if (way2.role.equals("backward")) {
     385                    way2first = null;
     386                }
     387
     388                if (way1first != null && way2first != null && way1first.equals(way2first)) {
     389                    linked = true;
     390                } else if (way1first != null && way2last != null && way1first.equals(way2last)) {
     391                    linked = true;
     392                } else if (way1last != null && way2first != null && way1last.equals(way2first)) {
     393                    linked = true;
     394                } else if (way1last != null && way2last != null && way1last.equals(way2last)) {
     395                    linked = true;
     396                }
     397
     398                // end of section to determine linkedness.
     399
     400                memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")});
     401            } else {
     402                memberData.addRow(new Object[]{em.role, em.member, ""});
     403            }
    371404        }
    372405        status.setText(tr("Members: {0}", clone.members.size()));
    373406    }