Changeset 674 in josm for trunk/src/org


Ignore:
Timestamp:
2008-07-02T23:40:17+02:00 (16 years ago)
Author:
framm
Message:
  • various patches by Dirk Stoecker <openstreetmap@…>
  • Add deleteselected functionality to RelationEditor. This fixes #781.
  • Allow to delete ways even if they are part of a relation. This fixes #779.
  • i18n of preses
  • fix bakery bug #769
  • add 2 access keys (#540)
Location:
trunk/src/org/openstreetmap/josm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r668 r674  
    245245                        newSelection.add(wayToAdd);
    246246
     247                        Boolean warnme=false;
    247248                        // now copy all relations to new way also
    248249                        for (Relation r : Main.ds.relations) {
     
    256257                                                        em.member = wayToAdd;
    257258                                                        em.role = rm.role;
     259                                                        if(em.role.length() > 0)
     260                                                                warnme = true;
    258261                                                        c.members.add(em);
    259262                                                        commandList.add(new ChangeCommand(r, c));
     263                                                        break;
    260264                                                }
    261265                                        }
    262266                                }
    263267                        }
     268                        if(warnme)
     269                                JOptionPane.showMessageDialog(Main.parent, tr("A role based relation membership was copied to both new ways.\nYou should verify this and correct it when necessary."));
    264270                }
    265271
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

    r655 r674  
    1212import java.util.HashSet;
    1313import java.util.HashMap;
     14import java.util.Iterator;
    1415import java.util.LinkedList;
    1516import java.util.List;
     
    2425import org.openstreetmap.josm.data.osm.WaySegment;
    2526import org.openstreetmap.josm.data.osm.Relation;
     27import org.openstreetmap.josm.data.osm.RelationMember;
    2628import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;
     29import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    2730import org.openstreetmap.josm.gui.MapFrame;
    2831import org.openstreetmap.josm.tools.*;
     
    163166         * nothing to delete.
    164167         */
     168        private int testRelation(Relation ref, OsmPrimitive osm)
     169        {
     170                NameVisitor n = new NameVisitor();
     171                ref.visit(n);
     172                NameVisitor s = new NameVisitor();
     173                osm.visit(s);
     174                String role = new String();
     175                for (RelationMember m : ref.members)
     176                {
     177                        if (m.member == osm)
     178                        {
     179                                role = m.role;
     180                                break;
     181                        }
     182                }
     183                if (role.length() > 0)
     184                {
     185                        return JOptionPane.showConfirmDialog(Main.parent,
     186                        tr("Selection \"{0}\" is used by relation \"{1}\" with role {2}.\nDelete from relation?", s.name, n.name, role),
     187                        tr("Conflicting relation"), JOptionPane.YES_NO_OPTION);
     188                }
     189                else
     190                {
     191                        return JOptionPane.showConfirmDialog(Main.parent,
     192                        tr("Selection \"{0}\" is used by relation \"{1}\".\nDelete from relation?", s.name, n.name),
     193                        tr("Conflicting relation"), JOptionPane.YES_NO_OPTION);
     194                }
     195        }
     196
    165197        private Command delete(Collection<OsmPrimitive> selection, boolean alsoDeleteNodesInWay) {
    166198                if (selection.isEmpty()) return null;
     
    168200                Collection<OsmPrimitive> del = new HashSet<OsmPrimitive>(selection);
    169201                Collection<Way> waysToBeChanged = new HashSet<Way>();
     202                HashMap<OsmPrimitive, Collection<OsmPrimitive>> relationsToBeChanged = new HashMap<OsmPrimitive, Collection<OsmPrimitive>>();
    170203
    171204                if (alsoDeleteNodesInWay) {
     
    197230                                        waysToBeChanged.add((Way) ref);
    198231                                } else if (ref instanceof Relation) {
    199                                         JOptionPane.showMessageDialog(Main.parent,
    200                                                 tr("Cannot delete: Selection is used by relation"));
    201                                         return null;
     232                                        if (testRelation((Relation)ref, osm) == JOptionPane.YES_OPTION)
     233                                        {
     234                                                Collection<OsmPrimitive> relset = relationsToBeChanged.get(ref);
     235                                                if(relset == null) relset = new HashSet<OsmPrimitive>();
     236                                                relset.add(osm);
     237                                                relationsToBeChanged.put(ref, relset);
     238                                        }
     239                                        else
     240                                                return null;
    202241                                } else {
    203242                                        return null;
     
    218257                                        if (del.contains(ref)) continue;
    219258                                        if (ref instanceof Relation) {
    220                                                 JOptionPane.showMessageDialog(Main.parent,
    221                                                         tr("Cannot delete: Selection is used by relation"));
     259                                                Boolean found = false;
     260                                                Collection<OsmPrimitive> relset = relationsToBeChanged.get(ref);
     261                                                if (relset == null)
     262                                                        relset = new HashSet<OsmPrimitive>();
     263                                                else
     264                                                {
     265                                                        for (OsmPrimitive m : relset) {
     266                                                                if(m == w)
     267                                                                {
     268                                                                        found = true;
     269                                                                        break;
     270                                                                }
     271                                                        }
     272                                                }
     273                                                if (!found)
     274                                                {
     275                                                        if (testRelation((Relation)ref, w) == JOptionPane.YES_OPTION)
     276                                                        {
     277                                                                relset.add(w);
     278                                                                relationsToBeChanged.put(ref, relset);
     279                                                        }
     280                                                        else
     281                                                                return null;
     282                                                }
    222283                                        } else {
    223284                                                return null;
     
    227288                                cmds.add(new ChangeCommand(w, wnew));
    228289                        }
     290                }
     291
     292                Iterator<OsmPrimitive> iterator = relationsToBeChanged.keySet().iterator();
     293                while(iterator.hasNext())
     294                {
     295                        Relation cur = (Relation)iterator.next();
     296                        Relation rel = new Relation(cur);
     297                        for(OsmPrimitive osm : relationsToBeChanged.get(cur))
     298                        {
     299                                for (RelationMember rm : rel.members) {
     300                                        if (rm.member == osm)
     301                                        {
     302                                                RelationMember mem = new RelationMember();
     303                                                mem.role = rm.role;
     304                                                mem.member = rm.member;
     305                                                rel.members.remove(mem);
     306                                                break;
     307                                        }
     308                                }
     309                        }
     310                        cmds.add(new ChangeCommand(cur, rel));
    229311                }
    230312
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java

    r669 r674  
    147147
    148148                JLabel help = new JLabel("<html><em>"+
    149                         "This is the basic relation editor which allows you to change the relation's tags " +
     149                        tr("This is the basic relation editor which allows you to change the relation's tags " +
    150150                        "as well as the members. In addition to this we should have a smart editor that " +
    151                         "detects the type of relationship and limits your choices in a sensible way.</em></html>");
     151                        "detects the type of relationship and limits your choices in a sensible way.")+"</em></html>");
    152152               
    153153                getContentPane().add(help, BorderLayout.NORTH);         
     
    224224                }));
    225225
     226                buttonPanel.add(createButton(marktr("Delete Selected"),"deleteselected", tr("Delete all currently selected objects from releation"), KeyEvent.VK_R, new ActionListener() {
     227                        public void actionPerformed(ActionEvent e) {
     228                                deleteSelected();
     229                        }
     230                }));
     231
    226232                buttonPanel.add(createButton(marktr("Delete"),"delete", tr("Remove the member in the current table row from this relation"), KeyEvent.VK_D, new ActionListener() {
    227233                        public void actionPerformed(ActionEvent e) {
     
    259265                refreshTables();
    260266               
    261                 setSize(new Dimension(400, 500));
     267                setSize(new Dimension(600, 500));
    262268                setLocationRelativeTo(Main.parent);
    263269        }
     
    311317                refreshTables();
    312318        }
     319
     320        private void deleteSelected() {
     321                for (OsmPrimitive p : Main.ds.getSelected()) {
     322                        Relation c = new Relation(clone);
     323                        for (RelationMember rm : c.members) {
     324                                if (rm.member == p)
     325                                {
     326                                        RelationMember mem = new RelationMember();
     327                                        mem.role = rm.role;
     328                                        mem.member = rm.member;
     329                                        clone.members.remove(mem);
     330                                }
     331                        }
     332                }
     333                refreshTables();
     334        }
     335
    313336    private void downloadRelationMembers()  {
    314337
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r627 r674  
    128128                    originalValue = DIFFERENT;
    129129                        }
    130                         p.add(new JLabel(text), GBC.std().insets(0,0,10,0));
     130                        p.add(new JLabel(tr(text)+":"), GBC.std().insets(0,0,10,0));
    131131                        p.add(value, GBC.eol().fill(GBC.HORIZONTAL));
    132132                }
     
    174174                                                        QuadStateCheckBox.State.NOT_SELECTED :
    175175                                                        QuadStateCheckBox.State.UNSET;
    176                                 check = new QuadStateCheckBox(text, initialState,
     176                                check = new QuadStateCheckBox(tr(text), initialState,
    177177                                                new QuadStateCheckBox.State[] {
    178178                                                QuadStateCheckBox.State.SELECTED,
     
    184184                                // in "partial" state.
    185185                                initialState = QuadStateCheckBox.State.PARTIAL;
    186                                 check = new QuadStateCheckBox(text, QuadStateCheckBox.State.PARTIAL,
     186                                check = new QuadStateCheckBox(tr(text), QuadStateCheckBox.State.PARTIAL,
    187187                                                new QuadStateCheckBox.State[] {
    188188                                                QuadStateCheckBox.State.PARTIAL,
     
    236236                        }
    237237                        for (int i=0; i<value_array.length; i++) {
    238                                 lhm.put(value_array[i], display_array[i]);
     238                                lhm.put(value_array[i], tr(display_array[i]));
    239239                        }
    240240                        for (String s : usage.values) {
     
    250250                                combo.setSelectedItem(DIFFERENT); originalValue=DIFFERENT;
    251251                        }
    252                         p.add(new JLabel(text), GBC.std().insets(0,0,10,0));
     252                        p.add(new JLabel(tr(text)+":"), GBC.std().insets(0,0,10,0));
    253253                        p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
    254254                }
     
    277277
    278278                @Override public void addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    279                         p.add(new JLabel(text), GBC.eol());
     279                        p.add(new JLabel(tr(text)), GBC.eol());
    280280                }
    281281                @Override public void addCommands(Collection<OsmPrimitive> sel, List<Command> cmds) {}
     
    310310         */
    311311        public void setName(String name) {
    312                 putValue(Action.NAME, name);
     312                putValue(Action.NAME, tr(name));
    313313                putValue("toolbar", "tagging_"+name);
    314314        }
Note: See TracChangeset for help on using the changeset viewer.