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


Ignore:
Timestamp:
2009-02-01T15:39:33+01:00 (16 years ago)
Author:
stoecker
Message:

better integration of type handling in presets

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r1349 r1360  
    22package org.openstreetmap.josm.gui.tagging;
    33
     4import static org.openstreetmap.josm.tools.I18n.marktr;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    56import static org.openstreetmap.josm.tools.I18n.trn;
     
    1415import java.io.Reader;
    1516import java.io.UnsupportedEncodingException;
     17import java.util.Arrays;
    1618import java.util.Collection;
    1719import java.util.HashMap;
     
    3941import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4042import org.openstreetmap.josm.data.osm.OsmUtils;
     43import org.openstreetmap.josm.data.osm.Node;
     44import org.openstreetmap.josm.data.osm.Way;
     45import org.openstreetmap.josm.data.osm.Relation;
    4146import org.openstreetmap.josm.io.MirroredInputStream;
    4247import org.openstreetmap.josm.gui.QuadStateCheckBox;
     
    412417     * The types as preparsed collection.
    413418     */
    414     public Collection<Class<?>> types;
     419    public List<String> types;
    415420    public List<Item> data = new LinkedList<Item>();
    416421    private static HashMap<String,String> lastValue = new HashMap<String,String>();
     
    462467     * Called from the XML parser to set the types this preset affects
    463468     */
     469    private static Collection<String> allowedtypes = Arrays.asList(new String[]
     470    {marktr("way"), marktr("node"), marktr("relation"), marktr("closedway")});
    464471    public void setType(String types) throws SAXException {
    465         try {
    466             for (String type : types.split(",")) {
    467                 type = Character.toUpperCase(type.charAt(0))+type.substring(1);
    468                 if (this.types == null)
    469                     this.types = new LinkedList<Class<?>>();
    470                 this.types.add(Class.forName("org.openstreetmap.josm.data.osm."+type));
    471             }
    472         } catch (ClassNotFoundException e) {
    473             e.printStackTrace();
    474             throw new SAXException(tr("Unknown type"));
     472        this.types = Arrays.asList(types.split(","));
     473        for (String type : this.types) {
     474            if(!allowedtypes.contains(type))
     475                throw new SAXException(tr("Unknown type: {0}", type));
    475476        }
    476477    }
     
    563564        JPanel p = new JPanel(new GridBagLayout());
    564565        LinkedList<Item> l = new LinkedList<Item>();
     566        if(types != null)
     567        {
     568            JPanel pp = new JPanel();
     569            for(String t : types)
     570            {
     571                JLabel la = new JLabel(ImageProvider.get("Mf_" + t));
     572                la.setToolTipText(tr("Elements of type {0} are supported.", tr(t)));
     573                pp.add(la);
     574            }
     575            p.add(pp, GBC.eol());
     576        }
    565577
    566578        for (Item i : data)
     
    577589
    578590    public void actionPerformed(ActionEvent e) {
    579         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     591        Collection<OsmPrimitive> sel = createSelection(Main.ds.getSelected());
    580592        JPanel p = createPanel(sel);
    581593        if (p == null)
     
    593605                }
    594606            };
    595             optionPane.createDialog(Main.parent, trn("Change {0} object", "Change {0} objects", sel.size(), sel.size())).setVisible(true);
     607            String title = trn("Change {0} object", "Change {0} objects", sel.size(), sel.size());
     608            if(sel.size() == 0)
     609                title = tr("Nothing selected!");
     610
     611            optionPane.createDialog(Main.parent, title).setVisible(true);
    596612            Object answerObj = optionPane.getValue();
    597613            if (answerObj == null || answerObj == JOptionPane.UNINITIALIZED_VALUE ||
     
    599615                answer = JOptionPane.CANCEL_OPTION;
    600616        }
    601         if (answer == JOptionPane.OK_OPTION) {
    602             Command cmd = createCommand(Main.ds.getSelected());
     617        if (sel.size() != 0 && answer == JOptionPane.OK_OPTION) {
     618            Command cmd = createCommand(sel);
    603619            if (cmd != null)
    604620                Main.main.undoRedo.add(cmd);
     
    607623    }
    608624
    609     private Command createCommand(Collection<OsmPrimitive> participants) {
     625    private Collection<OsmPrimitive> createSelection(Collection<OsmPrimitive> participants) {
    610626        Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>();
    611627        for (OsmPrimitive osm : participants)
    612             if (types == null || types.contains(osm.getClass()))
    613                 sel.add(osm);
    614         if (sel.isEmpty())
    615             return null;
    616 
     628        {
     629            if (types != null)
     630            {
     631                if(osm instanceof Relation)
     632                {
     633                    if(!types.contains("relation")) continue;
     634                }
     635                else if(osm instanceof Node)
     636                {
     637                    if(!types.contains("node")) continue;
     638                }
     639                else if(osm instanceof Way)
     640                {
     641                    if(!types.contains("way") &&
     642                    !(types.contains("closedway") && ((Way)osm).isClosed()))
     643                        continue;
     644                }
     645            }
     646            sel.add(osm);
     647        }
     648        return sel;
     649    }
     650
     651    private Command createCommand(Collection<OsmPrimitive> sel) {
    617652        List<Command> cmds = new LinkedList<Command>();
    618653        for (Item i : data)
Note: See TracChangeset for help on using the changeset viewer.