Changeset 1554 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2009-04-24T16:08:34+02:00 (15 years ago)
Author:
framm
Message:
  • fix relation ordering support (up/down buttons in relation editor)
Location:
trunk/src/org/openstreetmap/josm/gui/dialogs
Files:
2 edited

Legend:

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

    r1499 r1554  
    7171
    7272    /**
    73      * True if the relation is ordered (API 0.6). False for API 0.5.
    74      */
    75     boolean ordered;
    76 
    77     /**
    7873     * The property data.
    7974     */
     
    10499    private final JTable propertyTable = new JTable(propertyData);
    105100    private final JTable memberTable = new JTable(memberData);
    106 
    107     // =================== FIXME =====================
    108     // As soon as API 0.5 is dead, drop all the collation stuff from here ...
    109 
    110     /**
    111      * Collator for sorting the roles and entries of the member table.
    112      */
    113     private static final Collator collator;
    114     static {
    115         collator = Collator.getInstance();
    116         collator.setStrength(Collator.PRIMARY);
    117     }
    118 
    119     /**
    120      * Compare role strings.
    121      */
    122     private static int compareRole(String s1, String s2) {
    123         int last1 = s1.lastIndexOf('_');
    124         if (last1 > 0) {
    125             int last2 = s2.lastIndexOf('_');
    126             if (last2 == last1) {
    127                 String prefix1 = s1.substring(0, last1);
    128                 String prefix2 = s2.substring(0, last2);
    129 
    130                 if (prefix1.equalsIgnoreCase(prefix2)) {
    131                     // Both roles have the same prefix, now determine the
    132                     // suffix.
    133                     String suffix1 = s1.substring(last1 + 1, s1.length());
    134                     String suffix2 = s2.substring(last2 + 1, s2.length());
    135 
    136                     if (suffix1.matches("\\d+") && suffix2.matches("\\d+")) {
    137                         // Suffix is an number -> compare it.
    138                         int i1 = Integer.parseInt(suffix1);
    139                         int i2 = Integer.parseInt(suffix2);
    140 
    141                         return i1 - i2;
    142                     }
    143                 }
    144             }
    145         }
    146         if(s1.length() == 0 && s2.length() != 0)
    147             return 1;
    148         else if(s2.length() == 0 && s1.length() != 0)
    149             return -1;
    150 
    151         // Default handling if the role name is nothing like "stop_xx"
    152         return collator.compare(s1, s2);
    153     }
    154 
    155 
    156     /**
    157      * Compare two OsmPrimitives.
    158      */
    159     private static int compareMembers(OsmPrimitive o1, OsmPrimitive o2) {
    160         return collator.compare(o1.getName(), o2.getName());
    161     }
    162 
    163     private final Comparator<RelationMember> memberComparator = new Comparator<RelationMember>() {
    164         public int compare(RelationMember r1, RelationMember r2) {
    165             int roleResult = compareRole(r1.role, r2.role);
    166 
    167             if (roleResult == 0)
    168                 roleResult = compareMembers(r1.member, r2.member);
    169 
    170             return roleResult;
    171         }
    172     };
    173 
    174     // =================== FIXME FIXME FIXME =====================
    175     // ... until here, and also get rid of the "Collections.sort..." below.
    176101
    177102    // We need this twice, so cache result
     
    214139
    215140        this.relation = relation;
    216         ordered = !Main.pref.get("osm-server.version", "0.5").equals("0.5");
    217141
    218142        if (relation == null) {
     
    222146            // edit an existing relation
    223147            this.clone = new Relation(relation);
    224             if (!ordered) Collections.sort(this.clone.members, memberComparator);
    225148        }
    226149
     
    346269     */
    347270    private JPanel setupBasicButtons() {
    348         JPanel buttonPanel = new JPanel(new GridLayout(2,ordered ? 3 : 2));
    349 
    350         if (ordered) {
    351             buttonPanel.add(createButton(marktr("Move Up"), "moveup", tr("Move the currently selected members up"), KeyEvent.VK_N, new ActionListener() {
    352                 public void actionPerformed(ActionEvent e) {
    353                     moveMembers(-1);
    354                 }
    355             }));
    356         }
     271        JPanel buttonPanel = new JPanel(new GridLayout(2, 3));
     272
     273        buttonPanel.add(createButton(marktr("Move Up"), "moveup", tr("Move the currently selected members up"), KeyEvent.VK_N, new ActionListener() {
     274            public void actionPerformed(ActionEvent e) {
     275                moveMembers(-1);
     276            }
     277        }));
    357278
    358279        buttonPanel.add(createButton(marktr("Add Selected"),"addselected",
     
    370291        }));
    371292
    372         if(ordered) {
    373             buttonPanel.add(createButton(marktr("Move Down"), "movedown", tr("Move the currently selected members down"), KeyEvent.VK_J, new ActionListener() {
    374                 public void actionPerformed(ActionEvent e) {
    375                     moveMembers(1);
    376                 }
    377             }));
    378         }
     293        buttonPanel.add(createButton(marktr("Move Down"), "movedown", tr("Move the currently selected members down"), KeyEvent.VK_J, new ActionListener() {
     294            public void actionPerformed(ActionEvent e) {
     295                moveMembers(1);
     296            }
     297        }));
    379298
    380299        buttonPanel.add(createButton(marktr("Remove"),"remove",
     
    467386    private void addSelected() {
    468387        for (OsmPrimitive p : Main.ds.getSelected()) {
    469             boolean skip = false;
    470388            // ordered relations may have the same member multiple times.
    471389            // TODO: visual indication of the fact that one is there more than once?
    472             if (!ordered)
    473             {
    474                 for (RelationMember rm : clone.members) {
    475                     if (rm.member == p || p == relation)
    476                     {
    477                         skip = true;
    478                         break;
    479                     }
    480                 }
    481             }
    482             if (!skip)
    483             {
    484                 RelationMember em = new RelationMember();
    485                 em.member = p;
    486                 em.role = "";
    487                 // when working with ordered relations, we make an effort to
    488                 // add the element before the first selected member.
    489                 int[] rows = memberTable.getSelectedRows();
    490                 if (ordered && rows.length > 0) {
    491                     clone.members.add(rows[0], em);
    492                 } else {
    493                     clone.members.add(em);
    494                 }
     390            RelationMember em = new RelationMember();
     391            em.member = p;
     392            em.role = "";
     393            // when working with ordered relations, we make an effort to
     394            // add the element before the first selected member.
     395            int[] rows = memberTable.getSelectedRows();
     396            if (rows.length > 0) {
     397                clone.members.add(rows[0], em);
     398            } else {
     399                clone.members.add(em);
    495400            }
    496401        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r1419 r1554  
    3838 * delete them.
    3939 *
    40  * We don't have such dialogs for nodes, segments, and ways, becaus those
     40 * We don't have such dialogs for nodes, segments, and ways, because those
    4141 * objects are visible on the map and can be selected there. Relations are not.
    4242 *
Note: See TracChangeset for help on using the changeset viewer.