Changeset 1814 in josm for trunk/src/org


Ignore:
Timestamp:
2009-07-19T19:04:49+02:00 (12 years ago)
Author:
Gubaer
Message:

removed dependencies to Main.ds, removed Main.ds
removed AddVisitor, NameVisitor, DeleteVisitor - unnecessary double dispatching for these simple cases

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
3 deleted
76 edited

Legend:

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

    r1811 r1814  
    7777     */
    7878    public static Preferences pref = new Preferences();
    79     /**
    80      * The global dataset.
    81      */
    82     public static DataSet ds = new DataSet();
     79
    8380    /**
    8481     * The global paste buffer.
     
    167164        if (map != null) {
    168165            map.mapView.removeLayer(layer);
    169             if (layer instanceof OsmDataLayer) {
    170                 ds = new DataSet();
    171             }
    172166            if (map.mapView.getAllLayers().isEmpty()) {
    173167                setMapFrame(null);
     
    224218        map.mapView.addLayer(layer);
    225219    }
    226     /**
    227      * Replies the current edit layer. Creates one if no {@see OsmDataLayer}
    228      * exists. Replies null, if the currently active layer isn't an instance
    229      * of {@see OsmDataLayer}.
     220
     221    /**
     222     * Replies true if there is an edit layer which is currently
     223     * active
    230224     *
    231      * @return the current edit layer
    232      */
    233     public final OsmDataLayer createOrGetEditLayer() {
    234         if (map == null || map.mapView.getEditLayer() == null) {
    235             menu.newAction.actionPerformed(null);
    236         }
    237         return map.mapView.getEditLayer();
    238     }
    239 
    240     /**
    241      * Replies true if this map view has an edit layer
    242      *
    243      * @return true if this map view has an edit layer
    244      */
    245     public boolean hasEditLayer() {
     225     * @return true if there is an edit layer which is currently
     226     * active
     227     */
     228    public boolean hasActiveEditLayer() {
    246229        if (map == null) return false;
    247230        if (map.mapView == null) return false;
    248231        if (map.mapView.getEditLayer() == null) return false;
    249232        return true;
     233    }
     234
     235    /**
     236     * Replies the current edit layer
     237     *
     238     * @return the current edit layer. null, if no current edit layer exists
     239     */
     240    public OsmDataLayer getEditLayer() {
     241        if (map == null) return null;
     242        if (map.mapView == null) return null;
     243        return map.mapView.getEditLayer();
     244    }
     245
     246    /**
     247     * Replies the current data set.
     248     *
     249     * @return the current data set. null, if no current data set exists
     250     */
     251    public DataSet getCurrentDataSet() {
     252        if (!hasActiveEditLayer()) return null;
     253        return getEditLayer().data;
    250254    }
    251255
     
    495499        pref.put("gui.geometry", newGeometry);
    496500    }
     501
     502
    497503}
  • trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java

    r1779 r1814  
    4646
    4747    protected void launchBrowser() {
    48         ArrayList<OsmPrimitive> primitivesToShow = new ArrayList<OsmPrimitive>(Main.ds.getSelected());
     48        ArrayList<OsmPrimitive> primitivesToShow = new ArrayList<OsmPrimitive>(getCurrentDataSet().getSelected());
    4949
    5050        // filter out new primitives which are not yet uploaded to the server
  • trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java

    r1807 r1814  
    7979        /* Now execute the commands to add the dupicated contents of the paste buffer to the map */
    8080        Main.main.undoRedo.add(new AddCommand(nnew));
    81         Main.ds.setSelected(nnew);
     81        getCurrentDataSet().setSelected(nnew);
    8282        Main.map.mapView.repaint();
    8383    }
  • trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java

    r1768 r1814  
    7979
    8080    public void actionPerformed(ActionEvent e) {
    81         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     81        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    8282        Collection<Node> nodes = new LinkedList<Node>();
    8383        Collection<Way> ways = new LinkedList<Way>();
  • trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java

    r1640 r1814  
    3131    public AlignInLineAction() {
    3232        super(tr("Align Nodes in Line"), "alignline", tr("Move the selected nodes in to a line."),
    33         Shortcut.registerShortcut("tools:alignline", tr("Tool: {0}", tr("Align Nodes in Line")), KeyEvent.VK_L, Shortcut.GROUP_EDIT), true);
     33                Shortcut.registerShortcut("tools:alignline", tr("Tool: {0}", tr("Align Nodes in Line")), KeyEvent.VK_L, Shortcut.GROUP_EDIT), true);
    3434    }
    3535
     
    4040     */
    4141    public void actionPerformed(ActionEvent e) {
    42         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     42        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    4343        Collection<Node> nodes = new LinkedList<Node>();
    4444        Collection<Node> itnodes = new LinkedList<Node>();
     
    5050        // special case if no single nodes are selected and exactly one way is:
    5151        // then use the way's nodes
    52         if ((nodes.size() == 0) && (sel.size() == 1))
     52        if ((nodes.size() == 0) && (sel.size() == 1)) {
    5353            for (OsmPrimitive osm : sel)
    5454                if (osm instanceof Way) {
     
    5656                    itnodes.addAll(((Way)osm).nodes);
    5757                }
     58        }
    5859        if (nodes.size() < 3) {
    5960            JOptionPane.showMessageDialog(Main.parent, tr("Please select at least three nodes."));
  • trunk/src/org/openstreetmap/josm/actions/ApiPreconditionChecker.java

    r1693 r1814  
    100100                    List<OsmPrimitive> newNodes = new LinkedList<OsmPrimitive>();
    101101                    newNodes.add(osmPrimitive);
    102                     Main.ds.setSelected(newNodes);
     102                    Main.main.getCurrentDataSet().setSelected(newNodes);
    103103                    return false;
    104104                }
     
    120120                newNodes.add(osmPrimitive);
    121121
    122                 Main.ds.setSelected(newNodes);
     122                Main.main.getCurrentDataSet().setSelected(newNodes);
    123123                return false;
    124124            }
  • trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java

    r1797 r1814  
    7979            Collection<OsmPrimitive> sel = new HashSet<OsmPrimitive>();
    8080            if (mode.equals("selection")) {
    81                 sel = Main.ds.getSelected();
     81                sel = getCurrentDataSet().getSelected();
    8282            } else if (mode.equals("conflict")) {
    8383                if (Main.map.conflictDialog.getConflicts() != null) {
  • trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java

    r1621 r1814  
    5252    public CombineWayAction() {
    5353        super(tr("Combine Way"), "combineway", tr("Combine several ways into one."),
    54         Shortcut.registerShortcut("tools:combineway", tr("Tool: {0}", tr("Combine Way")), KeyEvent.VK_C, Shortcut.GROUP_EDIT), true);
     54                Shortcut.registerShortcut("tools:combineway", tr("Tool: {0}", tr("Combine Way")), KeyEvent.VK_C, Shortcut.GROUP_EDIT), true);
    5555        DataSet.selListeners.add(this);
    5656    }
    5757
    5858    public void actionPerformed(ActionEvent event) {
    59         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     59        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    6060        LinkedList<Way> selectedWays = new LinkedList<Way>();
    6161
    6262        for (OsmPrimitive osm : selection)
    63             if (osm instanceof Way)
     63            if (osm instanceof Way) {
    6464                selectedWays.add((Way)osm);
     65            }
    6566
    6667        if (selectedWays.size() < 2) {
     
    8283            new HashMap<Pair<Relation,String>, HashSet<Way>>();
    8384        HashSet<Relation> relationsUsingWays = new HashSet<Relation>();
    84         for (Relation r : Main.ds.relations) {
    85             if (r.deleted || r.incomplete) continue;
     85        for (Relation r : getCurrentDataSet().relations) {
     86            if (r.deleted || r.incomplete) {
     87                continue;
     88            }
    8689            for (RelationMember rm : r.members) {
    8790                if (rm.member instanceof Way) {
     
    112115                        tr("Combine ways with different memberships?"),
    113116                        tr("The selected ways have differing relation memberships.  "
    114                             + "Do you still want to combine them?"),
    115                         new String[] {tr("Combine Anyway"), tr("Cancel")},
    116                         new String[] {"combineway.png", "cancel.png"}).getValue();
    117                 if (option == 1) break;
     117                                + "Do you still want to combine them?"),
     118                                new String[] {tr("Combine Anyway"), tr("Cancel")},
     119                                new String[] {"combineway.png", "cancel.png"}).getValue();
     120                if (option == 1) {
     121                    break;
     122                }
    118123
    119124                return;
     
    125130        for (Way w : selectedWays) {
    126131            for (Entry<String,String> e : w.entrySet()) {
    127                 if (!props.containsKey(e.getKey()))
     132                if (!props.containsKey(e.getKey())) {
    128133                    props.put(e.getKey(), new TreeSet<String>());
     134                }
    129135                props.get(e.getKey()).add(e.getValue());
    130136            }
     
    139145            if (secondTry instanceof List) {
    140146                int option = new ExtendedDialog(Main.parent,
    141                     tr("Change directions?"),
    142                     tr("The ways can not be combined in their current directions.  "
    143                         + "Do you want to reverse some of them?"),
    144                     new String[] {tr("Reverse and Combine"), tr("Cancel")},
    145                     new String[] {"wayflip.png", "cancel.png"}).getValue();
     147                        tr("Change directions?"),
     148                        tr("The ways can not be combined in their current directions.  "
     149                                + "Do you want to reverse some of them?"),
     150                                new String[] {tr("Reverse and Combine"), tr("Cancel")},
     151                                new String[] {"wayflip.png", "cancel.png"}).getValue();
    146152                if (option != 1) return;
    147153                nodeList = (List<Node>) secondTry;
     
    160166        for (Way w : selectedWays) {
    161167            modifyWay = w;
    162             if (w.id != 0) break;
     168            if (w.id != 0) {
     169                break;
     170            }
    163171        }
    164172        Way newWay = new Way(modifyWay);
     
    188196        if (!components.isEmpty()) {
    189197            int answer = new ExtendedDialog(Main.parent,
    190                 tr("Enter values for all conflicts."),
    191                 p,
    192                 new String[] {tr("Solve Conflicts"), tr("Cancel")},
    193                 new String[] {"dialogs/conflict.png", "cancel.png"}).getValue();
     198                    tr("Enter values for all conflicts."),
     199                    p,
     200                    new String[] {tr("Solve Conflicts"), tr("Cancel")},
     201                    new String[] {"dialogs/conflict.png", "cancel.png"}).getValue();
    194202            if (answer != 1) return;
    195203
    196             for (Entry<String, JComboBox> e : components.entrySet())
     204            for (Entry<String, JComboBox> e : components.entrySet()) {
    197205                newWay.put(e.getKey(), e.getValue().getEditor().getItem().toString());
     206            }
    198207        }
    199208
     
    224233        }
    225234        Main.main.undoRedo.add(new SequenceCommand(tr("Combine {0} ways", selectedWays.size()), cmds));
    226         Main.ds.setSelected(modifyWay);
     235        getCurrentDataSet().setSelected(modifyWay);
    227236    }
    228237
     
    242251
    243252        HashSet<Pair<Node,Node>> chunkSet = new HashSet<Pair<Node,Node>>();
    244         for (Way w : ways)
     253        for (Way w : ways) {
    245254            chunkSet.addAll(w.getNodePairs(ignoreDirection));
     255        }
    246256
    247257        LinkedList<Pair<Node,Node>> chunks = new LinkedList<Pair<Node,Node>>(chunkSet);
    248258
    249         if (chunks.isEmpty()) {
     259        if (chunks.isEmpty())
    250260            return tr("All the ways were empty");
    251         }
    252261
    253262        List<Node> nodeList = Pair.toArrayList(chunks.poll());
     
    273282                break;
    274283            }
    275             if (!foundChunk) break;
    276         }
    277 
    278         if (!chunks.isEmpty()) {
     284            if (!foundChunk) {
     285                break;
     286            }
     287        }
     288
     289        if (!chunks.isEmpty())
    279290            return tr("Could not combine ways "
    280                 + "(They could not be merged into a single string of nodes)");
    281         }
     291                    + "(They could not be merged into a single string of nodes)");
    282292
    283293        return nodeList;
  • trunk/src/org/openstreetmap/josm/actions/CopyAction.java

    r1750 r1814  
    4545
    4646    public void actionPerformed(ActionEvent e) {
    47         if(noSelection()) return;
     47        if(isEmptySelection()) return;
    4848
    4949        Main.pasteBuffer = copyData();
    50         Main.pasteSource = Main.main.createOrGetEditLayer();
     50        Main.pasteSource = getEditLayer();
    5151        Main.main.menu.paste.setEnabled(true); /* now we have a paste buffer we can make paste available */
    5252
     
    5656    }
    5757
    58     public static DataSet copyData() {
     58    public DataSet copyData() {
    5959        /* New pasteBuffer - will be assigned to the global one at the end */
    6060        final DataSet pasteBuffer = new DataSet();
     
    6262        /* temporarily maps old nodes to new so we can do a true deep copy */
    6363
    64         if(noSelection()) return pasteBuffer;
     64        if(isEmptySelection()) return pasteBuffer;
    6565
    6666        /* scan the selected objects, mapping them to copies; when copying a way or relation,
     
    7171                 * or a way and a node in that way is selected, we'll see it twice, once via the
    7272                 * way and once directly; and so on. */
    73                 if (map.containsKey(n)) { return; }
     73                if (map.containsKey(n))
     74                    return;
    7475                Node nnew = new Node(n);
    7576                map.put(n, nnew);
     
    7879            public void visit(Way w) {
    7980                /* check if already in pasteBuffer - could have come from a relation, and directly etc. */
    80                 if (map.containsKey(w)) { return; }
     81                if (map.containsKey(w))
     82                    return;
    8183                Way wnew = new Way();
    8284                wnew.cloneFrom(w);
     
    9395            }
    9496            public void visit(Relation e) {
    95                 if (map.containsKey(e)) { return; }
     97                if (map.containsKey(e))
     98                    return;
    9699                Relation enew = new Relation(e);
    97100                List<RelationMember> members = new ArrayList<RelationMember>();
     
    108111            }
    109112            public void visitAll() {
    110                 for (OsmPrimitive osm : Main.ds.getSelected())
     113                for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
    111114                    osm.visit(this);
     115                }
    112116
    113117                // Used internally only (in PasteTagsAction), therefore no need to translate these
    114                 if(Main.ds.getSelectedNodes().size() > 0)
     118                if(getCurrentDataSet().getSelectedNodes().size() > 0) {
    115119                    pasteBuffer.dataSources.add(new DataSource(null, "Copied Nodes"));
    116                 if(Main.ds.getSelectedWays().size() > 0)
     120                }
     121                if(getCurrentDataSet().getSelectedWays().size() > 0) {
    117122                    pasteBuffer.dataSources.add(new DataSource(null, "Copied Ways"));
    118                 if(Main.ds.getSelectedRelations().size() > 0)
     123                }
     124                if(getCurrentDataSet().getSelectedRelations().size() > 0) {
    119125                    pasteBuffer.dataSources.add(new DataSource(null, "Copied Relations"));
     126                }
    120127            }
    121128        }.visitAll();
     
    128135    }
    129136
    130     private static boolean noSelection() {
    131         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     137    private boolean isEmptySelection() {
     138        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    132139        if (sel.isEmpty()) {
    133             JOptionPane.showMessageDialog(Main.parent,
    134                     tr("Please select something to copy."));
     140            JOptionPane.showMessageDialog(
     141                    Main.parent,
     142                    tr("Please select something to copy.")
     143            );
    135144            return true;
    136145        }
  • trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java

    r1741 r1814  
    8080        }
    8181
    82         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     82        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    8383        Collection<Node> nodes = new LinkedList<Node>();
    8484        Way existingWay = null;
     
    170170            if (a1 < 999) {
    171171                // if it is, delete it
    172                 CollectBackReferencesVisitor refs = new CollectBackReferencesVisitor(Main.ds);
     172                CollectBackReferencesVisitor refs = new CollectBackReferencesVisitor(getCurrentDataSet());
    173173                refs.visit(n1);
    174174                if (refs.data.isEmpty() || ((refs.data.size() == 1) && (refs.data.contains(existingWay)))) {
  • trunk/src/org/openstreetmap/josm/actions/DistributeAction.java

    r1640 r1814  
    2929    public DistributeAction() {
    3030        super(tr("Distribute Nodes"), "distribute", tr("Distribute the selected nodes to equal distances along a line."),
    31         Shortcut.registerShortcut("tools:distribute", tr("Tool: {0}", tr("Distribute Nodes")), KeyEvent.VK_B, Shortcut.GROUP_EDIT), true);
     31                Shortcut.registerShortcut("tools:distribute", tr("Tool: {0}", tr("Distribute Nodes")), KeyEvent.VK_B, Shortcut.GROUP_EDIT), true);
    3232    }
    3333
     
    3838     */
    3939    public void actionPerformed(ActionEvent e) {
    40         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     40        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    4141        Collection<Node> nodes = new LinkedList<Node>();
    4242        Collection<Node> itnodes = new LinkedList<Node>();
     
    4848        // special case if no single nodes are selected and exactly one way is:
    4949        // then use the way's nodes
    50         if ((nodes.size() == 0) && (sel.size() == 1))
     50        if ((nodes.size() == 0) && (sel.size() == 1)) {
    5151            for (OsmPrimitive osm : sel)
    5252                if (osm instanceof Way) {
     
    5454                    itnodes.addAll(((Way)osm).nodes);
    5555                }
     56        }
    5657
    5758        if (nodes.size() < 3) {
  • trunk/src/org/openstreetmap/josm/actions/DuplicateAction.java

    r1750 r1814  
    99import java.util.Collection;
    1010
    11 import org.openstreetmap.josm.actions.CopyAction;
    12 import org.openstreetmap.josm.actions.PasteAction;
    1311import org.openstreetmap.josm.data.SelectionChangedListener;
    1412import org.openstreetmap.josm.data.osm.DataSet;
    1513import org.openstreetmap.josm.data.osm.OsmPrimitive;
     14import org.openstreetmap.josm.gui.layer.Layer;
     15import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    1616import org.openstreetmap.josm.tools.Shortcut;
    17 import org.openstreetmap.josm.Main;
    1817
    19 public final class DuplicateAction extends JosmAction implements SelectionChangedListener {
     18public final class DuplicateAction extends JosmAction implements SelectionChangedListener, LayerChangeListener {
    2019
    2120    public DuplicateAction() {
    2221        super(tr("Duplicate"), "duplicate",
    23             tr("Duplicate selection by copy and immediate paste."),
    24             Shortcut.registerShortcut("system:duplicate", tr("Edit: {0}", tr("Duplicate")), KeyEvent.VK_D, Shortcut.GROUP_MENU), true);
     22                tr("Duplicate selection by copy and immediate paste."),
     23                Shortcut.registerShortcut("system:duplicate", tr("Edit: {0}", tr("Duplicate")), KeyEvent.VK_D, Shortcut.GROUP_MENU), true);
    2524        setEnabled(false);
    2625        DataSet.selListeners.add(this);
     26        Layer.listeners.add(this);
    2727    }
    2828
    2929    public void actionPerformed(ActionEvent e) {
    30         PasteAction.pasteData(CopyAction.copyData(), Main.main.createOrGetEditLayer(), e);
     30        new PasteAction().pasteData(new CopyAction().copyData(), getEditLayer(), e);
    3131    }
    3232
     33
     34    protected void refreshEnabled() {
     35        setEnabled(getCurrentDataSet() != null
     36                && ! getCurrentDataSet().getSelected().isEmpty()
     37        );
     38    }
     39
     40    /* ---------------------------------------------------------------------------------- */
     41    /* Interface SelectionChangeListener                                                  */
     42    /* ---------------------------------------------------------------------------------- */
    3343    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
    34         setEnabled(! newSelection.isEmpty());
     44        refreshEnabled();
     45    }
     46
     47    /* ---------------------------------------------------------------------------------- */
     48    /* Interface LayerChangeListener                                                      */
     49    /* ---------------------------------------------------------------------------------- */
     50    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     51        refreshEnabled();
     52    }
     53
     54    public void layerAdded(Layer newLayer) {
     55        refreshEnabled();
     56    }
     57
     58    public void layerRemoved(Layer oldLayer) {
     59        refreshEnabled();
    3560    }
    3661}
  • trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java

    r1808 r1814  
    8484    public void export(Layer layer) {
    8585        if (layer == null)
    86             throw new IllegalArgumentException(tr("paramenter ''{0'' must not be null", "layer"));
     86            throw new IllegalArgumentException(tr("paramenter ''{0}'' must not be null", "layer"));
    8787        if (! (layer instanceof OsmDataLayer) && ! (layer instanceof GpxLayer))
    8888            throw new IllegalArgumentException(tr("expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.", layer.getClass().getName()));
     
    9898    }
    9999
    100     public static void exportGpx(File file, Layer layer) {
     100    /**
     101     * Exports a layer to a file.
     102     *
     103     * <code>layer</code> must not be null. <code>layer</code> must be an instance of
     104     * {@see OsmDataLayer} or {@see GpxLayer}.
     105     *
     106     * @param layer the layer
     107     * @exception IllegalArgumentException thrown if layer is null
     108     * @exception IllegalArgumentException thrown if layer is neither an instance of {@see OsmDataLayer}
     109     *  nor of {@see GpxLayer}
     110     */
     111
     112    public void exportGpx(File file, Layer layer) {
     113        if (layer == null)
     114            throw new IllegalArgumentException(tr("paramenter ''{0}'' must not be null", "layer"));
     115        if (! (layer instanceof OsmDataLayer) && ! (layer instanceof GpxLayer))
     116            throw new IllegalArgumentException(tr("expected instance of OsmDataLayer or GpxLayer. Got ''{0}''.", layer.getClass().getName()));
     117        if (file == null)
     118            throw new IllegalArgumentException(tr("paramenter ''{0}'' must not be null", "file"));
     119
    101120        String fn = file.getPath();
    102121        if (fn.indexOf('.') == -1) {
     
    172191            gpxData = ((GpxLayer)layer).data;
    173192        } else {
    174             gpxData = OsmDataLayer.toGpxData(Main.ds, file);
     193            gpxData = OsmDataLayer.toGpxData(getCurrentDataSet(), file);
    175194        }
    176195
  • trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java

    r1725 r1814  
    2828    public JoinNodeWayAction() {
    2929        super(tr("Join Node to Way"), "joinnodeway", tr("Join a node into the nearest way segments"),
    30             Shortcut.registerShortcut("tools:joinnodeway", tr("Tool: {0}", tr("Join Node to Way")), KeyEvent.VK_J, Shortcut.GROUP_EDIT), true);
     30                Shortcut.registerShortcut("tools:joinnodeway", tr("Tool: {0}", tr("Join Node to Way")), KeyEvent.VK_J, Shortcut.GROUP_EDIT), true);
    3131    }
    3232
    3333    public void actionPerformed(ActionEvent e) {
    34         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     34        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    3535        if (sel.size() != 1 || !(sel.iterator().next() instanceof Node)) return;
    3636        Node node = (Node) sel.iterator().next();
    3737
    3838        List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
    39             Main.map.mapView.getPoint(node));
     39                Main.map.mapView.getPoint(node));
    4040        HashMap<Way, List<Integer>> insertPoints = new HashMap<Way, List<Integer>>();
    4141        for (WaySegment ws : wss) {
     
    6060            List<Integer> is = insertPoint.getValue();
    6161            pruneSuccsAndReverse(is);
    62             for (int i : is) wnew.nodes.add(i+1, node);
     62            for (int i : is) {
     63                wnew.nodes.add(i+1, node);
     64            }
    6365            cmds.add(new ChangeCommand(w, wnew));
    6466        }
  • trunk/src/org/openstreetmap/josm/actions/JosmAction.java

    r1415 r1814  
    99import org.openstreetmap.josm.Main;
    1010import org.openstreetmap.josm.data.osm.DataSet;
     11import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1112import org.openstreetmap.josm.tools.Destroyable;
    1213import org.openstreetmap.josm.tools.ImageProvider;
     
    6162        putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
    6263        putValue("toolbar", iconName);
    63         if (register)
     64        if (register) {
    6465            Main.toolbar.register(this);
     66        }
    6567    }
    6668
     
    9294    private void setHelpId() {
    9395        String helpId = "Action/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
    94         if (helpId.endsWith("Action"))
     96        if (helpId.endsWith("Action")) {
    9597            helpId = helpId.substring(0, helpId.length()-6);
     98        }
    9699        putValue("help", helpId);
    97100    }
     101
     102    /**
     103     * Replies the current edit layer
     104     *
     105     * @return the current edit layer. null, if no edit layer exists
     106     */
     107    protected OsmDataLayer getEditLayer() {
     108        return Main.main.getEditLayer();
     109    }
     110
     111    /**
     112     * Replies the current dataset
     113     *
     114     * @return the current dataset. null, if no current dataset exists
     115     */
     116    protected DataSet getCurrentDataSet() {
     117        return Main.main.getCurrentDataSet();
     118    }
    98119}
  • trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java

    r1677 r1814  
    5555    public MergeNodesAction() {
    5656        super(tr("Merge Nodes"), "mergenodes", tr("Merge nodes into the oldest one."),
    57         Shortcut.registerShortcut("tools:mergenodes", tr("Tool: {0}", tr("Merge Nodes")), KeyEvent.VK_M, Shortcut.GROUP_EDIT), true);
     57                Shortcut.registerShortcut("tools:mergenodes", tr("Tool: {0}", tr("Merge Nodes")), KeyEvent.VK_M, Shortcut.GROUP_EDIT), true);
    5858        DataSet.selListeners.add(this);
    5959    }
    6060
    6161    public void actionPerformed(ActionEvent event) {
    62         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     62        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    6363        LinkedList<Node> selectedNodes = new LinkedList<Node>();
    6464
     
    6767        // anyway as long as we have at least two nodes
    6868        for (OsmPrimitive osm : selection)
    69             if (osm instanceof Node)
     69            if (osm instanceof Node) {
    7070                selectedNodes.add((Node)osm);
     71            }
    7172
    7273        if (selectedNodes.size() < 2) {
     
    9394            }
    9495        }
    95         if (useNode == null)
     96        if (useNode == null) {
    9697            useNode = selectedNodes.iterator().next();
     98        }
    9799
    98100        mergeNodes(selectedNodes, useNode);
     
    102104     * really do the merging - returns the node that is left
    103105     */
    104     public static Node mergeNodes(LinkedList<Node> allNodes, Node dest) {
     106    public Node mergeNodes(LinkedList<Node> allNodes, Node dest) {
    105107        Node newNode = new Node(dest);
    106108
     
    118120            new HashMap<Pair<Relation,String>, HashSet<Node>>();
    119121        HashSet<Relation> relationsUsingNodes = new HashSet<Relation>();
    120         for (Relation r : Main.ds.relations) {
    121             if (r.deleted || r.incomplete) continue;
     122        for (Relation r : getCurrentDataSet().relations) {
     123            if (r.deleted || r.incomplete) {
     124                continue;
     125            }
    122126            for (RelationMember rm : r.members) {
    123127                if (rm.member instanceof Node) {
     
    148152                        tr("Merge nodes with different memberships?"),
    149153                        tr("The selected nodes have differing relation memberships.  "
    150                             + "Do you still want to merge them?"),
    151                         new String[] {tr("Merge Anyway"), tr("Cancel")},
    152                         new String[] {"mergenodes.png", "cancel.png"}).getValue();
    153                 if (option == 1) break;
     154                                + "Do you still want to merge them?"),
     155                                new String[] {tr("Merge Anyway"), tr("Cancel")},
     156                                new String[] {"mergenodes.png", "cancel.png"}).getValue();
     157                if (option == 1) {
     158                    break;
     159                }
    154160                return null;
    155161            }
     
    160166        for (Node n : allNodes) {
    161167            for (Entry<String,String> e : n.entrySet()) {
    162                 if (!props.containsKey(e.getKey()))
     168                if (!props.containsKey(e.getKey())) {
    163169                    props.put(e.getKey(), new TreeSet<String>());
     170                }
    164171                props.get(e.getKey()).add(e.getValue());
    165172            }
     
    187194        if (!components.isEmpty()) {
    188195            int answer = new ExtendedDialog(Main.parent,
    189                 tr("Enter values for all conflicts."),
    190                 p,
    191                 new String[] {tr("Solve Conflicts"), tr("Cancel")},
    192                 new String[] {"dialogs/conflict.png", "cancel.png"}).getValue();
     196                    tr("Enter values for all conflicts."),
     197                    p,
     198                    new String[] {tr("Solve Conflicts"), tr("Cancel")},
     199                    new String[] {"dialogs/conflict.png", "cancel.png"}).getValue();
    193200            if (answer != 1)
    194201                return null;
    195             for (Entry<String, JComboBox> e : components.entrySet())
     202            for (Entry<String, JComboBox> e : components.entrySet()) {
    196203                newNode.put(e.getKey(), e.getValue().getEditor().getItem().toString());
     204            }
    197205        }
    198206
     
    202210        Collection<OsmPrimitive> del = new HashSet<OsmPrimitive>();
    203211
    204         for (Way w : Main.ds.ways) {
    205             if (w.deleted || w.incomplete || w.nodes.size() < 1) continue;
     212        for (Way w : getCurrentDataSet().ways) {
     213            if (w.deleted || w.incomplete || w.nodes.size() < 1) {
     214                continue;
     215            }
    206216            boolean modify = false;
    207217            for (Node sn : allNodes) {
    208                 if (sn == dest) continue;
     218                if (sn == dest) {
     219                    continue;
     220                }
    209221                if (w.nodes.contains(sn)) {
    210222                    modify = true;
    211223                }
    212224            }
    213             if (!modify) continue;
     225            if (!modify) {
     226                continue;
     227            }
    214228            // OK - this way contains one or more nodes to change
    215229            ArrayList<Node> nn = new ArrayList<Node>();
     
    227241            if (nn.size() < 2) {
    228242                CollectBackReferencesVisitor backRefs =
    229                     new CollectBackReferencesVisitor(Main.ds, false);
     243                    new CollectBackReferencesVisitor(getCurrentDataSet(), false);
    230244                w.visit(backRefs);
    231245                if (!backRefs.data.isEmpty()) {
    232246                    JOptionPane.showMessageDialog(Main.parent,
    233                         tr("Cannot merge nodes: " +
     247                            tr("Cannot merge nodes: " +
    234248                            "Would have to delete a way that is still used."));
    235249                    return null;
     
    247261        del.addAll(allNodes);
    248262        del.remove(dest);
    249         if (!del.isEmpty()) cmds.add(new DeleteCommand(del));
     263        if (!del.isEmpty()) {
     264            cmds.add(new DeleteCommand(del));
     265        }
    250266
    251267        // modify all relations containing the now-deleted nodes
     
    270286
    271287        Main.main.undoRedo.add(new SequenceCommand(tr("Merge {0} nodes", allNodes.size()), cmds));
    272         Main.ds.setSelected(dest);
     288        getCurrentDataSet().setSelected(dest);
    273289
    274290        return dest;
  • trunk/src/org/openstreetmap/josm/actions/MirrorAction.java

    r1722 r1814  
    1414import org.openstreetmap.josm.Main;
    1515import org.openstreetmap.josm.command.Command;
    16 import org.openstreetmap.josm.command.ChangeCommand;
    1716import org.openstreetmap.josm.command.MoveCommand;
    1817import org.openstreetmap.josm.command.SequenceCommand;
    19 import org.openstreetmap.josm.data.coor.EastNorth;
    2018import org.openstreetmap.josm.data.osm.Node;
    2119import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    3432    public MirrorAction() {
    3533        super(tr("Mirror"), "mirror", tr("Mirror selected nodes and ways."),
    36         Shortcut.registerShortcut("tools:mirror", tr("Tool: {0}", tr("Mirror")),
    37             KeyEvent.VK_M, Shortcut.GROUP_EDIT, Shortcut.SHIFT_DEFAULT), true);
     34                Shortcut.registerShortcut("tools:mirror", tr("Tool: {0}", tr("Mirror")),
     35                        KeyEvent.VK_M, Shortcut.GROUP_EDIT, Shortcut.SHIFT_DEFAULT), true);
    3836    }
    3937
    4038    public void actionPerformed(ActionEvent e) {
    41         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     39        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    4240        HashSet<Node> nodes = new HashSet<Node>();
    4341
     
    6664        Collection<Command> cmds = new LinkedList<Command>();
    6765
    68         for (Node n : nodes)
     66        for (Node n : nodes) {
    6967            cmds.add(new MoveCommand(n, 2 * (middle - n.getEastNorth().east()), 0.0));
     68        }
    7069
    7170        Main.main.undoRedo.add(new SequenceCommand(tr("Mirror"), cmds));
  • trunk/src/org/openstreetmap/josm/actions/MoveAction.java

    r1750 r1814  
    8585        }
    8686
    87         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     87        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    8888        Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
    8989
  • trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java

    r1640 r1814  
    3838    public OrthogonalizeAction() {
    3939        super(tr("Orthogonalize Shape"),
    40             "ortho",
    41             tr("Move nodes so all angles are 90 or 270 degree"),
    42             Shortcut.registerShortcut("tools:orthogonalize", tr("Tool: {0}", tr("Orthogonalize Shape")),
    43             KeyEvent.VK_Q,
    44             Shortcut.GROUP_EDIT), true);
     40                "ortho",
     41                tr("Move nodes so all angles are 90 or 270 degree"),
     42                Shortcut.registerShortcut("tools:orthogonalize", tr("Tool: {0}", tr("Orthogonalize Shape")),
     43                        KeyEvent.VK_Q,
     44                        Shortcut.GROUP_EDIT), true);
    4545    }
    4646
    4747    public void actionPerformed(ActionEvent e) {
    4848
    49         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     49        Collection<OsmPrimitive> sel = getCurrentDataSet().getSelected();
    5050
    5151        ArrayList<Node> dirnodes = new ArrayList<Node>();
     
    8484                double angle2 = Math.abs(way.nodes.get(i2).getEastNorth().heading(way.nodes.get(i3).getEastNorth()));
    8585                double delta = Math.abs(angle2 - angle1);
    86                 while(delta > Math.PI) delta -= Math.PI;
     86                while(delta > Math.PI) {
     87                    delta -= Math.PI;
     88                }
    8789                if(delta < Math.PI/4) {
    8890                    JOptionPane.showMessageDialog(Main.parent, tr("Please select ways with almost right angles to orthogonalize."));
     
    9698                    "to undesirable results when doing rectangular alignments.<br>" +
    9799                    "Change your projection to get rid of this warning.<br>" +
    98                     "Do you want to continue?");
    99 
    100             if (!DontShowAgainInfo.show("align_rectangular_4326", msg, false)) {
     100            "Do you want to continue?");
     101
     102            if (!DontShowAgainInfo.show("align_rectangular_4326", msg, false))
    101103                return;
    102             }
    103104        }
    104105        // Check, if selection held neither none nor two nodes
     
    122123
    123124        for (OsmPrimitive osm : sel) {
    124             if(!(osm instanceof Way))
     125            if(!(osm instanceof Way)) {
    125126                continue;
     127            }
    126128
    127129            Way way = (Way)osm;
     
    158160                        diff = heading_diff(headings[i], headings[i - 1]);
    159161                    }
    160                     if (diff > angle_diff_max) angle_diff_max = diff;
     162                    if (diff > angle_diff_max) {
     163                        angle_diff_max = diff;
     164                    }
    161165                }
    162166
     
    164168                    // rearrange headings: everything < 0 gets PI/2-rotated
    165169                    for (int i=0; i < sides; i++) {
    166                         if (headings[i] < 0)
     170                        if (headings[i] < 0) {
    167171                            headings[i] += Math.PI/2;
     172                        }
    168173                    }
    169174                }
     
    217222                // been duplicated
    218223
    219                 if (u == 0) continue;
     224                if (u == 0) {
     225                    continue;
     226                }
    220227
    221228                // q is a number between 0 and 1
     
    257264        double llimit = -Math.PI/4;
    258265        double ulimit = Math.PI/4;
    259         while (h - align_to > ulimit) h -= Math.PI/2;
    260         while (h - align_to < llimit) h += Math.PI/2;
     266        while (h - align_to > ulimit) {
     267            h -= Math.PI/2;
     268        }
     269        while (h - align_to < llimit) {
     270            h += Math.PI/2;
     271        }
    261272
    262273        return h;
  • trunk/src/org/openstreetmap/josm/actions/PasteAction.java

    r1750 r1814  
    3131    public PasteAction() {
    3232        super(tr("Paste"), "paste", tr("Paste contents of paste buffer."),
    33             Shortcut.registerShortcut("system:paste", tr("Edit: {0}", tr("Paste")), KeyEvent.VK_V, Shortcut.GROUP_MENU), true);
     33                Shortcut.registerShortcut("system:paste", tr("Edit: {0}", tr("Paste")), KeyEvent.VK_V, Shortcut.GROUP_MENU), true);
    3434        setEnabled(false);
    3535    }
     
    3939    }
    4040
    41     public static void pasteData(DataSet pasteBuffer, Layer source, ActionEvent e) {
     41    public void pasteData(DataSet pasteBuffer, Layer source, ActionEvent e) {
    4242        /* Find the middle of the pasteBuffer area */
    4343        double maxEast = -1E100, minEast = 1E100, maxNorth = -1E100, minNorth = 1E100;
     
    6363
    6464        HashMap<OsmPrimitive,OsmPrimitive> map = new HashMap<OsmPrimitive,OsmPrimitive>();
    65           /* temporarily maps old nodes to new so we can do a true deep copy */
     65        /* temporarily maps old nodes to new so we can do a true deep copy */
    6666
    6767        /* do the deep copy of the paste buffer contents, leaving the pasteBuffer unchanged */
     
    6969            Node nnew = new Node(n);
    7070            nnew.id = 0;
    71             if (Main.main.createOrGetEditLayer() == source) {
     71            if (Main.map.mapView.getEditLayer() == source) {
    7272                nnew.setEastNorth(nnew.getEastNorth().add(offsetEast, offsetNorth));
    7373            }
     
    113113
    114114        Main.main.undoRedo.add(new SequenceCommand(tr("Paste"), clist));
    115         Main.ds.setSelected(osms);
     115        getCurrentDataSet().setSelected(osms);
    116116        Main.map.mapView.repaint();
    117117    }
  • trunk/src/org/openstreetmap/josm/actions/PasteTagsAction.java

    r1613 r1814  
    2727    public PasteTagsAction(JosmAction copyAction) {
    2828        super(tr("Paste Tags"), "pastetags",
    29             tr("Apply tags of contents of paste buffer to all selected items."),
    30             Shortcut.registerShortcut("system:pastestyle", tr("Edit: {0}", tr("Paste Tags")), KeyEvent.VK_V, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT), true);
     29                tr("Apply tags of contents of paste buffer to all selected items."),
     30                Shortcut.registerShortcut("system:pastestyle", tr("Edit: {0}", tr("Paste Tags")), KeyEvent.VK_V, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT), true);
    3131        DataSet.selListeners.add(this);
    3232        copyAction.addListener(this);
     
    4343            OsmPrimitive osm = it.next();
    4444            Map<String, String> m = osm.keys;
    45             if(m == null)
     45            if(m == null) {
    4646                continue;
     47            }
    4748
    4849            for (String key : m.keySet()) {
     
    5556        Collection<Command> clist = new LinkedList<Command>();
    5657        String pbSource = "Multiple Sources";
    57         if(Main.pasteBuffer.dataSources.size() == 1)
     58        if(Main.pasteBuffer.dataSources.size() == 1) {
    5859            pbSource = ((DataSource) Main.pasteBuffer.dataSources.toArray()[0]).origin;
     60        }
    5961
    6062        boolean pbNodes = Main.pasteBuffer.nodes.size() > 0;
    6163        boolean pbWays  = Main.pasteBuffer.ways.size() > 0;
    6264
    63         boolean seNodes = Main.ds.getSelectedNodes().size() > 0;
    64         boolean seWays  = Main.ds.getSelectedWays().size() > 0;
    65         boolean seRels  = Main.ds.getSelectedRelations().size() > 0;
     65        boolean seNodes = getCurrentDataSet().getSelectedNodes().size() > 0;
     66        boolean seWays  = getCurrentDataSet().getSelectedWays().size() > 0;
     67        boolean seRels  = getCurrentDataSet().getSelectedRelations().size() > 0;
    6668
    6769        if(!seNodes && seWays && !seRels && pbNodes && pbSource.equals("Copied Nodes")) {
    6870            // Copy from nodes to ways
    69             pasteKeys(clist, Main.pasteBuffer.nodes, Main.ds.getSelectedWays());
     71            pasteKeys(clist, Main.pasteBuffer.nodes, getCurrentDataSet().getSelectedWays());
    7072        } else if(seNodes && !seWays && !seRels && pbWays && pbSource.equals("Copied Ways")) {
    7173            // Copy from ways to nodes
    72             pasteKeys(clist, Main.pasteBuffer.ways, Main.ds.getSelectedNodes());
     74            pasteKeys(clist, Main.pasteBuffer.ways, getCurrentDataSet().getSelectedNodes());
    7375        } else {
    7476            // Copy from equal to equal
    75             pasteKeys(clist, Main.pasteBuffer.nodes, Main.ds.getSelectedNodes());
    76             pasteKeys(clist, Main.pasteBuffer.ways, Main.ds.getSelectedWays());
    77             pasteKeys(clist, Main.pasteBuffer.relations, Main.ds.getSelectedRelations());
     77            pasteKeys(clist, Main.pasteBuffer.nodes, getCurrentDataSet().getSelectedNodes());
     78            pasteKeys(clist, Main.pasteBuffer.ways, getCurrentDataSet().getSelectedWays());
     79            pasteKeys(clist, Main.pasteBuffer.relations, getCurrentDataSet().getSelectedRelations());
    7880        }
    7981        Main.main.undoRedo.add(new SequenceCommand(tr("Paste Tags"), clist));
    80         Main.ds.setSelected(Main.ds.getSelected()); // to force selection listeners, in particular the tag panel, to update
     82        getCurrentDataSet().setSelected(getCurrentDataSet().getSelected()); // to force selection listeners, in particular the tag panel, to update
    8183        Main.map.mapView.repaint();
    8284    }
     
    8688        for (Iterator<? extends OsmPrimitive> it = osms.iterator(); it.hasNext();) {
    8789            OsmPrimitive osm = it.next();
    88             if (osm.keys == null || osm.keys.isEmpty())
     90            if (osm.keys == null || osm.keys.isEmpty()) {
    8991                continue;
     92            }
    9093            for (String key : osm.keys.keySet()) {
    9194                String value = osm.keys.get(key);
    92                 if (! kvSeen.containsKey(key))
     95                if (! kvSeen.containsKey(key)) {
    9396                    kvSeen.put(key, value);
    94                 else if (! kvSeen.get(key).equals(value))
     97                } else if (! kvSeen.get(key).equals(value))
    9598                    return true;
    9699            }
     
    110113                ! selection.isEmpty() &&
    111114                ! pasteBuffer.allPrimitives().isEmpty() &&
    112                 (Main.ds.getSelectedNodes().isEmpty() ||
    113                     ! containsSameKeysWithDifferentValues(pasteBuffer.nodes)) &&
    114                 (Main.ds.getSelectedWays().isEmpty() ||
    115                     ! containsSameKeysWithDifferentValues(pasteBuffer.ways)) &&
    116                 (Main.ds.getSelectedRelations().isEmpty() ||
    117                     ! containsSameKeysWithDifferentValues(pasteBuffer.relations)));
     115                (getCurrentDataSet().getSelectedNodes().isEmpty() ||
     116                        ! containsSameKeysWithDifferentValues(pasteBuffer.nodes)) &&
     117                        (getCurrentDataSet().getSelectedWays().isEmpty() ||
     118                                ! containsSameKeysWithDifferentValues(pasteBuffer.ways)) &&
     119                                (getCurrentDataSet().getSelectedRelations().isEmpty() ||
     120                                        ! containsSameKeysWithDifferentValues(pasteBuffer.relations)));
    118121    }
    119122
    120123    @Override public void pasteBufferChanged(DataSet newPasteBuffer) {
    121         possiblyEnable(Main.ds.getSelected(), newPasteBuffer);
     124        possiblyEnable(getCurrentDataSet().getSelected(), newPasteBuffer);
    122125    }
    123126
  • trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java

    r1613 r1814  
    3030    public ReverseWayAction() {
    3131        super(tr("Reverse Ways"), "wayflip", tr("Reverse the direction of all selected ways."),
    32         Shortcut.registerShortcut("tools:reverse", tr("Tool: {0}", tr("Reverse Ways")), KeyEvent.VK_R, Shortcut.GROUP_EDIT), true);
     32                Shortcut.registerShortcut("tools:reverse", tr("Tool: {0}", tr("Reverse Ways")), KeyEvent.VK_R, Shortcut.GROUP_EDIT), true);
    3333    }
    3434
     
    4747
    4848            public void visitAll() {
    49                 for (OsmPrimitive osm : Main.ds.getSelected())
     49                for (OsmPrimitive osm : getCurrentDataSet().getSelected()) {
    5050                    osm.visit(this);
     51                }
    5152            }
    5253        }.visitAll();
     
    6970                    final Collection<Command> changePropertyCommands = reverseWayTagCorrector.execute(w, wnew);
    7071                    propertiesUpdated = propertiesUpdated
    71                         || (changePropertyCommands != null && !changePropertyCommands.isEmpty());
     72                    || (changePropertyCommands != null && !changePropertyCommands.isEmpty());
    7273                    c.addAll(changePropertyCommands);
    7374                }
     
    8081        }
    8182        Main.main.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c));
    82         if (propertiesUpdated)
    83             DataSet.fireSelectionChanged(Main.ds.getSelected());
     83        if (propertiesUpdated) {
     84            DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());
     85        }
    8486        Main.map.repaint();
    8587    }
  • trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java

    r1808 r1814  
    160160            OsmBzip2Importer osmBzip2Importer = new OsmBzip2Importer();
    161161            if (gpxImExporter.acceptFile(file)) {
    162                 GpxExportAction.exportGpx(file, layer);
     162                new GpxExportAction().exportGpx(file, layer);
    163163            } else if (osmImExporter.acceptFile(file)
    164164                    || osmGzipImporter.acceptFile(file)
  • trunk/src/org/openstreetmap/josm/actions/SelectAllAction.java

    r1808 r1814  
    77import java.awt.event.KeyEvent;
    88
    9 import org.openstreetmap.josm.Main;
    109import org.openstreetmap.josm.gui.layer.Layer;
    1110import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
     
    2423        if (!isEnabled())
    2524            return;
    26         Main.ds.setSelected(Main.ds.allNonDeletedCompletePrimitives());
     25        getCurrentDataSet().setSelected(getCurrentDataSet().allNonDeletedCompletePrimitives());
    2726    }
    2827
     
    3231     */
    3332    protected void refreshEnabled() {
    34         setEnabled(Main.map != null
    35                 && Main.map.mapView !=null
    36                 && Main.map.mapView.getEditLayer() != null
    37         );
     33        setEnabled(getEditLayer() != null);
    3834    }
    3935
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r1809 r1814  
    3232import org.openstreetmap.josm.data.osm.Way;
    3333import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
    34 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    3534import org.openstreetmap.josm.data.osm.visitor.Visitor;
     35import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    3636import org.openstreetmap.josm.tools.Shortcut;
    3737
     
    6565    public void actionPerformed(ActionEvent e) {
    6666
    67         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     67        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    6868
    6969        if (!checkSelection(selection)) {
     
    9999            HashMap<Way, Integer> wayOccurenceCounter = new HashMap<Way, Integer>();
    100100            for (Node n : selectedNodes) {
    101                 for (Way w : Main.ds.ways) {
     101                for (Way w : getCurrentDataSet().ways) {
    102102                    if (w.deleted || w.incomplete) {
    103103                        continue;
     
    272272        Boolean warnme=false;
    273273        // now copy all relations to new way also
    274         for (Relation r : Main.ds.relations) {
     274
     275        for (Relation r : getCurrentDataSet().relations) {
    275276            if (r.deleted || r.incomplete) {
    276277                continue;
     
    329330        }
    330331
    331         NameVisitor v = new NameVisitor();
    332         v.visit(selectedWay);
    333332        Main.main.undoRedo.add(
    334333                new SequenceCommand(tr("Split way {0} into {1} parts",
    335                         v.name, wayChunks.size()),
     334                        new PrimitiveNameFormatter().getName(selectedWay), wayChunks.size()),
    336335                        commandList));
    337         Main.ds.setSelected(newSelection);
     336        getCurrentDataSet().setSelected(newSelection);
    338337    }
    339338
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r1722 r1814  
    5050    public UnGlueAction() {
    5151        super(tr("UnGlue Ways"), "unglueways", tr("Duplicate nodes that are used by multiple ways."),
    52         Shortcut.registerShortcut("tools:unglue", tr("Tool: {0}", tr("UnGlue Ways")), KeyEvent.VK_G, Shortcut.GROUP_EDIT), true);
     52                Shortcut.registerShortcut("tools:unglue", tr("Tool: {0}", tr("UnGlue Ways")), KeyEvent.VK_G, Shortcut.GROUP_EDIT), true);
    5353        //DataSet.selListeners.add(this);
    5454    }
     
    6161    public void actionPerformed(ActionEvent e) {
    6262
    63         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     63        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    6464
    6565        String errMsg = null;
    6666        if (checkSelection(selection)) {
    6767            int count = 0;
    68             for (Way w : Main.ds.ways) {
    69                 if (w.deleted || w.incomplete || w.nodes.size() < 1) continue;
    70                 if (!w.nodes.contains(selectedNode)) continue;
     68            for (Way w : getCurrentDataSet().ways) {
     69                if (w.deleted || w.incomplete || w.nodes.size() < 1) {
     70                    continue;
     71                }
     72                if (!w.nodes.contains(selectedNode)) {
     73                    continue;
     74                }
    7175                count++;
    7276            }
     
    7478                // If there aren't enough ways, maybe the user wanted to unglue the nodes
    7579                // (= copy tags to a new node)
    76                 if(checkForUnglueNode(selection))
     80                if(checkForUnglueNode(selection)) {
    7781                    unglueNode(e);
    78                 else
     82                } else {
    7983                    errMsg = tr("This node is not glued to anything else.");
     84                }
    8085            } else {
    8186                // and then do the work.
     
    8691            for (Node n : selectedNodes) {
    8792                int count = 0;
    88                 for (Way w : Main.ds.ways) {
    89                     if (w.deleted || w.incomplete || w.nodes.size() < 1) continue;
    90                     if (!w.nodes.contains(n)) continue;
     93                for (Way w : getCurrentDataSet().ways) {
     94                    if (w.deleted || w.incomplete || w.nodes.size() < 1) {
     95                        continue;
     96                    }
     97                    if (!w.nodes.contains(n)) {
     98                        continue;
     99                    }
    91100                    count++;
    92101                }
     
    118127                "\n"+
    119128                tr("Note: If a way is selected, this way will get fresh copies of the unglued\n"+
    120                    "nodes and the new nodes will be selected. Otherwise, all ways will get their\n"+
    121                    "own copy and all nodes will be selected.");
    122         }
    123 
    124         if(errMsg != null)
     129                        "nodes and the new nodes will be selected. Otherwise, all ways will get their\n"+
     130                "own copy and all nodes will be selected.");
     131        }
     132
     133        if(errMsg != null) {
    125134            JOptionPane.showMessageDialog(Main.parent, errMsg);
     135        }
    126136
    127137        selectedNode = null;
     
    156166
    157167        Main.main.undoRedo.add(new SequenceCommand(tr("Unglued Node"), cmds));
    158         Main.ds.setSelected(n);
     168        getCurrentDataSet().setSelected(n);
    159169        Main.map.mapView.repaint();
    160170    }
     
    176186            return false;
    177187        boolean isPartOfWay = false;
    178         for(Way w : Main.ds.ways) {
     188        for(Way w : getCurrentDataSet().ways) {
    179189            if(w.nodes.contains(n)) {
    180190                isPartOfWay = true;
     
    250260        for (OsmPrimitive p : selection) {
    251261            if (p instanceof Way) {
    252                 if (selectedWay != null) {
     262                if (selectedWay != null)
    253263                    return false;
    254                 }
    255264                selectedWay = (Way) p;
    256265            }
    257266        }
    258         if (selectedWay == null) {
    259             return false;
    260         }
     267        if (selectedWay == null)
     268            return false;
    261269
    262270        selectedNodes = new ArrayList<Node>();
     
    264272            if (p instanceof Node) {
    265273                Node n = (Node) p;
    266                 if (!selectedWay.nodes.contains(n)) {
     274                if (!selectedWay.nodes.contains(n))
    267275                    return false;
    268                 }
    269276                selectedNodes.add(n);
    270277            }
     
    311318        Relation newRel = null;
    312319        HashSet<String> rolesToReAdd = null;
    313         for (Relation r : Main.ds.relations) {
    314             if (r.deleted || r.incomplete) continue;
     320        for (Relation r : getCurrentDataSet().relations) {
     321            if (r.deleted || r.incomplete) {
     322                continue;
     323            }
    315324            newRel = null;
    316325            rolesToReAdd = null;
     
    330339                for (RelationMember rm : r.members) {
    331340                    //if (rm.member != selectedNode) {
    332                         newRel.members.add(rm);
     341                    newRel.members.add(rm);
    333342                    //}
    334343                }
     
    356365            boolean firstway = true;
    357366            // modify all ways containing the nodes
    358             for (Way w : Main.ds.ways) {
    359                 if (w.deleted || w.incomplete || w.nodes.size() < 1) continue;
    360                 if (!w.nodes.contains(selectedNode)) continue;
    361                 if (!firstway) cmds.add(new ChangeCommand(w, modifyWay(selectedNode, w, cmds, newNodes)));
     367            for (Way w : getCurrentDataSet().ways) {
     368                if (w.deleted || w.incomplete || w.nodes.size() < 1) {
     369                    continue;
     370                }
     371                if (!w.nodes.contains(selectedNode)) {
     372                    continue;
     373                }
     374                if (!firstway) {
     375                    cmds.add(new ChangeCommand(w, modifyWay(selectedNode, w, cmds, newNodes)));
     376                }
    362377                firstway = false;
    363378            }
     
    372387            newNodes.add(selectedNode);
    373388        } // if a node and a way has been selected, new selection is only the new node that was added to the selected way
    374         Main.ds.setSelected(newNodes);
     389        getCurrentDataSet().setSelected(newNodes);
    375390    }
    376391
     
    393408
    394409        Main.main.undoRedo.add(new SequenceCommand(tr("Dupe {0} nodes into {1} nodes", selectedNodes.size(), selectedNodes.size()+allNewNodes.size()), cmds));
    395         Main.ds.setSelected(allNewNodes);
    396     }
    397 
    398 // Disabled because we have such a nice help text that would not be shown otherwise.
    399 //
    400 //  /**
    401 //   * Enable the menu option if the selection looks like we could use it.
    402 //   */
    403 //  public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
    404 //      setEnabled(checkSelection(newSelection) || checkSelection2(newSelection));
    405 //      selectedNode = null;
    406 //      selectedWay = null;
    407 //      selectedNodes = null;
    408 //  }
     410        getCurrentDataSet().setSelected(allNewNodes);
     411    }
    409412}
  • trunk/src/org/openstreetmap/josm/actions/UnselectAllAction.java

    r1808 r1814  
    4444        if (!isEnabled())
    4545            return;
    46         Main.ds.setSelected();
     46        getCurrentDataSet().setSelected();
    4747    }
    4848    /**
     
    5151     */
    5252    protected void refreshEnabled() {
    53         setEnabled(Main.map != null
    54                 && Main.map.mapView !=null
    55                 && Main.map.mapView.getEditLayer() != null
    56         );
     53        setEnabled(getEditLayer() != null);
    5754    }
    5855
  • trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java

    r1808 r1814  
    1616import org.openstreetmap.josm.data.osm.DataSource;
    1717import org.openstreetmap.josm.gui.layer.Layer;
     18import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1819import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    1920import org.openstreetmap.josm.tools.Shortcut;
     
    3839     */
    3940    protected void refreshEnabled() {
    40         setEnabled(Main.main != null
    41                 && Main.map != null
    42                 && Main.map.mapView !=null
    43                 && Main.map.mapView.getEditLayer() != null
    44         );
     41        setEnabled(getEditLayer() != null);
    4542    }
    4643
     
    5047        int bboxCount = 0;
    5148        List<Area> areas = new ArrayList<Area>();
    52         for(DataSource ds : Main.main.createOrGetEditLayer().data.dataSources) {
     49        for(DataSource ds : Main.map.mapView.getEditLayer().data.dataSources) {
    5350            areas.add(new Area(ds.bounds.asRect()));
    5451        }
  • trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java

    r1811 r1814  
    4242    protected void handlePrimitiveGoneException(long id) {
    4343        MultiFetchServerObjectReader reader = new MultiFetchServerObjectReader();
    44         reader.append(Main.main.createOrGetEditLayer().data,id);
     44        reader.append(getCurrentDataSet(),id);
    4545        DataSet ds = null;
    4646        try {
     
    194194     */
    195195    protected void refreshEnabled() {
    196         setEnabled(Main.main != null
    197                 && Main.map != null
    198                 && Main.map.mapView !=null
    199                 && Main.map.mapView.getEditLayer() != null
    200                 && ! Main.map.mapView.getEditLayer().data.getSelected().isEmpty()
     196        setEnabled(getCurrentDataSet() != null
     197                && ! getCurrentDataSet().getSelected().isEmpty()
    201198        );
    202199    }
     
    208205        if (! isEnabled())
    209206            return;
    210         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     207        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    211208        if (selection.size() == 0) {
    212209            JOptionPane.showMessageDialog(
  • trunk/src/org/openstreetmap/josm/actions/UploadAction.java

    r1811 r1814  
    178178        }
    179179
    180         ConflictCollection conflicts = Main.main.createOrGetEditLayer().getConflicts();
     180        ConflictCollection conflicts = Main.map.mapView.getEditLayer().getConflicts();
    181181        if (conflicts !=null && !conflicts.isEmpty()) {
    182182            JOptionPane.showMessageDialog(Main.parent,tr("There are unresolved conflicts. You have to resolve these first."));
     
    189189        final LinkedList<OsmPrimitive> update = new LinkedList<OsmPrimitive>();
    190190        final LinkedList<OsmPrimitive> delete = new LinkedList<OsmPrimitive>();
    191         for (OsmPrimitive osm : Main.ds.allPrimitives()) {
     191        for (OsmPrimitive osm : getCurrentDataSet().allPrimitives()) {
    192192            if (osm.get("josm/ignore") != null) {
    193193                continue;
     
    231231            @Override protected void realRun() throws SAXException, IOException {
    232232                try {
    233                     server.uploadOsm(Main.ds.version, all, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
    234                     Main.main.createOrGetEditLayer().cleanData(server.processed, !add.isEmpty());
     233                    server.uploadOsm(getCurrentDataSet().version, all, progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false));
     234                    getEditLayer().cleanData(server.processed, !add.isEmpty());
    235235                } catch (Exception sxe) {
    236236                    if (uploadCancelled) {
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java

    r1750 r1814  
    7777        Command c;
    7878        if (ctrl) {
    79             c = DeleteCommand.deleteWithReferences(Main.ds.getSelected());
     79            c = DeleteCommand.deleteWithReferences(getCurrentDataSet().getSelected());
    8080        } else {
    81             c = DeleteCommand.delete(Main.ds.getSelected(), !alt);
     81            c = DeleteCommand.delete(getCurrentDataSet().getSelected(), !alt);
    8282        }
    8383        if (c != null) {
     
    8585        }
    8686
    87         Main.ds.setSelected();
     87        getCurrentDataSet().setSelected();
    8888        Main.map.repaint();
    8989    }
     
    124124        }
    125125
    126         Main.ds.setSelected();
     126        getCurrentDataSet().setSelected();
    127127        Main.map.mapView.repaint();
    128128    }
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r1750 r1814  
    9494        // Add extra shortcut N
    9595        Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
    96             Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT).getKeyStroke(), tr("Draw"));
     96                Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT).getKeyStroke(), tr("Draw"));
    9797
    9898        cursorCrosshair = getCursor();
     
    124124                        return;
    125125                    switch(c) {
    126                         case way:
    127                             Main.map.mapView.setCursor(cursorJoinWay);
    128                             break;
    129                         case node:
    130                             Main.map.mapView.setCursor(cursorJoinNode);
    131                             break;
    132                         default:
    133                             Main.map.mapView.setCursor(cursorCrosshair);
    134                             break;
     126                    case way:
     127                        Main.map.mapView.setCursor(cursorJoinWay);
     128                        break;
     129                    case node:
     130                        Main.map.mapView.setCursor(cursorJoinNode);
     131                        break;
     132                    default:
     133                        Main.map.mapView.setCursor(cursorCrosshair);
     134                    break;
    135135                    }
    136136                }
     
    162162
    163163        // This happens when nothing is selected, but we still want to highlight the "target node"
    164         if (mouseOnExistingNode == null && Main.ds.getSelected().size() == 0
    165                 && mousePos != null)
     164        if (mouseOnExistingNode == null && getCurrentDataSet().getSelected().size() == 0
     165                && mousePos != null) {
    166166            mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos);
     167        }
    167168
    168169        if (mouseOnExistingNode != null) {
     
    170171            // We also need this list for the statusbar help text
    171172            oldHighlights.add(mouseOnExistingNode);
    172             if(drawTargetHighlight)
     173            if(drawTargetHighlight) {
    173174                mouseOnExistingNode.highlighted = true;
     175            }
    174176            return;
    175177        }
     
    259261
    260262    private void tryAgain(MouseEvent e) {
    261         Main.ds.setSelected();
     263        getCurrentDataSet().setSelected();
    262264        mouseClicked(e);
    263265    }
     
    306308        mousePos = e.getPoint();
    307309
    308         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     310        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    309311        Collection<Command> cmds = new LinkedList<Command>();
    310312
    311313        ArrayList<Way> reuseWays = new ArrayList<Way>(),
    312             replacedWays = new ArrayList<Way>();
     314        replacedWays = new ArrayList<Way>();
    313315        boolean newNode = false;
    314316        Node n = null;
    315317
    316         if (!ctrl)
     318        if (!ctrl) {
    317319            n = Main.map.mapView.getNearestNode(mousePos);
     320        }
    318321
    319322        if (n != null) {
     
    323326                // (this is just a convenience option so that people don't
    324327                // have to switch modes)
    325                 Main.ds.setSelected(n);
    326                 selection = Main.ds.getSelected();
     328                getCurrentDataSet().setSelected(n);
     329                selection = getCurrentDataSet().getSelected();
    327330                // The user explicitly selected a node, so let him continue drawing
    328331                wayIsFinished = false;
     
    334337            if (n.getCoor().isOutSideWorld()) {
    335338                JOptionPane.showMessageDialog(Main.parent,
    336                     tr("Cannot add a node outside of the world."));
     339                        tr("Cannot add a node outside of the world."));
    337340                return;
    338341            }
     
    366369
    367370                    pruneSuccsAndReverse(is);
    368                     for (int i : is) segSet.add(
    369                         Pair.sort(new Pair<Node,Node>(w.nodes.get(i), w.nodes.get(i+1))));
    370                     for (int i : is) wnew.addNode(i + 1, n);
     371                    for (int i : is) {
     372                        segSet.add(
     373                                Pair.sort(new Pair<Node,Node>(w.nodes.get(i), w.nodes.get(i+1))));
     374                    }
     375                    for (int i : is) {
     376                        wnew.addNode(i + 1, n);
     377                    }
    371378
    372379                    // If ALT is pressed, a new way should be created and that new way should get
     
    375382                    // but pressing ALT prevents this. Therefore we must de-select the way manually
    376383                    // here so /only/ the new way will be selected after this method finishes.
    377                     if(alt) wnew.selected = false;
     384                    if(alt) {
     385                        wnew.selected = false;
     386                    }
    378387
    379388                    cmds.add(new ChangeCommand(insertPoint.getKey(), wnew));
     
    450459                    int nodeCount=0;
    451460                    for (Node p : way.nodes)
    452                         if(p.equals(n0)) nodeCount++;
    453                     if(nodeCount > 1) way = null;
     461                        if(p.equals(n0)) {
     462                            nodeCount++;
     463                        }
     464                    if(nodeCount > 1) {
     465                        way = null;
     466                    }
    454467                }
    455468
     
    476489
    477490                // Add new node to way
    478                 if (way.nodes.get(way.nodes.size() - 1) == n0)
     491                if (way.nodes.get(way.nodes.size() - 1) == n0) {
    479492                    way.addNode(n);
    480                 else
     493                } else {
    481494                    way.addNode(0, n);
     495                }
    482496
    483497                extendedWay = true;
    484                 Main.ds.setSelected(way);
     498                getCurrentDataSet().setSelected(way);
    485499            }
    486500        }
     
    488502        String title;
    489503        if (!extendedWay) {
    490             if (!newNode) {
     504            if (!newNode)
    491505                return; // We didn't do anything.
    492             } else if (reuseWays.isEmpty()) {
     506            else if (reuseWays.isEmpty()) {
    493507                title = tr("Add node");
    494508            } else {
    495509                title = tr("Add node into way");
    496                 for (Way w : reuseWays) w.selected = false;
    497             }
    498             Main.ds.setSelected(n);
     510                for (Way w : reuseWays) {
     511                    w.selected = false;
     512                }
     513            }
     514            getCurrentDataSet().setSelected(n);
    499515        } else if (!newNode) {
    500516            title = tr("Connect existing way to node");
     
    508524
    509525        Main.main.undoRedo.add(c);
    510         if(!wayIsFinished) lastUsedNode = n;
     526        if(!wayIsFinished) {
     527            lastUsedNode = n;
     528        }
    511529
    512530        computeHelperLine();
     
    534552            int posn0 = selectedWay.nodes.indexOf(currentNode);
    535553            if( posn0 != -1 && // n0 is part of way
    536                 (posn0 >= 1                          && targetNode.equals(selectedWay.nodes.get(posn0-1))) || // previous node
    537                 (posn0 < selectedWay.nodes.size()-1) && targetNode.equals(selectedWay.nodes.get(posn0+1))) {  // next node
    538                 Main.ds.setSelected(targetNode);
     554                    (posn0 >= 1                          && targetNode.equals(selectedWay.nodes.get(posn0-1))) || // previous node
     555                    (posn0 < selectedWay.nodes.size()-1) && targetNode.equals(selectedWay.nodes.get(posn0+1))) {  // next node
     556                getCurrentDataSet().setSelected(targetNode);
    539557                lastUsedNode = targetNode;
    540558                return true;
     
    618636        double angle = -1;
    619637
    620         Collection<OsmPrimitive> selection = Main.ds.getSelected();
     638        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    621639
    622640        Node selectedNode = null;
     
    638656        if(!ctrl && currentMouseNode == null) {
    639657            List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(mousePos);
    640             for(WaySegment ws : wss)
     658            for(WaySegment ws : wss) {
    641659                mouseOnExistingWays.add(ws.way);
     660            }
    642661        }
    643662
     
    692711        if (previousNode != null) {
    693712            angle = hdg - Math.toDegrees(previousNode.getCoor().heading(currentBaseNode.getCoor()));
    694             if (angle < 0) angle += 360;
     713            if (angle < 0) {
     714                angle += 360;
     715            }
    695716        }
    696717        Main.map.statusLine.setAngle(angle);
     
    715736     *  <code>null</code> otherwise.
    716737     */
    717     public static Way getWayForNode(Node n) {
     738    public Way getWayForNode(Node n) {
    718739        Way way = null;
    719         for (Way w : Main.ds.ways) {
    720             if (w.deleted || w.incomplete || w.nodes.size() < 1) continue;
     740        for (Way w : getCurrentDataSet().ways) {
     741            if (w.deleted || w.incomplete || w.nodes.size() < 1) {
     742                continue;
     743            }
    721744            Node firstNode = w.nodes.get(0);
    722745            Node lastNode = w.nodes.get(w.nodes.size() - 1);
     
    805828        default:
    806829            EastNorth P = n.getEastNorth();
    807             seg = segs.iterator().next();
    808             A = seg.a.getEastNorth();
    809             B = seg.b.getEastNorth();
    810             double a = P.distanceSq(B);
    811             double b = P.distanceSq(A);
    812             double c = A.distanceSq(B);
    813             q = (a - b + c) / (2*c);
    814             n.setEastNorth(new EastNorth(B.east() + q * (A.east() - B.east()), B.north() + q * (A.north() - B.north())));
     830        seg = segs.iterator().next();
     831        A = seg.a.getEastNorth();
     832        B = seg.b.getEastNorth();
     833        double a = P.distanceSq(B);
     834        double b = P.distanceSq(A);
     835        double c = A.distanceSq(B);
     836        q = (a - b + c) / (2*c);
     837        n.setEastNorth(new EastNorth(B.east() + q * (A.east() - B.east()), B.north() + q * (A.north() - B.north())));
    815838        }
    816839    }
     
    883906            // oldHighlights may store a node or way, check if it's a node
    884907            OsmPrimitive x = oldHighlights.iterator().next();
    885             if (x instanceof Node)
     908            if (x instanceof Node) {
    886909                rv = tr("Select node under cursor.");
    887             else
     910            } else {
    888911                rv = trn("Insert new node into way.", "Insert new node into {0} ways.",
    889                 oldHighlights.size(), oldHighlights.size());
     912                        oldHighlights.size(), oldHighlights.size());
     913            }
    890914        }
    891915
     
    894918         */
    895919        if (currentBaseNode != null && !wayIsFinished) {
    896             if (alt)
     920            if (alt) {
    897921                rv += " " + tr("Start new way from last node.");
    898             else
     922            } else {
    899923                rv += " " + tr("Continue way from last node.");
     924            }
    900925        }
    901926
     
    904929         * Handle special case: Highlighted node == selected node => finish drawing
    905930         */
    906         if (n != null && Main.ds.getSelectedNodes().contains(n)) {
    907             if (wayIsFinished)
     931        if (n != null && getCurrentDataSet().getSelectedNodes().contains(n)) {
     932            if (wayIsFinished) {
    908933                rv = tr("Select node under cursor.");
    909             else
     934            } else {
    910935                rv = tr("Finish drawing.");
     936            }
    911937        }
    912938
     
    914940         * Handle special case: Self-Overlapping or closing way
    915941         */
    916         if (Main.ds.getSelectedWays().size() > 0 && !wayIsFinished && !alt) {
    917             Way w = (Way) Main.ds.getSelectedWays().iterator().next();
     942        if (getCurrentDataSet().getSelectedWays().size() > 0 && !wayIsFinished && !alt) {
     943            Way w = (Way) getCurrentDataSet().getSelectedWays().iterator().next();
    918944            for (Node m : w.nodes) {
    919945                if (m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
  • trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java

    r1750 r1814  
    7777        super(tr("Extrude"), "extrude/extrude", tr("Create areas"),
    7878                Shortcut.registerShortcut("mapmode:extrude", tr("Mode: {0}", tr("Extrude")), KeyEvent.VK_X, Shortcut.GROUP_EDIT),
    79             mapFrame,
    80             getCursor("normal", "rectangle", Cursor.DEFAULT_CURSOR));
     79                mapFrame,
     80                getCursor("normal", "rectangle", Cursor.DEFAULT_CURSOR));
    8181        putValue("help", "Action/Extrude/Extrude");
    8282        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay",200);
     
    160160
    161161            double u = ((en3.east() - en1.east()) * (en2.east() - en1.east()) +
    162                         (en3.north() - en1.north()) * (en2.north() - en1.north())) /
    163                        en2.distanceSq(en1);
     162                    (en3.north() - en1.north()) * (en2.north() - en1.north())) /
     163                    en2.distanceSq(en1);
    164164            // the point on the segment from which the distance to mouse pos is shortest
    165165            EastNorth base = new EastNorth(en1.east() + u * (en2.east() - en1.east()),
    166                                            en1.north() + u * (en2.north() - en1.north()));
     166                    en1.north() + u * (en2.north() - en1.north()));
    167167
    168168            // find out the distance, in metres, between the base point and the mouse cursor
     
    219219        initialMousePos = e.getPoint();
    220220
    221         if(selectedSegment != null)
    222             Main.ds.setSelected(selectedSegment.way);
     221        if(selectedSegment != null) {
     222            getCurrentDataSet().setSelected(selectedSegment.way);
     223        }
    223224    }
    224225
     
    241242            wnew.addNode(selectedSegment.lowerIndex+1, n3);
    242243            wnew.addNode(selectedSegment.lowerIndex+1, n4);
    243             if (wnew.nodes.size() == 4) wnew.addNode(n1);
     244            if (wnew.nodes.size() == 4) {
     245                wnew.addNode(n1);
     246            }
    244247            Collection<Command> cmds = new LinkedList<Command>();
    245248            cmds.add(new AddCommand(n4));
     
    258261
    259262    @Override public String getModeHelpText() {
    260         if (mode == Mode.select) {
     263        if (mode == Mode.select)
    261264            return tr("Release the mouse button to select the objects in the rectangle.");
    262         } else if (mode == Mode.EXTRUDE) {
     265        else if (mode == Mode.EXTRUDE)
    263266            return tr("Draw a rectangle of the desired size, then release the mouse button.");
    264         } else if (mode == Mode.rotate) {
     267        else if (mode == Mode.rotate)
    265268            return tr("Release the mouse button to stop rotating.");
    266         } else {
     269        else
    267270            return tr("Drag a way segment to make a rectangle.");
    268         }
    269     }
    270 
    271         @Override public boolean layerIsSupported(Layer l) {
    272                 return l instanceof OsmDataLayer;
    273         }
     271    }
     272
     273    @Override public boolean layerIsSupported(Layer l) {
     274        return l instanceof OsmDataLayer;
     275    }
    274276}
  • trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java

    r1750 r1814  
    207207            // Currently we support moving and rotating, which do not affect relations.
    208208            // So don't add them in the first place to make handling easier
    209             Collection<OsmPrimitive> selection = Main.ds.getSelectedNodesAndWays();
     209            Collection<OsmPrimitive> selection = getCurrentDataSet().getSelectedNodesAndWays();
    210210            Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
    211211
     
    355355
    356356        if (ctrl && shift) {
    357             if (Main.ds.getSelected().isEmpty()) {
     357            if (getCurrentDataSet().getSelected().isEmpty()) {
    358358                selectPrims(osmColl, true, false, false, false);
    359359            }
     
    366366            // move.
    367367            selectPrims(osmColl,
    368                     shift || Main.ds.getSelected().containsAll(osmColl),
     368                    shift || getCurrentDataSet().getSelected().containsAll(osmColl),
    369369                    ctrl, false, false);
    370370            mode = Mode.move;
     
    403403
    404404            // Select Draw Tool if no selection has been made
    405             if(Main.ds.getSelected().size() == 0 && !cancelDrawMode) {
     405            if(getCurrentDataSet().getSelected().size() == 0 && !cancelDrawMode) {
    406406                Main.map.selectDrawTool(true);
    407407                return;
     
    419419
    420420                // If the user double-clicked a node, change to draw mode
    421                 List<OsmPrimitive> sel = new ArrayList<OsmPrimitive>(Main.ds.getSelected());
     421                List<OsmPrimitive> sel = new ArrayList<OsmPrimitive>(getCurrentDataSet().getSelected());
    422422                if(e.getClickCount() >=2 && sel.size() == 1 && sel.get(0) instanceof Node) {
    423423                    // We need to do it like this as otherwise drawAction will see a double
     
    431431                }
    432432            } else {
    433                 Collection<OsmPrimitive> selection = Main.ds.getSelected();
     433                Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    434434                Collection<OsmPrimitive> s = new TreeSet<OsmPrimitive>();
    435435                int max = Main.pref.getInteger("warn.move.maxelements", 20);
     
    469469                        if (selNodes.size() > 0) {
    470470                            selNodes.add(n);
    471                             MergeNodesAction.mergeNodes(selNodes, n);
     471                            new MergeNodesAction().mergeNodes(selNodes, n);
    472472                        }
    473473                    }
     
    496496            curSel = new LinkedList<OsmPrimitive>(); // new selection will replace the old.
    497497        } else {
    498             curSel = Main.ds.getSelected();
     498            curSel = getCurrentDataSet().getSelected();
    499499        }
    500500
     
    512512            }
    513513        }
    514         Main.ds.setSelected(curSel);
     514        getCurrentDataSet().setSelected(curSel);
    515515        Main.map.mapView.repaint();
    516516    }
  • trunk/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java

    r1722 r1814  
    77import java.awt.event.KeyEvent;
    88
    9 import org.openstreetmap.josm.data.coor.EastNorth;
    109import org.openstreetmap.josm.gui.MapFrame;
    1110import org.openstreetmap.josm.gui.MapView;
     
    4746    public ZoomAction(MapFrame mapFrame) {
    4847        super(tr("Zoom"), "zoom", tr("Zoom and move map"),
    49         Shortcut.registerShortcut("mapmode:zoom", tr("Mode: {0}", tr("Zoom")), KeyEvent.VK_Z, Shortcut.GROUP_EDIT),
    50         mapFrame, ImageProvider.getCursor("normal", "zoom"));
     48                Shortcut.registerShortcut("mapmode:zoom", tr("Mode: {0}", tr("Zoom")), KeyEvent.VK_Z, Shortcut.GROUP_EDIT),
     49                mapFrame, ImageProvider.getCursor("normal", "zoom"));
    5150        mv = mapFrame.mapView;
    5251        selectionManager = new SelectionManager(this, true, mv);
     
    5756     */
    5857    public void selectionEnded(Rectangle r, boolean alt, boolean shift, boolean ctrl) {
    59         if (r.width >= 3 && r.height >= 3)
     58        if (r.width >= 3 && r.height >= 3) {
    6059            mv.zoomToFactor(mv.getEastNorth(r.x+r.width/2, r.y+r.height/2), r.getWidth()/mv.getWidth());
     60        }
    6161    }
    6262
  • trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java

    r1808 r1814  
    164164        }
    165165        try {
    166             Collection<OsmPrimitive> sel = Main.ds.getSelected();
     166            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    167167            SearchCompiler.Match matcher = SearchCompiler.compile(search, caseSensitive, regexSearch);
    168168            int foundMatches = 0;
    169             for (OsmPrimitive osm : Main.ds.allNonDeletedCompletePrimitives()) {
     169            for (OsmPrimitive osm : Main.main.getCurrentDataSet().allNonDeletedCompletePrimitives()) {
    170170                if (mode == SearchMode.replace) {
    171171                    if (matcher.match(osm)) {
     
    183183                }
    184184            }
    185             Main.ds.setSelected(sel);
     185            Main.main.getCurrentDataSet().setSelected(sel);
    186186            if (foundMatches == 0) {
    187187                String msg = null;
     
    241241     */
    242242    protected void refreshEnabled() {
    243         setEnabled(Main.map != null
    244                 && Main.map.mapView !=null
    245                 && Main.map.mapView.getEditLayer() != null
    246         );
     243        setEnabled(getEditLayer() != null);
    247244    }
    248245
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r1786 r1814  
    133133                String value = null;
    134134
    135                 if (key.equals("timestamp"))
     135                if (key.equals("timestamp")) {
    136136                    value = DateUtils.fromDate(osm.getTimestamp());
    137                 else
     137                } else {
    138138                    value = osm.get(key);
     139                }
    139140
    140141                if (value == null)
     
    169170
    170171        public ExactKeyValue(boolean regexp, String key, String value) throws ParseError {
    171             if (key == "") {
     172            if (key == "")
    172173                throw new ParseError(tr("Key cannot be empty when tag operator is used. Sample use: key=value"));
    173             }
    174174            this.key = key;
    175175            this.value = value;
     
    223223        public boolean match(OsmPrimitive osm) throws ParseError {
    224224
    225             if (osm.keys == null || osm.keys.isEmpty()) {
     225            if (osm.keys == null || osm.keys.isEmpty())
    226226                return mode == Mode.NONE;
    227             }
    228227
    229228            switch (mode) {
     
    238237            case ANY_KEY:
    239238                for (String v:osm.keys.values()) {
    240                     if (v.equals(value)) {
     239                    if (v.equals(value))
    241240                        return true;
    242                     }
    243241                }
    244242                return false;
     
    247245            case ANY_KEY_REGEXP:
    248246                for (String v:osm.keys.values()) {
    249                     if (valuePattern.matcher(v).matches()) {
     247                    if (valuePattern.matcher(v).matches())
    250248                        return true;
    251                     }
    252249                }
    253250                return false;
     
    257254                    if (keyPattern.matcher(entry.getKey()).matches()) {
    258255                        if (mode == Mode.ANY_VALUE_REGEXP
    259                                 || valuePattern.matcher(entry.getValue()).matches()) {
     256                                || valuePattern.matcher(entry.getValue()).matches())
    260257                            return true;
    261                         }
    262258                    }
    263259                }
     
    265261            case MISSING_KEY_REGEXP:
    266262                for (String k:osm.keys.keySet()) {
    267                     if (keyPattern.matcher(k).matches()) {
     263                    if (keyPattern.matcher(k).matches())
    268264                        return false;
    269                     }
    270265                }
    271266                return true;
     
    337332                // is not Java 1.5
    338333                //String name = java.text.Normalizer.normalize(name, java.text.Normalizer.Form.NFC);
    339                 if (!caseSensitive)
     334                if (!caseSensitive) {
    340335                    name = name.toLowerCase();
     336                }
    341337                if (name.indexOf(search) != -1)
    342338                    return true;
     
    356352            } else if ("relation".equals(type)) {
    357353                this.type = Relation.class;
    358             } else {
     354            } else
    359355                throw new ParseError(tr("Unknown primitive type: {0}. Allowed values are node, way or relation",
    360356                        type));
    361             }
    362357        }
    363358        @Override public boolean match(OsmPrimitive osm) {
     
    441436            // "parent" (null) should mean the same as "parent()"
    442437            // (Always). I.e. match everything
    443             if (child == null)
     438            if (child == null) {
    444439                child = new Always();
     440            }
    445441
    446442            if (osm instanceof Way) {
    447                 for (Node n : ((Way)osm).nodes)
     443                for (Node n : ((Way)osm).nodes) {
    448444                    isParent |= child.match(n);
     445                }
    449446            } else if (osm instanceof Relation) {
    450447                for (RelationMember member : ((Relation)osm).members) {
    451                     if (member.member != null)
     448                    if (member.member != null) {
    452449                        isParent |= child.match(member.member);
     450                    }
    453451                }
    454452            }
     
    464462            // "child" (null) should mean the same as "child()"
    465463            // (Always). I.e. match everything
    466             if (parent == null)
     464            if (parent == null) {
    467465                parent = new Always();
     466            }
    468467
    469468            boolean isChild = false;
    470             CollectBackReferencesVisitor backRefs = new CollectBackReferencesVisitor(Main.ds);
     469            CollectBackReferencesVisitor backRefs = new CollectBackReferencesVisitor(Main.main.getCurrentDataSet());
    471470            osm.visit(backRefs);
    472471            for (OsmPrimitive p : backRefs.data) {
     
    485484
    486485    public static Match compile(String searchStr, boolean caseSensitive, boolean regexSearch)
    487             throws ParseError {
     486    throws ParseError {
    488487        return new SearchCompiler(caseSensitive, regexSearch,
    489488                new PushbackTokenizer(
    490                     new PushbackReader(new StringReader(searchStr))))
    491             .parse();
     489                        new PushbackReader(new StringReader(searchStr))))
     490        .parse();
    492491    }
    493492
    494493    public Match parse() throws ParseError {
    495494        Match m = parseJuxta();
    496         if (!tokenizer.readIfEqual(null)) {
     495        if (!tokenizer.readIfEqual(null))
    497496            throw new ParseError(tr("Unexpected token: {0}", tokenizer.nextToken()));
    498         }
    499497        return m;
    500498    }
     
    515513        if (tokenizer.readIfEqual("|")) {
    516514            Match b = parseNot();
    517             if (a == null || b == null) {
     515            if (a == null || b == null)
    518516                throw new ParseError(tr("Missing arguments for or."));
    519             }
    520517            return new Or(a, b);
    521518        }
     
    526523        if (tokenizer.readIfEqual("-")) {
    527524            Match m = parseParens();
    528             if (m == null) {
     525            if (m == null)
    529526                throw new ParseError(tr("Missing argument for not."));
    530             }
    531527            return new Not(m);
    532528        }
     
    537533        if (tokenizer.readIfEqual("(")) {
    538534            Match m = parseJuxta();
    539             if (!tokenizer.readIfEqual(")")) {
     535            if (!tokenizer.readIfEqual(")"))
    540536                throw new ParseError(tr("Expected closing parenthesis."));
    541             }
    542537            return m;
    543538        }
     
    550545        if (tokenizer.readIfEqual(":")) {
    551546            String tok2 = tokenizer.readText();
    552             if (tok == null) tok = "";
    553             if (tok2 == null) tok2 = "";
     547            if (tok == null) {
     548                tok = "";
     549            }
     550            if (tok2 == null) {
     551                tok2 = "";
     552            }
    554553            return parseKV(tok, tok2);
    555554        }
     
    557556        if (tokenizer.readIfEqual("=")) {
    558557            String tok2 = tokenizer.readText();
    559             if (tok == null) tok = "";
    560             if (tok2 == null) tok2 = "";
     558            if (tok == null) {
     559                tok = "";
     560            }
     561            if (tok2 == null) {
     562                tok2 = "";
     563            }
    561564            return new ExactKeyValue(regexSearch, tok, tok2);
    562565        }
    563566
    564         if (tok == null) {
     567        if (tok == null)
    565568            return null;
    566         } else if (tok.equals("modified")) {
     569        else if (tok.equals("modified"))
    567570            return new Modified();
    568         } else if (tok.equals("incomplete")) {
     571        else if (tok.equals("incomplete"))
    569572            return new Incomplete();
    570         } else if (tok.equals("untagged")) {
     573        else if (tok.equals("untagged"))
    571574            return new Untagged();
    572         } else if (tok.equals("selected")) {
     575        else if (tok.equals("selected"))
    573576            return new Selected();
    574         } else if (tok.equals("child")) {
     577        else if (tok.equals("child"))
    575578            return new Child(parseParens());
    576         } else if (tok.equals("parent")) {
     579        else if (tok.equals("parent"))
    577580            return new Parent(parseParens());
    578         } else {
     581        else
    579582            return new Any(tok);
    580         }
    581583    }
    582584
    583585    private Match parseKV(String key, String value) throws ParseError {
    584         if (key.equals("type")) {
     586        if (key.equals("type"))
    585587            return new ExactType(value);
    586         } else if (key.equals("user")) {
     588        else if (key.equals("user"))
    587589            return new UserMatch(value);
    588         } else if (key.equals("nodes")) {
     590        else if (key.equals("nodes")) {
    589591            try {
    590592                String[] range = value.split("-");
    591                 if (range.length == 1) {
     593                if (range.length == 1)
    592594                    return new NodeCount(Integer.parseInt(value));
    593                 } else if (range.length == 2) {
     595                else if (range.length == 2)
    594596                    return new NodeCountRange(Integer.parseInt(range[0]), Integer.parseInt(range[1]));
    595                 } else {
     597                else
    596598                    throw new ParseError(tr("Wrong number of parameters for nodes operator."));
    597                 }
    598599            } catch (NumberFormatException e) {
    599600                throw new ParseError(tr("Incorrect value of nodes operator: {0}. Nodes operator expects number of nodes or range, for example nodes:10-20", value));
     
    606607                throw new ParseError(tr("Incorrect value of id operator: {0}. Number is expected.", value));
    607608            }
    608         } else {
     609        } else
    609610            return new KeyValue(key, value);
    610         }
    611611    }
    612612
     
    627627        // insensitively, but the OSM data is in Unicode. With
    628628        // UNICODE_CASE casefolding is made Unicode-aware.
    629         if (!caseSensitive)
     629        if (!caseSensitive) {
    630630            searchFlags |= (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
     631        }
    631632
    632633        return searchFlags;
  • trunk/src/org/openstreetmap/josm/actions/search/SelectionWebsiteLoader.java

    r1811 r1814  
    4040    @Override protected void realRun() {
    4141        progressMonitor.setTicksCount(2);
    42         sel = mode != SearchAction.SearchMode.remove ? new LinkedList<OsmPrimitive>() : Main.ds.allNonDeletedPrimitives();
     42        sel = mode != SearchAction.SearchMode.remove ? new LinkedList<OsmPrimitive>() : Main.main.getCurrentDataSet().allNonDeletedPrimitives();
    4343        try {
    4444            URLConnection con = url.openConnection();
     
    4747            progressMonitor.subTask(tr("Downloading..."));
    4848            Map<Long, String> ids = idReader.parseIds(in);
    49             for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives()) {
     49            for (OsmPrimitive osm : Main.main.getCurrentDataSet().allNonDeletedPrimitives()) {
    5050                if (ids.containsKey(osm.id) && osm.getClass().getName().toLowerCase().endsWith(ids.get(osm.id))) {
    5151                    if (mode == SearchAction.SearchMode.remove) {
     
    8686    @Override protected void finish() {
    8787        if (sel != null) {
    88             Main.ds.setSelected(sel);
     88            Main.main.getCurrentDataSet().setSelected(sel);
    8989        }
    9090    }
  • trunk/src/org/openstreetmap/josm/command/AddCommand.java

    r1750 r1814  
    1111
    1212import org.openstreetmap.josm.data.osm.OsmPrimitive;
    13 import org.openstreetmap.josm.data.osm.visitor.AddVisitor;
    14 import org.openstreetmap.josm.data.osm.visitor.DeleteVisitor;
    15 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     13import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     14import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     15import org.openstreetmap.josm.tools.ImageProvider;
    1616
    1717/**
     
    3939
    4040    @Override public boolean executeCommand() {
    41         osm.visit(new AddVisitor(getLayer().data));
     41        getLayer().data.addPrimitive(osm);
    4242        return true;
    4343    }
    4444
    4545    @Override public void undoCommand() {
    46         osm.visit(new DeleteVisitor(getLayer().data));
     46        getLayer().data.removePrimitive(osm);
    4747    }
    4848
     
    5252
    5353    @Override public MutableTreeNode description() {
    54         NameVisitor v = new NameVisitor();
    55         osm.visit(v);
    5654        return new DefaultMutableTreeNode(
    57                 new JLabel(tr("Add {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL));
     55                new JLabel(
     56                        tr("Add {0} {1}",
     57                                OsmPrimitiveType.from(osm).getLocalizedDisplayNameSingular(),
     58                                new PrimitiveNameFormatter().getName(osm)
     59                        ),
     60                        ImageProvider.get(OsmPrimitiveType.from(osm)),
     61                        JLabel.HORIZONTAL
     62                )
     63        );
    5864    }
    5965}
  • trunk/src/org/openstreetmap/josm/command/ChangeCommand.java

    r1750 r1814  
    1111
    1212import org.openstreetmap.josm.data.osm.OsmPrimitive;
    13 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     13import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     14import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     15import org.openstreetmap.josm.tools.ImageProvider;
    1416
    1517/**
     
    4244
    4345    @Override public MutableTreeNode description() {
    44         NameVisitor v = new NameVisitor();
    45         osm.visit(v);
    46         return new DefaultMutableTreeNode(new JLabel(tr("Change {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL));
     46        return new DefaultMutableTreeNode(
     47                new JLabel(tr("Change {0} {1}",
     48                        OsmPrimitiveType.from(osm).getLocalizedDisplayNameSingular(),
     49                        new PrimitiveNameFormatter().getName(osm)),
     50                        ImageProvider.get(OsmPrimitiveType.from(osm)),
     51                        JLabel.HORIZONTAL));
    4752    }
    4853}
  • trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java

    r1750 r1814  
    1414
    1515import org.openstreetmap.josm.data.osm.OsmPrimitive;
    16 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     16import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     17import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    1718import org.openstreetmap.josm.tools.ImageProvider;
    1819
     
    9394    @Override public MutableTreeNode description() {
    9495        String text;
     96        PrimitiveNameFormatter formatter = new PrimitiveNameFormatter();
    9597        if (objects.size() == 1) {
    96             NameVisitor v = new NameVisitor();
    97             objects.iterator().next().visit(v);
     98            OsmPrimitive primitive = objects.iterator().next();
     99            String name = formatter.getName(primitive);
    98100            text = value == null
    99             ? tr("Remove \"{0}\" for {1} ''{2}''", key, tr(v.className), v.name)
    100                     : tr("Set {0}={1} for {2} ''{3}''",key,value, tr(v.className), v.name);
     101            ? tr("Remove \"{0}\" for {1} ''{2}''", key,
     102                    OsmPrimitiveType.from(primitive).getLocalizedDisplayNameSingular(),
     103                    name)
     104                    : tr("Set {0}={1} for {2} ''{3}''",
     105                            key,
     106                            value,
     107                            OsmPrimitiveType.from(primitive).getLocalizedDisplayNameSingular(),
     108                            name
     109                    );
    101110        }
    102111        else
     
    109118        if (objects.size() == 1)
    110119            return root;
    111         NameVisitor v = new NameVisitor();
    112120        for (OsmPrimitive osm : objects) {
    113             osm.visit(v);
    114             root.add(new DefaultMutableTreeNode(v.toLabel()));
     121            root.add(new DefaultMutableTreeNode(
     122                    new JLabel(
     123                            formatter.getName(osm),
     124                            ImageProvider.get(OsmPrimitiveType.from(osm)),
     125                            JLabel.HORIZONTAL)
     126            )
     127            );
    115128        }
    116129        return root;
  • trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java

    r1766 r1814  
    1212import org.openstreetmap.josm.Main;
    1313import org.openstreetmap.josm.data.osm.OsmPrimitive;
     14import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1415import org.openstreetmap.josm.data.osm.Relation;
    15 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     16import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     17import org.openstreetmap.josm.tools.ImageProvider;
    1618
    1719/**
     
    6466
    6567    @Override public MutableTreeNode description() {
    66         NameVisitor v = new NameVisitor();
    67         relation.visit(v);
    68         return new DefaultMutableTreeNode(new JLabel(tr("Change relation member role for {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL));
     68        return new DefaultMutableTreeNode(
     69                new JLabel(
     70                        tr("Change relation member role for {0} {1}",
     71                                OsmPrimitiveType.from(relation),
     72                                new PrimitiveNameFormatter().getName(relation)
     73                        ),
     74                        ImageProvider.get(OsmPrimitiveType.from(relation)),
     75                        JLabel.HORIZONTAL)
     76        );
    6977    }
    7078}
  • trunk/src/org/openstreetmap/josm/command/Command.java

    r1750 r1814  
    5151
    5252    public Command() {
    53         this.layer = Main.main.map.mapView.getEditLayer();
     53        this.layer = Main.map.mapView.getEditLayer();
    5454    }
    5555    /**
  • trunk/src/org/openstreetmap/josm/command/DeleteCommand.java

    r1750 r1814  
    2525import org.openstreetmap.josm.data.osm.Node;
    2626import org.openstreetmap.josm.data.osm.OsmPrimitive;
     27import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    2728import org.openstreetmap.josm.data.osm.Relation;
    2829import org.openstreetmap.josm.data.osm.RelationMember;
     
    3031import org.openstreetmap.josm.data.osm.WaySegment;
    3132import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;
    32 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    3333import org.openstreetmap.josm.gui.ExtendedDialog;
     34import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    3435import org.openstreetmap.josm.tools.DontShowAgainInfo;
    3536import org.openstreetmap.josm.tools.ImageProvider;
     
    7677
    7778    @Override public MutableTreeNode description() {
    78         NameVisitor v = new NameVisitor();
    79 
    8079        if (toDelete.size() == 1) {
    81             toDelete.iterator().next().visit(v);
    82             return new DefaultMutableTreeNode(new JLabel(tr("Delete {1} {0}", v.name, tr(v.className)), v.icon,
    83                     JLabel.HORIZONTAL));
     80            OsmPrimitive primitive = toDelete.iterator().next();
     81            return new DefaultMutableTreeNode(
     82                    new JLabel(
     83                            tr("Delete {1} {0}",
     84                                    new PrimitiveNameFormatter().getName(primitive),
     85                                    OsmPrimitiveType.from(primitive).getLocalizedDisplayNameSingular()
     86                            ),
     87                            ImageProvider.get(OsmPrimitiveType.from(primitive)),
     88                            JLabel.HORIZONTAL));
    8489        }
    8590
     
    8792        String cnamem = null;
    8893        for (OsmPrimitive osm : toDelete) {
    89             osm.visit(v);
    9094            if (cname == null) {
    91                 cname = v.className;
    92                 cnamem = v.classNamePlural;
    93             } else if (!cname.equals(v.className)) {
     95                cname = OsmPrimitiveType.from(osm).getLocalizedDisplayNameSingular();
     96                cnamem = OsmPrimitiveType.from(osm).getLocalizedDisplayNameSingular();
     97            } else if (!cname.equals(OsmPrimitiveType.from(osm).getLocalizedDisplayNameSingular())) {
    9498                cname = "object";
    9599                cnamem = trn("object", "objects", 2);
     
    99103                cname, cnamem, toDelete.size())), ImageProvider.get("data", cname), JLabel.HORIZONTAL));
    100104        for (OsmPrimitive osm : toDelete) {
    101             osm.visit(v);
    102             root.add(new DefaultMutableTreeNode(v.toLabel()));
     105            root.add(new DefaultMutableTreeNode(
     106                    new JLabel(
     107                            new PrimitiveNameFormatter().getName(osm),
     108                            ImageProvider.get(OsmPrimitiveType.from(osm)),
     109                            JLabel.HORIZONTAL)
     110            )
     111            );
    103112        }
    104113        return root;
     
    119128     */
    120129    public static Command deleteWithReferences(Collection<? extends OsmPrimitive> selection) {
    121         CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.ds);
     130        CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.main.getCurrentDataSet());
    122131        for (OsmPrimitive osm : selection) {
    123132            osm.visit(v);
     
    132141
    133142    private static int testRelation(Relation ref, OsmPrimitive osm) {
    134         NameVisitor n = new NameVisitor();
    135         ref.visit(n);
    136         NameVisitor s = new NameVisitor();
    137         osm.visit(s);
     143        PrimitiveNameFormatter formatter = new PrimitiveNameFormatter();
    138144        String role = new String();
    139145        for (RelationMember m : ref.members) {
     
    144150        }
    145151        if (role.length() > 0)
    146             return new ExtendedDialog(Main.parent,
     152            return new ExtendedDialog(
     153                    Main.parent,
    147154                    tr("Conflicting relation"),
    148155                    tr("Selection \"{0}\" is used by relation \"{1}\" with role {2}.\nDelete from relation?",
    149                             s.name, n.name, role),
     156                            formatter.getName(osm), formatter.getName(ref), role),
    150157                            new String[] {tr("Delete from relation"), tr("Cancel")},
    151158                            new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
     
    154161                    tr("Conflicting relation"),
    155162                    tr("Selection \"{0}\" is used by relation \"{1}\".\nDelete from relation?",
    156                             s.name, n.name),
     163                            formatter.getName(osm), formatter.getName(ref)),
    157164                            new String[] {tr("Delete from relation"), tr("Cancel")},
    158165                            new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
     
    191198                    for (Node n : ((Way) osm).nodes) {
    192199                        if (!n.isTagged()) {
    193                             CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.ds, false);
     200                            CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.main.getCurrentDataSet(), false);
    194201                            n.visit(v);
    195202                            v.data.removeAll(del);
     
    208215
    209216        for (OsmPrimitive osm : del) {
    210             CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.ds, false);
     217            CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.main.getCurrentDataSet(), false);
    211218            osm.visit(v);
    212219            for (OsmPrimitive ref : v.data) {
     
    238245                del.add(w);
    239246
    240                 CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.ds, false);
     247                CollectBackReferencesVisitor v = new CollectBackReferencesVisitor(Main.main.getCurrentDataSet(), false);
    241248                w.visit(v);
    242249                for (OsmPrimitive ref : v.data) {
     
    366373     */
    367374    private static boolean checkAndConfirmOutlyingDeletes(Collection<OsmPrimitive> del) {
    368         Area a = Main.ds.getDataSourceArea();
     375        Area a = Main.main.getCurrentDataSet().getDataSourceArea();
    369376        if (a != null) {
    370377            for (OsmPrimitive osm : del) {
  • trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java

    r1750 r1814  
    179179    protected void purge(OsmPrimitive toPurge, DataSet ds, ArrayList<OsmPrimitive> hive) {
    180180        ArrayList<OsmPrimitive> parents = new ArrayList<OsmPrimitive>();
    181         parents.addAll(Main.ds.ways);
    182         parents.addAll(Main.ds.relations);
     181        parents.addAll(getLayer().data.ways);
     182        parents.addAll(getLayer().data.relations);
    183183        List<OsmParentChildPair> pairs = getParentChildPairs(parents, primitive);
    184184        hive.remove(toPurge);
     
    217217        while(! hive.isEmpty()) {
    218218            OsmPrimitive toPurge = hive.get(0);
    219             purge(toPurge, Main.ds, hive);
     219            purge(toPurge, getLayer().data, hive);
    220220            if (toPurge instanceof Node) {
    221221                getLayer().data.nodes.remove(toPurge);
  • trunk/src/org/openstreetmap/josm/command/RemoveRelationMemberCommand.java

    r1774 r1814  
    1212import org.openstreetmap.josm.Main;
    1313import org.openstreetmap.josm.data.osm.OsmPrimitive;
    14 import org.openstreetmap.josm.data.osm.*;
    15 
    16 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     14import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     15import org.openstreetmap.josm.data.osm.Relation;
     16import org.openstreetmap.josm.data.osm.RelationMember;
     17import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     18import org.openstreetmap.josm.tools.ImageProvider;
    1719
    1820/**
     
    6264
    6365    @Override public MutableTreeNode description() {
    64         NameVisitor v = new NameVisitor();
    65         relation.visit(v);
    66         return new DefaultMutableTreeNode(new JLabel(tr("Remove relation member {0} {1}", tr(v.className), v.name), v.icon, JLabel.HORIZONTAL));
     66        return new DefaultMutableTreeNode(
     67                new JLabel(
     68                        tr("Remove relation member {0} {1}",
     69                                OsmPrimitiveType.from(relation).getLocalizedDisplayNameSingular(),
     70                                new PrimitiveNameFormatter().getName(relation)
     71                        ),
     72                        ImageProvider.get(OsmPrimitiveType.from(relation)),
     73                        JLabel.HORIZONTAL
     74                )
     75        );
    6776    }
    6877}
  • trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java

    r1762 r1814  
    115115        roleCorrectionMap.put(way, new ArrayList<RoleCorrection>());
    116116
    117         for (Relation relation : Main.ds.relations) {
     117        for (Relation relation : Main.main.getCurrentDataSet().relations) {
    118118            int position = 0;
    119119            for (RelationMember member : relation.members) {
  • trunk/src/org/openstreetmap/josm/corrector/RoleCorrectionTableModel.java

    r1001 r1814  
    66import java.util.List;
    77
    8 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     8import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    99
    1010public class RoleCorrectionTableModel extends
    11         CorrectionTableModel<RoleCorrection> {
    12 
    13     private static NameVisitor nameVisitor = new NameVisitor();
     11CorrectionTableModel<RoleCorrection> {
     12    private static final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
    1413
    1514    public RoleCorrectionTableModel(List<RoleCorrection> roleCorrections) {
     
    4140        switch (colIndex) {
    4241        case 0:
    43             roleCorrection.relation.visit(nameVisitor);
    44             return nameVisitor.name;
     42            return NAME_FORMATTER.getName(roleCorrection.relation);
    4543        case 1:
    4644            return roleCorrection.member.role;
  • trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java

    r1617 r1814  
    2525import org.openstreetmap.josm.data.osm.Node;
    2626import org.openstreetmap.josm.data.osm.OsmPrimitive;
     27import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    2728import org.openstreetmap.josm.data.osm.Relation;
    28 import org.openstreetmap.josm.data.osm.RelationMember;
    2929import org.openstreetmap.josm.data.osm.Way;
    30 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    3130import org.openstreetmap.josm.gui.JMultilineLabel;
     31import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    3232import org.openstreetmap.josm.tools.GBC;
     33import org.openstreetmap.josm.tools.ImageProvider;
    3334
    3435public abstract class TagCorrector<P extends OsmPrimitive> {
     36    private static final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
    3537
    3638    public abstract Collection<Command> execute(P primitive, P oldprimitive)
    37         throws UserCancelException;
     39    throws UserCancelException;
    3840
    3941    private String[] applicationOptions = new String[] {
    40         tr("Apply selected changes"),
    41         tr("Don't apply changes"),
    42         tr("Cancel")
     42            tr("Apply selected changes"),
     43            tr("Don't apply changes"),
     44            tr("Cancel")
    4345    };
    4446
     
    5658        }
    5759
    58         if (!hasCorrections)
     60        if (!hasCorrections) {
    5961            for (List<RoleCorrection> roleCorrectionList : roleCorrectionMap
    6062                    .values()) {
     
    6466                }
    6567            }
     68        }
    6669
    6770        if (hasCorrections) {
     
    7275                new HashMap<OsmPrimitive, RoleCorrectionTable>();
    7376
    74             NameVisitor nameVisitor = new NameVisitor();
     77            //NameVisitor nameVisitor = new NameVisitor();
    7578
    7679            final JPanel p = new JPanel(new GridBagLayout());
     
    8790            for (OsmPrimitive primitive : tagCorrectionsMap.keySet()) {
    8891                final List<TagCorrection> tagCorrections = tagCorrectionsMap
    89                         .get(primitive);
    90 
    91                 if (tagCorrections.isEmpty())
     92                .get(primitive);
     93
     94                if (tagCorrections.isEmpty()) {
    9295                    continue;
    93 
    94                 primitive.visit(nameVisitor);
     96                }
    9597
    9698                final JLabel propertiesLabel = new JLabel(tr("Properties of "));
     
    98100
    99101                final JLabel primitiveLabel = new JLabel(
    100                         nameVisitor.name + ":", nameVisitor.icon, JLabel.LEFT);
     102                        NAME_FORMATTER.getName(primitive) + ":",
     103                        ImageProvider.get(OsmPrimitiveType.from(primitive)),
     104                        JLabel.LEFT
     105                );
    101106                p.add(primitiveLabel, GBC.eol());
    102107
     
    111116            for (OsmPrimitive primitive : roleCorrectionMap.keySet()) {
    112117                final List<RoleCorrection> roleCorrections = roleCorrectionMap
    113                         .get(primitive);
    114                 if (roleCorrections.isEmpty())
     118                .get(primitive);
     119                if (roleCorrections.isEmpty()) {
    115120                    continue;
    116 
    117                 primitive.visit(nameVisitor);
     121                }
    118122
    119123                final JLabel rolesLabel = new JLabel(
     
    122126
    123127                final JLabel primitiveLabel = new JLabel(
    124                         nameVisitor.name + ":", nameVisitor.icon, JLabel.LEFT);
     128                        NAME_FORMATTER.getName(primitive),
     129                        ImageProvider.get(OsmPrimitiveType.from(primitive)),
     130                        JLabel.LEFT
     131                );
    125132                p.add(primitiveLabel, GBC.eol());
    126133
     
    145152                    // create the clone
    146153                    OsmPrimitive clone = null;
    147                     if (primitive instanceof Way) clone = new Way((Way)primitive);
    148                     else if (primitive instanceof Node) clone = new Node((Node)primitive);
    149                     else if (primitive instanceof Relation) clone = new Relation((Relation)primitive);
     154                    if (primitive instanceof Way) {
     155                        clone = new Way((Way)primitive);
     156                    } else if (primitive instanceof Node) {
     157                        clone = new Node((Node)primitive);
     158                    } else if (primitive instanceof Relation) {
     159                        clone = new Relation((Relation)primitive);
     160                    }
    150161
    151162                    // use this structure to remember keys that have been set already so that
     
    157168                        if (tagTableMap.get(primitive).getCorrectionTableModel().getApply(i)) {
    158169                            TagCorrection tagCorrection = tagCorrections.get(i);
    159                             if (tagCorrection.isKeyChanged() && !keysChanged.contains(tagCorrection.oldKey)) clone.remove(tagCorrection.oldKey);
     170                            if (tagCorrection.isKeyChanged() && !keysChanged.contains(tagCorrection.oldKey)) {
     171                                clone.remove(tagCorrection.oldKey);
     172                            }
    160173                            clone.put(tagCorrection.newKey, tagCorrection.newValue);
    161174                            keysChanged.add(tagCorrection.newKey);
     
    164177
    165178                    // save the clone
    166                     if (!keysChanged.isEmpty()) commands.add(new ChangeCommand(primitive, clone));
     179                    if (!keysChanged.isEmpty()) {
     180                        commands.add(new ChangeCommand(primitive, clone));
     181                    }
    167182                }
    168183                for (OsmPrimitive primitive : roleCorrectionMap.keySet()) {
    169184                    List<RoleCorrection> roleCorrections = roleCorrectionMap
    170                             .get(primitive);
     185                    .get(primitive);
    171186
    172187                    for (int i = 0; i < roleCorrections.size(); i++) {
     
    177192                    }
    178193                }
    179             } else if (answer != JOptionPane.NO_OPTION) {
     194            } else if (answer != JOptionPane.NO_OPTION)
    180195                throw new UserCancelException();
    181             }
    182196            return commands;
    183197        }
  • trunk/src/org/openstreetmap/josm/data/DataSetChecker.java

    r1169 r1814  
    3333        if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
    3434            OsmDataLayer l = (OsmDataLayer)Main.map.mapView.getActiveLayer();
    35             if (l.data != Main.ds) {
     35            if (l.data != Main.main.getCurrentDataSet()) {
    3636                JOptionPane.showMessageDialog(Main.parent, "Main.ds / active layer mismatch");
    3737                return;
  • trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java

    r1169 r1814  
    6262        }
    6363        fireCommandsChanged();
    64         Main.ds.setSelected();
     64        Main.main.getCurrentDataSet().setSelected();
    6565    }
    6666
     
    8484
    8585    public void fireCommandsChanged() {
    86         for (final CommandQueueListener l : listenerCommands)
     86        for (final CommandQueueListener l : listenerCommands) {
    8787            l.commandChanged(commands.size(), redoCommands.size());
     88        }
    8889    }
    8990
     
    108109            }
    109110        }
    110         if (changed)
     111        if (changed) {
    111112            fireCommandsChanged();
     113        }
    112114    }
    113115
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r1756 r1814  
    105105    }
    106106
    107     public void addPrimitive(OsmPrimitive osm) {
    108         if (osm instanceof Node) {
    109             nodes.add((Node) osm);
    110         } else if (osm instanceof Way) {
    111             ways.add((Way) osm);
    112         } else if (osm instanceof Relation) {
    113             relations.add((Relation) osm);
     107    /**
     108     * Adds a primitive to the dataset
     109     *
     110     * @param primitive the primitive. Ignored if null.
     111     */
     112    public void addPrimitive(OsmPrimitive primitive) {
     113        if (primitive == null)
     114            return;
     115        if (primitive instanceof Node) {
     116            nodes.add((Node) primitive);
     117        } else if (primitive instanceof Way) {
     118            ways.add((Way) primitive);
     119        } else if (primitive instanceof Relation) {
     120            relations.add((Relation) primitive);
     121        }
     122    }
     123
     124    /**
     125     * Removes a primitive from the dataset. This method only removes the
     126     * primitive form the respective collection of primitives managed
     127     * by this dataset, i.e. from {@see #nodes}, {@see #ways}, or
     128     * {@see #relations}. References from other primitives to this
     129     * primitive are left unchanged.
     130     *
     131     * @param primitive the primitive. Ignored if null.
     132     */
     133    public void removePrimitive(OsmPrimitive primitive) {
     134        if (primitive == null)
     135            return;
     136        if (primitive instanceof Node) {
     137            nodes.remove(primitive);
     138        } else if (primitive instanceof Way) {
     139            ways.remove(primitive);
     140        } else if (primitive instanceof Relation) {
     141            relations.remove(primitive);
    114142        }
    115143    }
     
    120148        return sel;
    121149    }
     150
     151
    122152    /**
    123153     * Return a list of all selected objects. Even keys are returned.
     
    391421        }
    392422    }
     423
     424
    393425}
  • trunk/src/org/openstreetmap/josm/data/osm/Node.java

    r1762 r1814  
    140140        return name;
    141141    }
    142 
    143142}
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java

    r1670 r1814  
    22package org.openstreetmap.josm.data.osm;
    33import static org.openstreetmap.josm.tools.I18n.tr;
     4
     5import javax.swing.ImageIcon;
    46
    57public enum OsmPrimitiveType {
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r1722 r1814  
    2121import java.awt.event.MouseAdapter;
    2222import java.awt.event.MouseEvent;
     23import java.awt.event.MouseListener;
    2324import java.awt.event.MouseMotionListener;
    24 import java.awt.event.MouseListener;
    2525import java.lang.reflect.InvocationTargetException;
    2626import java.util.Collection;
     
    3939import org.openstreetmap.josm.data.coor.LatLon;
    4040import org.openstreetmap.josm.data.coor.LatLon.CoordinateFormat;
     41import org.openstreetmap.josm.data.osm.Node;
    4142import org.openstreetmap.josm.data.osm.OsmPrimitive;
    42 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    43 import org.openstreetmap.josm.data.osm.Node;
     43import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    4444import org.openstreetmap.josm.tools.GBC;
    4545import org.openstreetmap.josm.tools.ImageProvider;
     
    5959 */
    6060public class MapStatus extends JPanel implements Helpful {
     61    private static final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
    6162
    6263    /**
     
    145146                if (parent != Main.map)
    146147                    return; // exit, if new parent.
    147                 if ((ms.modifiers & MouseEvent.CTRL_DOWN_MASK) != 0 || ms.mousePos == null)
     148                if ((ms.modifiers & MouseEvent.CTRL_DOWN_MASK) != 0 || ms.mousePos == null) {
    148149                    continue; // freeze display when holding down ctrl
    149 
    150                 if (mv.center == null)
     150                }
     151
     152                if (mv.center == null) {
    151153                    continue;
     154                }
    152155
    153156                // This try/catch is a hack to stop the flooding bug reports about this.
     
    160163                    osmNearest = mv.getNearest(ms.mousePos);
    161164                    if (osmNearest != null) {
    162                         NameVisitor visitor = new NameVisitor();
    163                         osmNearest.visit(visitor);
    164                         nameText.setText(visitor.name);
    165                     } else
     165                        nameText.setText(NAME_FORMATTER.getName(osmNearest));
     166                    } else {
    166167                        nameText.setText(tr("(no object)"));
     168                    }
    167169
    168170                    // Popup Information
     
    170172                        Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos);
    171173
    172                         if (osms == null)
     174                        if (osms == null) {
    173175                            continue;
    174                         if (osms != null && osms.equals(osmStatus) && ms.modifiers == oldModifiers)
     176                        }
     177                        if (osms != null && osms.equals(osmStatus) && ms.modifiers == oldModifiers) {
    175178                            continue;
     179                        }
    176180
    177181                        if (popup != null) {
     
    190194                        JPanel c = new JPanel(new GridBagLayout());
    191195                        for (final OsmPrimitive osm : osms) {
    192                             NameVisitor visitor = new NameVisitor();
    193                             osm.visit(visitor);
    194196                            final StringBuilder text = new StringBuilder();
    195                             if (osm.id == 0 || osm.modified)
    196                                 visitor.name = "<i><b>"+visitor.name+"*</b></i>";
    197                             text.append(visitor.name);
    198                             if (osm.id != 0)
     197                            String name = NAME_FORMATTER.getName(osm);
     198                            if (osm.id == 0 || osm.modified) {
     199                                name = "<i><b>"+ new PrimitiveNameFormatter().getName(osm)+"*</b></i>";
     200                            }
     201                            text.append(name);
     202                            if (osm.id != 0) {
    199203                                text.append("<br>id="+osm.id);
    200                             for (Entry<String, String> e : osm.entrySet())
     204                            }
     205                            for (Entry<String, String> e : osm.entrySet()) {
    201206                                text.append("<br>"+e.getKey()+"="+e.getValue());
    202                             final JLabel l = new JLabel("<html>"+text.toString()+"</html>", visitor.icon, JLabel.HORIZONTAL);
     207                            }
     208                            final JLabel l = new JLabel(
     209                                    "<html>"+text.toString()+"</html>",
     210                                    ImageProvider.get(OsmPrimitiveType.from(osm)),
     211                                    JLabel.HORIZONTAL
     212                            );
    203213                            l.setFont(l.getFont().deriveFont(Font.PLAIN));
    204214                            l.setVerticalTextPosition(JLabel.TOP);
     
    212222                                }
    213223                                @Override public void mouseClicked(MouseEvent e) {
    214                                     Main.ds.setSelected(osm);
     224                                    Main.main.getCurrentDataSet().setSelected(osm);
    215225                                    mv.repaint();
    216226                                }
     
    306316                public void eventDispatched(AWTEvent event) {
    307317                    if (event instanceof ComponentEvent &&
    308                         ((ComponentEvent)event).getComponent() == mapFrame.mapView) {
     318                            ((ComponentEvent)event).getComponent() == mapFrame.mapView) {
    309319                        synchronized (collector) {
    310320                            mouseState.modifiers = ((InputEvent)event).getModifiersEx();
    311                             if (event instanceof MouseEvent)
     321                            if (event instanceof MouseEvent) {
    312322                                mouseState.mousePos = ((MouseEvent)event).getPoint();
     323                            }
    313324                            collector.notify();
    314325                        }
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r1808 r1814  
    148148        if (layer instanceof OsmDataLayer) {
    149149            OsmDataLayer editLayer = (OsmDataLayer)layer;
    150             Main.ds = editLayer.data;
    151150            editLayer.listenerModified.add(new ModifiedChangedListener(){
    152151                public void modifiedChanged(boolean value, OsmDataLayer source) {
     
    181180
    182181    @Override
    183     protected DataSet getData() {
     182    protected DataSet getCurrentDataSet() {
    184183        if(activeLayer != null && activeLayer instanceof OsmDataLayer)
    185184            return ((OsmDataLayer)activeLayer).data;
     
    211210    public void removeLayer(Layer layer) {
    212211        if (layer == activeLayer) {
    213             if (layer instanceof OsmDataLayer) {
    214                 Main.ds = null;
    215             }
    216212            activeLayer = null;
    217213        }
     
    351347    public void setActiveLayer(Layer layer) {
    352348        if (!layers.contains(layer))
    353             throw new IllegalArgumentException(tr("Layer {0} must be in list of layers", layer.toString()));
    354         if (layer instanceof OsmDataLayer) {
    355             OsmDataLayer editLayer = (OsmDataLayer)layer;
    356             Main.ds = editLayer.data;
    357         } else {
    358             Main.ds.setSelected();
    359         }
    360         DataSet.fireSelectionChanged(Main.ds.getSelected());
     349            throw new IllegalArgumentException(tr("Layer ''{0}'' must be in list of layers", layer.toString()));
     350        if (! (layer instanceof OsmDataLayer)) {
     351            if (getCurrentDataSet() != null) {
     352                getCurrentDataSet().setSelected();
     353                DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());
     354            }
     355        }
    361356        Layer old = activeLayer;
    362357        activeLayer = layer;
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r1797 r1814  
    2727import org.openstreetmap.josm.data.osm.WaySegment;
    2828import org.openstreetmap.josm.data.projection.Projection;
    29 import org.openstreetmap.josm.data.projection.Mercator;
    3029
    3130/**
     
    5554    }
    5655
    57     protected DataSet getData()
    58     {
    59         return Main.ds;
     56    protected DataSet getCurrentDataSet() {
     57        return Main.main.getCurrentDataSet();
    6058    }
    6159
     
    102100    public ProjectionBounds getProjectionBounds() {
    103101        return new ProjectionBounds(
    104         new EastNorth(
    105                 center.east() - getWidth()/2.0*scale,
    106                 center.north() - getHeight()/2.0*scale),
    107         new EastNorth(
    108                 center.east() + getWidth()/2.0*scale,
    109                 center.north() + getHeight()/2.0*scale));
     102                new EastNorth(
     103                        center.east() - getWidth()/2.0*scale,
     104                        center.north() - getHeight()/2.0*scale),
     105                        new EastNorth(
     106                                center.east() + getWidth()/2.0*scale,
     107                                center.north() + getHeight()/2.0*scale));
    110108    };
    111109
    112110    public Bounds getRealBounds() {
    113111        return new Bounds(
    114         getProjection().eastNorth2latlon(new EastNorth(
    115                 center.east() - getWidth()/2.0*scale,
    116                 center.north() - getHeight()/2.0*scale)),
    117         getProjection().eastNorth2latlon(new EastNorth(
    118                 center.east() + getWidth()/2.0*scale,
    119                 center.north() + getHeight()/2.0*scale)));
     112                getProjection().eastNorth2latlon(new EastNorth(
     113                        center.east() - getWidth()/2.0*scale,
     114                        center.north() - getHeight()/2.0*scale)),
     115                        getProjection().eastNorth2latlon(new EastNorth(
     116                                center.east() + getWidth()/2.0*scale,
     117                                center.north() + getHeight()/2.0*scale)));
    120118    };
    121119
     
    163161     */
    164162    private void zoomTo(EastNorth newCenter, double newScale) {
    165 /* TODO: check that newCenter is really inside visible world and that scale is correct, don't allow zooming out to much */
     163        /* TODO: check that newCenter is really inside visible world and that scale is correct, don't allow zooming out to much */
    166164        boolean rep = false;
    167165        if (!newCenter.equals(center)) {
     
    177175            firePropertyChange("scale", oldScale, newScale);
    178176        }
    179         if(rep)
     177        if(rep) {
    180178            repaint();
     179        }
    181180    }
    182181
     
    186185
    187186    public void zoomTo(LatLon newCenter) {
    188         if (newCenter instanceof CachedLatLon)
     187        if(newCenter instanceof CachedLatLon) {
    189188            zoomTo(((CachedLatLon)newCenter).getEastNorth(), scale);
    190         else
     189        } else {
    191190            zoomTo(getProjection().latlon2eastNorth(newCenter), scale);
     191        }
    192192    }
    193193
     
    197197        // You will get the formula by simplifying this expression: newCenter = oldCenter + mouseCoordinatesInNewZoom - mouseCoordinatesInOldZoom
    198198        zoomTo(new EastNorth(
    199         center.east() - (x - getWidth()/2.0) * (newScale - scale),
    200         center.north() + (y - getHeight()/2.0) * (newScale - scale)),
    201         newScale);
     199                center.east() - (x - getWidth()/2.0) * (newScale - scale),
     200                center.north() + (y - getHeight()/2.0) * (newScale - scale)),
     201                newScale);
    202202    }
    203203
     
    213213        // -20 to leave some border
    214214        int w = getWidth()-20;
    215         if (w < 20)
     215        if (w < 20) {
    216216            w = 20;
     217        }
    217218        int h = getHeight()-20;
    218         if (h < 20)
     219        if (h < 20) {
    219220            h = 20;
     221        }
    220222
    221223        double scaleX = (box.max.east()-box.min.east())/w;
     
    228230    public void zoomTo(Bounds box) {
    229231        zoomTo(new ProjectionBounds(getProjection().latlon2eastNorth(box.min),
    230         getProjection().latlon2eastNorth(box.max)));
     232                getProjection().latlon2eastNorth(box.max)));
    231233    }
    232234
     
    238240        double minDistanceSq = snapDistance;
    239241        Node minPrimitive = null;
    240         for (Node n : getData().nodes) {
    241             if (n.deleted || n.incomplete)
     242        for (Node n : getCurrentDataSet().nodes) {
     243            if (n.deleted || n.incomplete) {
    242244                continue;
     245            }
    243246            Point sp = getPoint(n);
    244247            double dist = p.distanceSq(sp);
     
    249252            // when multiple nodes on one point, prefer new or selected nodes
    250253            else if(dist == minDistanceSq && minPrimitive != null
    251             && ((n.id == 0 && n.selected)
    252             || (!minPrimitive.selected && (n.selected || n.id == 0))))
     254                    && ((n.id == 0 && n.selected)
     255                            || (!minPrimitive.selected && (n.selected || n.id == 0)))) {
    253256                minPrimitive = n;
     257            }
    254258        }
    255259        return minPrimitive;
     
    264268    public final List<WaySegment> getNearestWaySegments(Point p) {
    265269        TreeMap<Double, List<WaySegment>> nearest = new TreeMap<Double, List<WaySegment>>();
    266         for (Way w : getData().ways) {
    267             if (w.deleted || w.incomplete) continue;
     270        for (Way w : getCurrentDataSet().ways) {
     271            if (w.deleted || w.incomplete) {
     272                continue;
     273            }
    268274            Node lastN = null;
    269275            int i = -2;
    270276            for (Node n : w.nodes) {
    271277                i++;
    272                 if (n.deleted || n.incomplete) continue;
     278                if (n.deleted || n.incomplete) {
     279                    continue;
     280                }
    273281                if (lastN == null) {
    274282                    lastN = n;
     
    283291                double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared
    284292                if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
    285                     if(w.selected) // prefer selected ways a little bit
     293                    if(w.selected) {
    286294                        perDist -= 0.00001;
     295                    }
    287296                    List<WaySegment> l;
    288297                    if (nearest.containsKey(perDist)) {
     
    315324    public final WaySegment getNearestWaySegment(Point p, Collection<WaySegment> ignore) {
    316325        List<WaySegment> nearest = getNearestWaySegments(p);
    317         if (ignore != null) nearest.removeAll(ignore);
     326        if (ignore != null) {
     327            nearest.removeAll(ignore);
     328        }
    318329        return nearest.isEmpty() ? null : nearest.get(0);
    319330    }
     
    376387    public Collection<OsmPrimitive> getAllNearest(Point p) {
    377388        Collection<OsmPrimitive> nearest = new HashSet<OsmPrimitive>();
    378             for (Way w : getData().ways) {
    379             if (w.deleted || w.incomplete) continue;
     389        for (Way w : getCurrentDataSet().ways) {
     390            if (w.deleted || w.incomplete) {
     391                continue;
     392            }
    380393            Node lastN = null;
    381394            for (Node n : w.nodes) {
    382                 if (n.deleted || n.incomplete) continue;
     395                if (n.deleted || n.incomplete) {
     396                    continue;
     397                }
    383398                if (lastN == null) {
    384399                    lastN = n;
     
    393408                if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
    394409                    nearest.add(w);
    395                         break;
    396                     }
     410                    break;
     411                }
    397412                lastN = n;
    398                 }
    399             }
    400         for (Node n : getData().nodes) {
     413            }
     414        }
     415        for (Node n : getCurrentDataSet().nodes) {
    401416            if (!n.deleted && !n.incomplete
    402417                    && getPoint(n).distanceSq(p) < snapDistance) {
     
    417432    public Collection<Node> getNearestNodes(Point p) {
    418433        Collection<Node> nearest = new HashSet<Node>();
    419         for (Node n : getData().nodes) {
     434        for (Node n : getCurrentDataSet().nodes) {
    420435            if (!n.deleted && !n.incomplete
    421436                    && getPoint(n).distanceSq(p) < snapDistance) {
     
    436451    public final Collection<Node> getNearestNodes(Point p, Collection<Node> ignore) {
    437452        Collection<Node> nearest = getNearestNodes(p);
    438                 if (nearest == null) return null;
    439         if (ignore != null) nearest.removeAll(ignore);
     453        if (nearest == null) return null;
     454        if (ignore != null) {
     455            nearest.removeAll(ignore);
     456        }
    440457        return nearest.isEmpty() ? null : nearest;
    441458    }
  • trunk/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java

    r1169 r1814  
    1313
    1414import org.openstreetmap.josm.data.osm.OsmPrimitive;
    15 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     15import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     16import org.openstreetmap.josm.tools.ImageProvider;
    1617
    1718/**
     
    2425 */
    2526public class OsmPrimitivRenderer implements ListCellRenderer, TableCellRenderer {
    26 
    27     /**
    28      * NameVisitor provides proper names and icons for OsmPrimitives
    29      */
    30     private NameVisitor visitor = new NameVisitor();
     27    static private final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
    3128
    3229    /**
     
    6562    private Component renderer(Component def, OsmPrimitive value) {
    6663        if (def != null && value != null && def instanceof JLabel) {
    67             (value).visit(visitor);
    68             ((JLabel)def).setText(visitor.name);
    69             ((JLabel)def).setIcon(visitor.icon);
     64            ((JLabel)def).setText(NAME_FORMATTER.getName(value));
     65            ((JLabel)def).setIcon(ImageProvider.get(OsmPrimitiveType.from(value)));
    7066        }
    7167        return def;
  • trunk/src/org/openstreetmap/josm/gui/SelectionManager.java

    r1725 r1814  
    279279        } else {
    280280            // nodes
    281             for (Node n : nc.getData().nodes) {
     281            for (Node n : nc.getCurrentDataSet().nodes) {
    282282                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n)))
    283283                    selection.add(n);
     
    285285
    286286            // ways
    287             for (Way w : nc.getData().ways) {
     287            for (Way w : nc.getCurrentDataSet().ways) {
    288288                if (w.deleted || w.nodes.isEmpty() || w.incomplete)
    289289                        continue;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r1787 r1814  
    353353                sel.add((OsmPrimitive)o);
    354354            }
    355             Main.ds.setSelected(sel);
     355            Main.main.getCurrentDataSet().setSelected(sel);
    356356        }
    357357
  • trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java

    r1811 r1814  
    288288        public void refresh() {
    289289            data.clear();
    290             for (OsmPrimitive primitive: Main.ds.getSelected()) {
     290            for (OsmPrimitive primitive: Main.main.getCurrentDataSet().getSelected()) {
    291291                if (primitive.id == 0) {
    292292                    continue;
     
    398398        @Override
    399399        protected void realRun() throws SAXException, IOException, OsmTransferException {
    400             Collection<OsmPrimitive> selection = Main.ds.getSelected();
     400            Collection<OsmPrimitive> selection = Main.main.getCurrentDataSet().getSelected();
    401401            Iterator<OsmPrimitive> it = selection.iterator();
    402402            try {
     
    454454
    455455        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
    456             setEnabled(Main.ds.getSelected().size() > 0);
     456            setEnabled(Main.main.getCurrentDataSet().getSelected().size() > 0);
    457457
    458458        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java

    r1790 r1814  
    6060import org.openstreetmap.josm.data.osm.RelationMember;
    6161import org.openstreetmap.josm.data.osm.Way;
    62 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
    6362import org.openstreetmap.josm.gui.ExtendedDialog;
    6463import org.openstreetmap.josm.gui.MapFrame;
     64import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    6565import org.openstreetmap.josm.gui.SideButton;
    6666import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
     67import org.openstreetmap.josm.gui.layer.Layer;
     68import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     69import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    6770import org.openstreetmap.josm.gui.preferences.TaggingPresetPreference;
    6871import org.openstreetmap.josm.gui.tagging.TaggingPreset;
     
    8891 * @author imi
    8992 */
    90 public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener {
    91 
    92     /**
    93      * Used to display relation names in the membership table
    94      */
    95     private NameVisitor nameVisitor = new NameVisitor();
     93public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, LayerChangeListener {
     94    static private final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
    9695
    9796    /**
     
    135134     */
    136135    void propertyEdit(int row) {
    137         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     136        Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    138137        if (sel.isEmpty()) return;
    139138
     
    318317     */
    319318    void add() {
    320         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     319        Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    321320        if (sel.isEmpty()) return;
    322321
     
    387386            boolean edit) {
    388387        final TreeMap<String, TreeSet<String>> allData = new TreeMap<String, TreeSet<String>>();
    389         for (OsmPrimitive osm : Main.ds.allNonDeletedPrimitives()) {
     388        for (OsmPrimitive osm : Main.main.getCurrentDataSet().allNonDeletedPrimitives()) {
    390389            for (String key : osm.keySet()) {
    391390                TreeSet<String> values = null;
     
    413412    private void delete(int row) {
    414413        String key = propertyData.getValueAt(row, 0).toString();
    415         Collection<OsmPrimitive> sel = Main.ds.getSelected();
     414        Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    416415        Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, null));
    417416        DataSet.fireSelectionChanged(sel);
     
    513512                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    514513                if (c instanceof JLabel) {
    515                     nameVisitor.visit((Relation)value);
    516                     ((JLabel)c).setText(nameVisitor.name);
     514                    ((JLabel)c).setText(NAME_FORMATTER.getName((Relation)value));
    517515                }
    518516                return c;
     
    576574                    } else if (e.getActionCommand().equals("Delete")) {
    577575                        Relation cur = (Relation)membershipData.getValueAt(row, 0);
    578                         NameVisitor n = new NameVisitor();
    579                         cur.visit(n);
    580 
    581576                        int result = new ExtendedDialog(Main.parent,
    582577                                tr("Change relation"),
    583                                 tr("Really delete selection from relation {0}?", n.name),
     578                                tr("Really delete selection from relation {0}?", NAME_FORMATTER.getName(cur)),
    584579                                new String[] {tr("Delete from relation"), tr("Cancel")},
    585580                                new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
     
    588583                        {
    589584                            Relation rel = new Relation(cur);
    590                             Collection<OsmPrimitive> sel = Main.ds.getSelected();
     585                            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    591586                            for (RelationMember rm : cur.members) {
    592587                                for (OsmPrimitive osm : sel) {
     
    642637
    643638        DataSet.selListeners.add(this);
     639        Layer.listeners.add(this);
    644640    }
    645641
    646642    @Override public void setVisible(boolean b) {
    647643        super.setVisible(b);
    648         if (b) {
    649             selectionChanged(Main.ds.getSelected());
     644        if (b && Main.main.getCurrentDataSet() != null) {
     645            selectionChanged(Main.main.getCurrentDataSet().getSelected());
    650646        }
    651647    }
     
    796792
    797793        Map<Relation, Collection<RelationMember>> roles = new HashMap<Relation, Collection<RelationMember>>();
    798         for (Relation r : Main.ds.relations) {
     794        for (Relation r : Main.main.getCurrentDataSet().relations) {
    799795            if (!r.deleted && !r.incomplete) {
    800796                for (RelationMember m : r.members) {
     
    842838        }
    843839    }
     840
     841    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     842        if (newLayer instanceof OsmDataLayer) {
     843            OsmDataLayer dataLayer = (OsmDataLayer)newLayer;
     844            selectionChanged(dataLayer.data.getSelected());
     845        }
     846    }
     847
     848    public void layerAdded(Layer newLayer) {
     849        // do nothing
     850    }
     851
     852    public void layerRemoved(Layer oldLayer) {
     853        // do nothing
     854    }
     855
     856
    844857}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r1787 r1814  
    7777            @Override public void mouseClicked(MouseEvent e) {
    7878                if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
    79                     Main.ds.setSelected((Relation)displaylist.getSelectedValue());
     79                    Main.main.getCurrentDataSet().setSelected((Relation)displaylist.getSelectedValue());
    8080                }
    8181            }
     
    125125    }
    126126
     127    protected int getNumRelations() {
     128        if (Main.main.getCurrentDataSet() == null) return 0;
     129        return Main.main.getCurrentDataSet().relations.size();
     130    }
     131
    127132    public void updateList() {
    128133        Relation selected = getSelected();
    129         list.setSize(Main.ds.relations.size());
    130         int i = 0;
    131         for (OsmPrimitive e : DataSet.sort(Main.ds.relations)) {
    132             if (!e.deleted && !e.incomplete) {
    133                 list.setElementAt(e, i++);
    134             }
    135         }
    136         list.setSize(i);
    137 
    138         if(Main.ds.relations.size() != 0) {
    139             setTitle(tr("Relations: {0}", Main.ds.relations.size()), true);
     134        list.setSize(getNumRelations());
     135        if (getNumRelations() > 0 ) {
     136            int i = 0;
     137            for (OsmPrimitive e : DataSet.sort(Main.main.getCurrentDataSet().relations)) {
     138                if (!e.deleted && !e.incomplete) {
     139                    list.setElementAt(e, i++);
     140                }
     141            }
     142            list.setSize(i);
     143        }
     144        if(getNumRelations() != 0) {
     145            setTitle(tr("Relations: {0}", Main.main.getCurrentDataSet().relations.size()), true);
    140146        } else {
    141147            setTitle(tr("Relations"), false);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r1722 r1814  
    4343import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    4444import org.openstreetmap.josm.gui.SideButton;
     45import org.openstreetmap.josm.gui.layer.Layer;
     46import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     47import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    4548import org.openstreetmap.josm.tools.Shortcut;
    4649
     
    5255 * @author imi
    5356 */
    54 public class SelectionListDialog extends ToggleDialog implements SelectionChangedListener {
     57public class SelectionListDialog extends ToggleDialog implements SelectionChangedListener, LayerChangeListener {
    5558
    5659    private static final int SELECTION_HISTORY_SIZE = 10;
     
    8083    public SelectionListDialog() {
    8184        super(tr("Current Selection"), "selectionlist", tr("Open a selection list window."),
    82         Shortcut.registerShortcut("subwindow:selection", tr("Toggle: {0}", tr("Current Selection")), KeyEvent.VK_T, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
     85                Shortcut.registerShortcut("subwindow:selection", tr("Toggle: {0}", tr("Current Selection")), KeyEvent.VK_T, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
    8386
    8487        selectionHistory = new LinkedList<Collection<? extends OsmPrimitive>>();
     
    8992            @Override
    9093            public void mouseClicked(MouseEvent e) {
    91                 if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1)
     94                if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
    9295                    updateMap();
     96                }
    9397            }
    9498
     
    112116                tr("Set the selected elements on the map to the selected items in the list above."),
    113117                new ActionListener() {
    114                     public void actionPerformed(ActionEvent e) {
    115                         updateMap();
    116                     }
    117                 });
     118            public void actionPerformed(ActionEvent e) {
     119                updateMap();
     120            }
     121        });
    118122        buttonPanel.add(selectButton);
    119123        BasicArrowButton selectionHistoryMenuButton = createArrowButton(selectButton);
     
    134138        buttonPanel.add(new SideButton(marktr("Reload"), "refresh", "SelectionList", tr("Refresh the selection list."),
    135139                new ActionListener() {
    136                     public void actionPerformed(ActionEvent e) {
    137                         selectionChanged(Main.ds.getSelected());
    138                     }
    139                 }));
     140            public void actionPerformed(ActionEvent e) {
     141                selectionChanged(Main.main.getCurrentDataSet().getSelected());
     142            }
     143        }));
    140144
    141145        searchButton = new SideButton(marktr("Search"), "search", "SelectionList", tr("Search for objects."),
     
    159163        popupMenu.add(zoomToSelection);
    160164
    161         selectionChanged(Main.ds.getSelected());
     165        if (Main.main.getCurrentDataSet() != null) {
     166            selectionChanged(Main.main.getCurrentDataSet().getSelected());
     167        }
    162168
    163169        DataSet.selListeners.add(this);
     170        Layer.listeners.add(this);
    164171    }
    165172
     
    179186    public void setVisible(boolean b) {
    180187        super.setVisible(b);
    181         if (b)
    182             selectionChanged(Main.ds.getSelected());
     188        if (b && Main.main.getCurrentDataSet() != null) {
     189            selectionChanged(Main.main.getCurrentDataSet().getSelected());
     190        }
    183191    }
    184192
     
    204212        for (int i = 0; i < selected.length; i++) {
    205213            Object o = list.get(selected[i]);
    206             if (o instanceof OsmPrimitive)
     214            if (o instanceof OsmPrimitive) {
    207215                ((OsmPrimitive) o).visit(box);
     216            }
    208217        }
    209218        if (box.getBounds() == null)
     
    247256        list.setSize(selArr.length);
    248257        int i = 0;
    249         for (OsmPrimitive osm : selArr)
     258        for (OsmPrimitive osm : selArr) {
    250259            list.setElementAt(osm, i++);
     260        }
    251261        if (selectionHistory != null && newSelection.size() > 0 && !newSelection.equals(historyIgnoreSelection)) {
    252262            historyIgnoreSelection = null;
     
    259269            }
    260270            selectionHistory.addFirst(newSelection);
    261             while (selectionHistory.size() > SELECTION_HISTORY_SIZE)
     271            while (selectionHistory.size() > SELECTION_HISTORY_SIZE) {
    262272                selectionHistory.removeLast();
     273            }
    263274        }
    264275
     
    267278        int relations = 0;
    268279        for (OsmPrimitive o : newSelection) {
    269             if (o instanceof Way)
     280            if (o instanceof Way) {
    270281                ways++;
    271             else if (o instanceof Node)
     282            } else if (o instanceof Node) {
    272283                nodes++;
    273             else if (o instanceof Relation)
     284            } else if (o instanceof Relation) {
    274285                relations++;
     286            }
    275287        }
    276288
     
    288300        Collection<OsmPrimitive> sel = new LinkedList<OsmPrimitive>();
    289301        for (int i = 0; i < list.getSize(); ++i)
    290             if (displaylist.isSelectedIndex(i))
     302            if (displaylist.isSelectedIndex(i)) {
    291303                sel.add((OsmPrimitive) list.get(i));
    292         Main.ds.setSelected(sel);
     304            }
     305        Main.main.getCurrentDataSet().setSelected(sel);
    293306    }
    294307
     
    308321            int relations = 0;
    309322            for (OsmPrimitive o : sel) {
    310                 if (o instanceof Way)
     323                if (o instanceof Way) {
    311324                    ways++;
    312                 else if (o instanceof Node)
     325                } else if (o instanceof Node) {
    313326                    nodes++;
    314                 else if (o instanceof Relation)
     327                } else if (o instanceof Relation) {
    315328                    relations++;
     329                }
    316330            }
    317331            String text = "";
    318             if(ways != 0)
     332            if(ways != 0) {
    319333                text += (text.length() > 0 ? ", " : "")
    320334                + trn("{0} way", "{0} ways", ways, ways);
    321             if(nodes != 0)
     335            }
     336            if(nodes != 0) {
    322337                text += (text.length() > 0 ? ", " : "")
    323338                + trn("{0} node", "{0} nodes", nodes, nodes);
    324             if(relations != 0)
     339            }
     340            if(relations != 0) {
    325341                text += (text.length() > 0 ? ", " : "")
    326342                + trn("{0} relation", "{0} relations", relations, relations);
     343            }
    327344            setText(tr("Selection: {0}", text));
    328345            addActionListener(this);
     
    331348        public void actionPerformed(ActionEvent e) {
    332349            historyIgnoreSelection = sel;
    333             Main.ds.setSelected(sel);
     350            Main.main.getCurrentDataSet().setSelected(sel);
    334351        }
    335352
     
    355372
    356373    }
     374
     375    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     376        if (newLayer instanceof OsmDataLayer) {
     377            OsmDataLayer dataLayer = (OsmDataLayer)newLayer;
     378            selectionChanged(dataLayer.data.getSelected());
     379
     380        }
     381
     382    }
     383
     384    public void layerAdded(Layer newLayer) {
     385        // do nothing
     386
     387    }
     388
     389    public void layerRemoved(Layer oldLayer) {
     390        // do nothing
     391
     392    }
    357393}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java

    r1228 r1814  
    2424import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2525import org.openstreetmap.josm.data.osm.User;
     26import org.openstreetmap.josm.gui.layer.Layer;
     27import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     28import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
    2629import org.openstreetmap.josm.tools.Shortcut;
    2730
     
    3235 * @author Frederik Ramm <frederik@remote.org>
    3336 */
    34 public class UserListDialog extends ToggleDialog implements SelectionChangedListener, MouseListener{
     37public class UserListDialog extends ToggleDialog implements SelectionChangedListener, MouseListener, LayerChangeListener {
    3538
    3639    /**
     
    5255    public UserListDialog() {
    5356        super(tr("Authors"), "userlist", tr("Open a list of people working on the selected objects."),
    54         Shortcut.registerShortcut("subwindow:authors", tr("Toggle: {0}", tr("Authors")), KeyEvent.VK_A, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
     57                Shortcut.registerShortcut("subwindow:authors", tr("Toggle: {0}", tr("Authors")), KeyEvent.VK_A, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
    5558
    5659        data.setColumnIdentifiers(new String[]{tr("Author"),tr("# Objects"),"%"});
    5760        userTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    5861        add(new JScrollPane(userTable), BorderLayout.CENTER);
    59         selectionChanged(Main.ds.getSelected());
     62        if (Main.main.getCurrentDataSet() != null) {
     63            selectionChanged(Main.main.getCurrentDataSet().getSelected());
     64        }
    6065        userTable.addMouseListener(this);
    6166        DataSet.selListeners.add(this);
     67        Layer.listeners.add(this);
    6268    }
    6369
    6470    @Override public void setVisible(boolean b) {
    6571        super.setVisible(b);
    66         if (b)
    67             selectionChanged(Main.ds.getSelected());
     72        if (b && Main.main.getCurrentDataSet() != null) {
     73            selectionChanged(Main.main.getCurrentDataSet().getSelected());
     74        }
    6875    }
    6976
     
    9198        for (OsmPrimitive p : newSelection) {
    9299            User u = p.user;
    93             if (u == null) u = anonymousUser;
     100            if (u == null) {
     101                u = anonymousUser;
     102            }
    94103            UserCount uc = counters.get(u);
    95             if (uc == null)
     104            if (uc == null) {
    96105                counters.put(u, uc = new UserCount(u, 0));
     106            }
    97107            uc.count++;
    98108            all++;
     
    123133            if (userName==null)
    124134                return;
    125             Collection<OsmPrimitive> selected = Main.ds.getSelected();
     135            Collection<OsmPrimitive> selected = Main.main.getCurrentDataSet().getSelected();
    126136            Collection<OsmPrimitive> byUser = new LinkedList<OsmPrimitive>();
    127137            for (OsmPrimitive p : selected) {
    128                 if (p.user!= null && userName.equals(p.user.name))
     138                if (p.user!= null && userName.equals(p.user.name)) {
    129139                    byUser.add(p);
     140                }
    130141            }
    131             Main.ds.setSelected(byUser);
     142            Main.main.getCurrentDataSet().setSelected(byUser);
    132143        }
    133144    }
     
    145156    }
    146157
     158    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
     159        if (newLayer instanceof OsmDataLayer) {
     160            OsmDataLayer dataLayer = (OsmDataLayer)newLayer;
     161            selectionChanged(dataLayer.data.getSelected());
     162
     163        }
     164    }
     165
     166    public void layerAdded(Layer newLayer) {
     167        // do nothing
     168    }
     169
     170    public void layerRemoved(Layer oldLayer) {
     171        // do nothing
     172    }
    147173}
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r1811 r1814  
    315315                    }
    316316                }
    317                 Main.ds.setSelected(sel);
     317                getLayer().data.setSelected(sel);
    318318            }
    319319        });
     
    564564            memberTableModel.applyToRelation(newRelation);
    565565            Main.main.undoRedo.add(new AddCommand(newRelation));
    566             DataSet.fireSelectionChanged(Main.ds.getSelected());
     566            DataSet.fireSelectionChanged(getLayer().data.getSelected());
    567567        } else if (! memberTableModel.hasSameMembersAs(getRelation()) || tagEditorModel.isDirty()) {
    568568            Relation editedRelation = new Relation(getRelation());
     
    588588                memberTableModel.applyToRelation(clone);
    589589                Main.main.undoRedo.add(new ChangeCommand(getRelation(), clone));
    590                 DataSet.fireSelectionChanged(Main.ds.getSelected());
     590                DataSet.fireSelectionChanged(getLayer().data.getSelected());
    591591            }
    592592        }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableCellRenderer.java

    r1793 r1814  
    1515import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1616import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    17 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     17import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    1818import org.openstreetmap.josm.tools.ImageProvider;
    1919
     
    2323 */
    2424public  class MemberTableCellRenderer extends JLabel implements TableCellRenderer {
     25    static private final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
     26
    2527    public final static Color BGCOLOR_SELECTED = new Color(143,170,255);
    2628    public final static Color BGCOLOR_EMPTY_ROW = new Color(234,234,234);
     
    112114
    113115    protected void renderPrimitive(OsmPrimitive primitive) {
    114         NameVisitor visitor = new NameVisitor();
    115         primitive.visit(visitor);
    116116        setIcon(icons.get(OsmPrimitiveType.from(primitive)));
    117         setText(visitor.name);
     117        setText(NAME_FORMATTER.getName(primitive));
    118118        setToolTipText(buildToolTipText(primitive));
    119119    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableColumnModel.java

    r1790 r1814  
    2020        col.setResizable(true);
    2121        col.setCellRenderer(renderer);
     22
    2223        addColumn(col);
    2324
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java

    r1806 r1814  
    1515import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1616import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    17 import org.openstreetmap.josm.data.osm.visitor.NameVisitor;
     17import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    1818import org.openstreetmap.josm.tools.ImageProvider;
    1919
     
    2323 */
    2424public  class SelectionTableCellRenderer extends JLabel implements TableCellRenderer {
     25    static private final PrimitiveNameFormatter NAME_FORMATTER = new PrimitiveNameFormatter();
     26
    2527    public final static Color BGCOLOR_SELECTED = new Color(143,170,255);
    2628    public final static Color BGCOLOR_DOUBLE_ENTRY = new Color(255,234,213);
     
    115117
    116118    protected void renderPrimitive(OsmPrimitive primitive) {
    117         NameVisitor visitor = new NameVisitor();
    118         primitive.visit(visitor);
    119119        setIcon(icons.get(OsmPrimitiveType.from(primitive)));
    120         setText(visitor.name);
     120        setText(NAME_FORMATTER.getName(primitive));
    121121        setToolTipText(buildToolTipText(primitive));
    122122    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/TagEditorModel.java

    r1790 r1814  
    260260
    261261    /**
    262      * initializes the model with the tags in the current JOSM selection
    263      */
    264     public void initFromJOSMSelection() {
    265         Collection<OsmPrimitive> selection = Main.ds.getSelected();
    266         clear();
    267         for (OsmPrimitive element : selection) {
    268             for (String key : element.keySet()) {
    269                 String value = element.get(key);
    270                 add(key,value);
    271             }
    272         }
    273         sort();
    274         setDirty(false);
    275     }
    276 
    277     /**
    278262     * initializes the model with the tags of an OSM primitive
    279263     *
     
    291275        setDirty(false);
    292276    }
    293 
    294277
    295278    /**
     
    381364        return command;
    382365    }
    383 
    384     /**
    385      * updates the tags of the primitives in the current selection with the
    386      * values in the current tag model
    387      *
    388      */
    389     public void updateJOSMSelection() {
    390         ArrayList<Command> commands = new ArrayList<Command>();
    391         Collection<OsmPrimitive> selection = Main.ds.getSelected();
    392         if (selection == null)
    393             return;
    394         for (TagModel tag : tags) {
    395             Command command = createUpdateTagCommand(selection,tag);
    396             if (command != null) {
    397                 commands.add(command);
    398             }
    399         }
    400         Command deleteCommand = createDeleteTagsCommand(selection);
    401         if (deleteCommand != null) {
    402             commands.add(deleteCommand);
    403         }
    404 
    405         SequenceCommand command = new SequenceCommand(
    406                 trn("Updating properties of up to {0} object", "Updating properties of up to {0} objects", selection.size(), selection.size()),
    407                 commands
    408         );
    409 
    410         // executes the commands and adds them to the undo/redo chains
    411         Main.main.undoRedo.add(command);
    412     }
    413 
    414366
    415367    /**
  • trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java

    r1759 r1814  
    101101        for (OsmPrimitive s : sel) {
    102102            String v = s.get(key);
    103             if (v != null)
     103            if (v != null) {
    104104                returnValue.values.add(v);
    105             else
     105            } else {
    106106                returnValue.hadEmpty = true;
    107             if(s.keys != null && s.keys.size() > 0)
     107            }
     108            if(s.keys != null && s.keys.size() > 0) {
    108109                returnValue.hadKeys = true;
     110            }
    109111        }
    110112        return returnValue;
     
    149151                // all objects use the same value
    150152                value = new JTextField();
    151                 for (String s : usage.values) ((JTextField) value).setText(s);
     153                for (String s : usage.values) {
     154                    ((JTextField) value).setText(s);
     155                }
    152156                originalValue = ((JTextField)value).getText();
    153157            } else {
     
    158162                originalValue = DIFFERENT;
    159163            }
    160             if(locale_text == null)
     164            if(locale_text == null) {
    161165                locale_text = tr(text);
     166            }
    162167            p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
    163168            p.add(value, GBC.eol().fill(GBC.HORIZONTAL));
     
    169174            // return if unchanged
    170175            String v = (value instanceof JComboBox) ?
    171                 ((JComboBox)value).getEditor().getItem().toString() :
    172                 ((JTextField)value).getText();
    173 
    174             if (use_last_as_default) lastValue.put(key, v);
    175             if (v.equals(originalValue) || (originalValue == null && v.length() == 0)) return;
    176 
    177             if (delete_if_empty && v.length() == 0)
    178                 v = null;
    179             cmds.add(new ChangePropertyCommand(sel, key, v));
     176                    ((JComboBox)value).getEditor().getItem().toString() :
     177                        ((JTextField)value).getText();
     178
     179                    if (use_last_as_default) {
     180                        lastValue.put(key, v);
     181                    }
     182                    if (v.equals(originalValue) || (originalValue == null && v.length() == 0)) return;
     183
     184                    if (delete_if_empty && v.length() == 0) {
     185                        v = null;
     186                    }
     187                    cmds.add(new ChangePropertyCommand(sel, key, v));
    180188        }
    181189        @Override boolean requestFocusInWindow() {return value.requestFocusInWindow();}
     
    200208            def = default_;
    201209
    202             if(locale_text == null)
     210            if(locale_text == null) {
    203211                locale_text = tr(text);
     212            }
    204213
    205214            String oneValue = null;
    206             for (String s : usage.values) oneValue = s;
     215            for (String s : usage.values) {
     216                oneValue = s;
     217            }
    207218            if (usage.values.size() < 2 && (oneValue == null || OsmUtils.trueval.equals(oneValue) || OsmUtils.falseval.equals(oneValue))) {
    208219                if(def)
    209220                {
    210221                    for (OsmPrimitive s : sel)
    211                         if(s.keys != null && s.keys.size() > 0) def = false;
     222                        if(s.keys != null && s.keys.size() > 0) {
     223                            def = false;
     224                        }
    212225                }
    213226
     
    215228                // we can display a standard check box.
    216229                initialState = OsmUtils.trueval.equals(oneValue) ?
    217                             QuadStateCheckBox.State.SELECTED :
     230                        QuadStateCheckBox.State.SELECTED :
    218231                            OsmUtils.falseval.equals(oneValue) ?
    219                             QuadStateCheckBox.State.NOT_SELECTED :
    220                             def ? QuadStateCheckBox.State.SELECTED
    221                             : QuadStateCheckBox.State.UNSET;
     232                                    QuadStateCheckBox.State.NOT_SELECTED :
     233                                        def ? QuadStateCheckBox.State.SELECTED
     234                                                : QuadStateCheckBox.State.UNSET;
    222235                check = new QuadStateCheckBox(locale_text, initialState,
    223236                        new QuadStateCheckBox.State[] {
     
    249262            cmds.add(new ChangePropertyCommand(sel, key,
    250263                    check.getState() == QuadStateCheckBox.State.SELECTED ? OsmUtils.trueval :
    251                     check.getState() == QuadStateCheckBox.State.NOT_SELECTED ? OsmUtils.falseval :
    252                     null));
     264                        check.getState() == QuadStateCheckBox.State.NOT_SELECTED ? OsmUtils.falseval :
     265                            null));
    253266        }
    254267        @Override boolean requestFocusInWindow() {return check.requestFocusInWindow();}
     
    280293            String[] value_array = values.split(",");
    281294            String[] display_array;
    282             if(locale_display_values != null)
     295            if(locale_display_values != null) {
    283296                display_array = locale_display_values.split(",");
    284             else if(display_values != null)
     297            } else if(display_values != null) {
    285298                display_array = display_values.split(",");
    286             else
     299            } else {
    287300                display_array = value_array;
     301            }
    288302
    289303            lhm = new LinkedHashMap<String,String>();
     
    294308            for (int i=0; i<value_array.length; i++) {
    295309                lhm.put(value_array[i],
    296                 (locale_display_values == null) ?
    297                 tr(display_array[i]) : display_array[i]);
     310                        (locale_display_values == null) ?
     311                                tr(display_array[i]) : display_array[i]);
    298312            }
    299313            if(!usage.unused())
    300314            {
    301315                for (String s : usage.values) {
    302                     if (!lhm.containsKey(s)) lhm.put(s, s);
    303                 }
    304             }
    305             if (default_ != null && !lhm.containsKey(default_)) lhm.put(default_, default_);
    306             if(!lhm.containsKey("")) lhm.put("", "");
     316                    if (!lhm.containsKey(s)) {
     317                        lhm.put(s, s);
     318                    }
     319                }
     320            }
     321            if (default_ != null && !lhm.containsKey(default_)) {
     322                lhm.put(default_, default_);
     323            }
     324            if(!lhm.containsKey("")) {
     325                lhm.put("", "");
     326            }
    307327
    308328            combo = new JComboBox(lhm.values().toArray());
     
    330350            }
    331351
    332             if(locale_text == null)
     352            if(locale_text == null) {
    333353                locale_text = tr(text);
     354            }
    334355            p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
    335356            p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
     
    340361            String display = (obj == null) ? null : obj.toString();
    341362            String value = null;
    342             if(display == null && combo.isEditable())
     363            if(display == null && combo.isEditable()) {
    343364                display = combo.getEditor().getItem().toString();
     365            }
    344366
    345367            if (display != null)
     
    347369                for (String key : lhm.keySet()) {
    348370                    String k = lhm.get(key);
    349                     if (k != null && k.equals(display)) value=key;
    350                 }
    351                 if(value == null)
     371                    if (k != null && k.equals(display)) {
     372                        value=key;
     373                    }
     374                }
     375                if(value == null) {
    352376                    value = display;
    353             }
    354             else
     377                }
     378            } else {
    355379                value = "";
     380            }
    356381
    357382            // no change if same as before
    358383            if (value.equals(originalValue) || (originalValue == null && (value == null || value.length() == 0))) return;
    359384
    360             if (delete_if_empty && value != null && value.length() == 0)
     385            if (delete_if_empty && value != null && value.length() == 0) {
    361386                value = null;
     387            }
    362388            cmds.add(new ChangePropertyCommand(sel, key, value));
    363389        }
     
    370396
    371397        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    372             if(locale_text == null)
     398            if(locale_text == null) {
    373399                locale_text = tr(text);
     400            }
    374401            p.add(new JLabel(locale_text), GBC.eol());
    375402            return false;
     
    385412
    386413        @Override public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
    387             if(locale_text == null)
     414            if(locale_text == null) {
    388415                locale_text = text == null ? tr("More information about this feature") : tr(text);
     416            }
    389417            String url = locale_href;
    390418            if (url == null) {
     
    449477        putValue("toolbar", "tagging_" + getRawName());
    450478        putValue(SHORT_DESCRIPTION, (group != null ?
    451         tr("Use preset ''{0}'' of group ''{1}''", getLocaleName(), group.getName()) :
    452         tr("Use preset ''{0}''", getLocaleName())));
     479                tr("Use preset ''{0}'' of group ''{1}''", getLocaleName(), group.getName()) :
     480                    tr("Use preset ''{0}''", getLocaleName())));
    453481    }
    454482
    455483    public String getLocaleName() {
    456         if(locale_name == null)
     484        if(locale_name == null) {
    457485            locale_name = tr(name);
     486        }
    458487        return locale_name;
    459488    }
     
    479508            icon = new ImageIcon(iconName);
    480509        }
    481         if (Math.max(icon.getIconHeight(), icon.getIconWidth()) != 16)
     510        if (Math.max(icon.getIconHeight(), icon.getIconWidth()) != 16) {
    482511            icon = new ImageIcon(icon.getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH));
     512        }
    483513        putValue(Action.SMALL_ICON, icon);
    484514    }
     
    488518     */
    489519    private static Collection<String> allowedtypes = Arrays.asList(new String[]
    490     {marktr("way"), marktr("node"), marktr("relation"), marktr("closedway")});
     520                                                                              {marktr("way"), marktr("node"), marktr("relation"), marktr("closedway")});
    491521    public void setType(String types) throws SAXException {
    492522        this.types = Arrays.asList(types.split(","));
     
    517547            if (o instanceof TaggingPresetMenu) {
    518548                TaggingPresetMenu tp = (TaggingPresetMenu) o;
    519                 if(tp == lastmenu)
     549                if(tp == lastmenu) {
    520550                    lastmenu = tp.group;
    521                 else
     551                } else
    522552                {
    523553                    tp.setDisplayName();
     
    538568                all.add(tp);
    539569                Main.toolbar.register(tp);
    540             } else
     570            } else {
    541571                all.getLast().data.add((Item)o);
     572            }
    542573        }
    543574        return all;
     
    548579        LinkedList<String> sources = new LinkedList<String>();
    549580
    550         if(Main.pref.getBoolean("taggingpreset.enable-defaults", true))
     581        if(Main.pref.getBoolean("taggingpreset.enable-defaults", true)) {
    551582            sources.add("resource://presets/presets.xml");
     583        }
    552584        sources.addAll(Main.pref.getCollection("taggingpreset.sources", new LinkedList<String>()));
    553585
     
    604636        for (Item i : data)
    605637        {
    606             if(i instanceof Link)
     638            if(i instanceof Link) {
    607639                l.add(i);
    608             else
    609             {
    610                 if(i.addToPanel(p, selected))
     640            } else
     641            {
     642                if(i.addToPanel(p, selected)) {
    611643                    p.hasElements = true;
    612             }
    613         }
    614         for(Item link : l)
     644                }
     645            }
     646        }
     647        for(Item link : l) {
    615648            link.addToPanel(p, selected);
     649        }
    616650        return p;
    617651    }
    618652
    619653    public void actionPerformed(ActionEvent e) {
    620         Collection<OsmPrimitive> sel = createSelection(Main.ds.getSelected());
     654        Collection<OsmPrimitive> sel = createSelection(Main.main.getCurrentDataSet().getSelected());
    621655        PresetPanel p = createPanel(sel);
    622656        if (p == null)
     
    627661            String title = trn("Change {0} object", "Change {0} objects", sel.size(), sel.size());
    628662            if(sel.size() == 0) {