Changeset 1618 in josm


Ignore:
Timestamp:
May 24, 2009 12:53:58 PM (4 years ago)
Author:
stoecker
Message:

close #2643 - patch by Teemu Koskinen - Better linkedness support for relation editor

File:
1 edited

Legend:

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

    r1616 r1618  
    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; 
    343343            while (m != null) { 
    344344                if (m.member instanceof Way) { 
    345                     n1 = ((Way) m.member).lastNode(); 
     345                    way1 = m; 
    346346                    break; 
    347347                } else if (m.member instanceof Relation) { 
     
    351351                } 
    352352            } 
    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(); 
     353            if (way1 != null) { 
     354                int next = i+1; 
     355                while (next < clone.members.size()) { 
     356                    m = clone.members.get(next++); 
     357                    while (m != null) { 
     358                        if (m.member instanceof Way) { 
     359                            way2 = m; 
     360                            break; 
     361                        } else if (m.member instanceof Relation) { 
     362                            m = ((Relation)(m.member)).firstMember(); 
     363                        } else { 
     364                            break; 
     365                        } 
     366                    } 
     367                    if (way2 != null) 
    358368                        break; 
    359                     } else if (m.member instanceof Relation) { 
    360                         m = ((Relation)(m.member)).firstMember(); 
    361                     } else { 
    362                         break; 
    363                     } 
    364                 } 
    365             } 
    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")}); 
     369                } 
     370            } 
     371            if (way2 != null) { 
     372                Node way1first = ((Way)(way1.member)).firstNode(); 
     373                Node way1last = ((Way)(way1.member)).lastNode(); 
     374                Node way2first = ((Way)(way2.member)).firstNode(); 
     375                Node way2last = ((Way)(way2.member)).lastNode(); 
     376                if (way1.role.equals("forward")) { 
     377                    way1first = null; 
     378                } else if (way1.role.equals("backward")) { 
     379                    way1last = null; 
     380                } 
     381                if (way2.role.equals("forward")) { 
     382                    way2last = null; 
     383                } else if (way2.role.equals("backward")) { 
     384                    way2first = null; 
     385                } 
     386 
     387                if (way1first != null && way2first != null && way1first.equals(way2first)) { 
     388                    linked = true; 
     389                } else if (way1first != null && way2last != null && way1first.equals(way2last)) { 
     390                    linked = true; 
     391                } else if (way1last != null && way2first != null && way1last.equals(way2first)) { 
     392                    linked = true; 
     393                } else if (way1last != null && way2last != null && way1last.equals(way2last)) { 
     394                    linked = true; 
     395                } 
     396 
     397                // end of section to determine linkedness.  
     398 
     399                memberData.addRow(new Object[]{em.role, em.member, linked ? tr("yes") : tr("no")}); 
     400            } else { 
     401                memberData.addRow(new Object[]{em.role, em.member, ""}); 
     402            } 
    371403        } 
    372404        status.setText(tr("Members: {0}", clone.members.size())); 
Note: See TracChangeset for help on using the changeset viewer.