Changeset 1857 in josm for trunk/src


Ignore:
Timestamp:
2009-07-26T22:52:23+02:00 (15 years ago)
Author:
Gubaer
Message:

replaced JOptionDialog.show... by OptionPaneUtil.show....
improved relation editor

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
27 edited

Legend:

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

    r1849 r1857  
    4141import org.openstreetmap.josm.gui.MainMenu;
    4242import org.openstreetmap.josm.gui.MapFrame;
     43import org.openstreetmap.josm.gui.OptionPaneUtil;
    4344import org.openstreetmap.josm.gui.SplashScreen;
    4445import org.openstreetmap.josm.gui.download.DownloadDialog.DownloadTask;
     
    279280            Main.proj = (Projection)Class.forName(name).newInstance();
    280281        } catch (final Exception e) {
    281             JOptionPane.showMessageDialog(null, tr("The projection {0} could not be activated. Using Mercator", name));
     282            OptionPaneUtil.showMessageDialog(
     283                    Main.parent,
     284                    tr("The projection {0} could not be activated. Using Mercator", name),
     285                    tr("Error"),
     286                    JOptionPane.ERROR_MESSAGE
     287            );
    282288            Main.proj = new Mercator();
    283289        }
     
    416422            final Bounds b = OsmUrlToBounds.parse(s);
    417423            if (b == null) {
    418                 JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed URL: \"{0}\"", s));
     424                OptionPaneUtil.showMessageDialog(
     425                        Main.parent,
     426                        tr("Ignoring malformed URL: \"{0}\"", s),
     427                        tr("Warning"),
     428                        JOptionPane.WARNING_MESSAGE
     429                );
    419430            } else {
    420431                //DownloadTask osmTask = main.menu.download.downloadTasks.get(0);
     
    429440                main.menu.openFile.openFile(new File(new URI(s)));
    430441            } catch (URISyntaxException e) {
    431                 JOptionPane.showMessageDialog(Main.parent, tr("Ignoring malformed file URL: \"{0}\"", s));
     442                OptionPaneUtil.showMessageDialog(
     443                        Main.parent,
     444                        tr("Ignoring malformed file URL: \"{0}\"", s),
     445                        tr("Warning"),
     446                        JOptionPane.WARNING_MESSAGE
     447                );
    432448            }
    433449            return;
  • trunk/src/org/openstreetmap/josm/actions/GpxExportAction.java

    r1847 r1857  
    231231        } catch (IOException x) {
    232232            x.printStackTrace();
    233             JOptionPane.showMessageDialog(Main.parent, tr("Error while exporting {0}:\n{1}", fn,x.getMessage()), tr("Error"), JOptionPane.ERROR_MESSAGE);
     233            OptionPaneUtil.showMessageDialog(
     234                    Main.parent,
     235                    tr("Error while exporting {0}:\n{1}", fn,x.getMessage()),
     236                    tr("Error"),
     237                    JOptionPane.ERROR_MESSAGE
     238            );
    234239        }
    235240    }
     
    285290                l.setVisibleRowCount(4);
    286291                l.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    287                 int answer = JOptionPane.showConfirmDialog(Main.parent, new JScrollPane(l),tr("Choose a predefined license"), JOptionPane.OK_CANCEL_OPTION);
     292                int answer = OptionPaneUtil.showConfirmationDialog(
     293                        Main.parent,
     294                        new JScrollPane(l),
     295                        tr("Choose a predefined license"),
     296                        JOptionPane.OK_CANCEL_OPTION,
     297                        JOptionPane.QUESTION_MESSAGE
     298                );
    288299                if (answer != JOptionPane.OK_OPTION || l.getSelectedIndex() == -1)
    289300                    return;
  • trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java

    r1847 r1857  
    3737import org.openstreetmap.josm.data.osm.visitor.CollectBackReferencesVisitor;
    3838import org.openstreetmap.josm.gui.ExtendedDialog;
     39import org.openstreetmap.josm.gui.OptionPaneUtil;
    3940import org.openstreetmap.josm.tools.GBC;
    4041import org.openstreetmap.josm.tools.Pair;
     
    7273
    7374        if (selectedNodes.size() < 2) {
    74             JOptionPane.showMessageDialog(
     75            OptionPaneUtil.showMessageDialog(
    7576                    Main.parent,
    7677                    tr("Please select at least two nodes to merge."),
     
    249250                w.visit(backRefs);
    250251                if (!backRefs.data.isEmpty()) {
    251                     JOptionPane.showMessageDialog(Main.parent,
     252                    OptionPaneUtil.showMessageDialog(
     253                            Main.parent,
    252254                            tr("Cannot merge nodes: " +
    253                             "Would have to delete a way that is still used."));
     255                            "Would have to delete a way that is still used."),
     256                            tr("Warning"),
     257                            JOptionPane.WARNING_MESSAGE
     258                    );
    254259                    return null;
    255260                }
  • trunk/src/org/openstreetmap/josm/actions/MirrorAction.java

    r1847 r1857  
    1919import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2020import org.openstreetmap.josm.data.osm.Way;
     21import org.openstreetmap.josm.gui.OptionPaneUtil;
    2122import org.openstreetmap.josm.tools.Shortcut;
    2223
     
    4950
    5051        if (nodes.size() == 0) {
    51             JOptionPane.showMessageDialog(
     52            OptionPaneUtil.showMessageDialog(
    5253                    Main.parent,
    5354                    tr("Please select at least one node or way."),
  • trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java

    r1847 r1857  
    106106                }
    107107                if(delta < Math.PI/4) {
    108                     JOptionPane.showMessageDialog(Main.parent, tr("Please select ways with almost right angles to orthogonalize."));
     108                    OptionPaneUtil.showMessageDialog(
     109                            Main.parent,
     110                            tr("Please select ways with almost right angles to orthogonalize."),
     111                            tr("Information"),
     112                            JOptionPane.INFORMATION_MESSAGE
     113                    );
    109114                    return;
    110115                }
  • trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java

    r1847 r1857  
    8787    public boolean checkSaveConditions(Layer layer) {
    8888        if (layer == null) {
    89             JOptionPane.showMessageDialog(Main.parent, tr("Internal Error: cannot check conditions for no layer. Please report this as a bug."));
     89            OptionPaneUtil.showMessageDialog(
     90                    Main.parent,
     91                    tr("Internal Error: cannot check conditions for no layer. Please report this as a bug."),
     92                    tr("Error"),
     93                    JOptionPane.ERROR_MESSAGE
     94            );
    9095            return false;
    9196        }
    9297        if (Main.map == null) {
    93             JOptionPane.showMessageDialog(
     98            OptionPaneUtil.showMessageDialog(
    9499                    Main.parent,
    95100                    tr("No document open so nothing to save."),
     
    271276        } catch (IOException e) {
    272277            e.printStackTrace();
    273             JOptionPane.showMessageDialog(Main.parent, tr("An error occurred while saving.")+"\n"+e.getMessage());
     278            OptionPaneUtil.showMessageDialog(
     279                    Main.parent,
     280                    tr("An error occurred while saving. Error is: {0}", e.getMessage()),
     281                    tr("Error"),
     282                    JOptionPane.ERROR_MESSAGE
     283            );
    274284        }
    275285        try {
  • trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java

    r1843 r1857  
    3131import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
    3232import org.openstreetmap.josm.data.osm.visitor.Visitor;
     33import org.openstreetmap.josm.gui.OptionPaneUtil;
    3334import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    3435import org.openstreetmap.josm.tools.Shortcut;
     
    6566
    6667        if (!checkSelection(selection)) {
    67             JOptionPane.showMessageDialog(Main.parent, tr("The current selection cannot be used for splitting."));
     68            OptionPaneUtil.showMessageDialog(
     69                    Main.parent,
     70                    tr("The current selection cannot be used for splitting."),
     71                    tr("Warning"),
     72                    JOptionPane.WARNING_MESSAGE
     73            );
    6874            return;
    6975        }
     
    117123            }
    118124            if (wayOccurenceCounter.isEmpty()) {
    119                 JOptionPane.showMessageDialog(Main.parent,
     125                OptionPaneUtil.showMessageDialog(Main.parent,
    120126                        trn("The selected node is not in the middle of any way.",
    121127                                "The selected nodes are not in the middle of any way.",
    122                                 selectedNodes.size()));
     128                                selectedNodes.size()),
     129                                tr("Warning"),
     130                                JOptionPane.WARNING_MESSAGE);
    123131                return;
    124132            }
     
    127135                if (entry.getValue().equals(selectedNodes.size())) {
    128136                    if (selectedWay != null) {
    129                         JOptionPane.showMessageDialog(Main.parent,
     137                        OptionPaneUtil.showMessageDialog(Main.parent,
    130138                                trn("There is more than one way using the node you selected. Please select the way also.",
    131139                                        "There is more than one way using the nodes you selected. Please select the way also.",
    132                                         selectedNodes.size()));
     140                                        selectedNodes.size()),
     141                                        tr("Warning"),
     142                                        JOptionPane.WARNING_MESSAGE);
    133143                        return;
    134144                    }
     
    138148
    139149            if (selectedWay == null) {
    140                 JOptionPane.showMessageDialog(Main.parent,
    141                         tr("The selected nodes do not share the same way."));
     150                OptionPaneUtil.showMessageDialog(Main.parent,
     151                        tr("The selected nodes do not share the same way."),
     152                        tr("Warning"),
     153                        JOptionPane.WARNING_MESSAGE);
    142154                return;
    143155            }
     
    151163            }
    152164            if (!nds.isEmpty()) {
    153                 JOptionPane.showMessageDialog(Main.parent,
     165                OptionPaneUtil.showMessageDialog(Main.parent,
    154166                        trn("The selected way does not contain the selected node.",
    155167                                "The selected way does not contain all the selected nodes.",
    156                                 selectedNodes.size()));
     168                                selectedNodes.size()),
     169                                tr("Warning"),
     170                                JOptionPane.WARNING_MESSAGE);
    157171                return;
    158172            }
     
    219233                && !nodeSet.contains(wayChunks.get(0).get(0))) {
    220234            if (wayChunks.size() == 2) {
    221                 JOptionPane.showMessageDialog(Main.parent, tr("You must select two or more nodes to split a circular way."));
     235                OptionPaneUtil.showMessageDialog(
     236                        Main.parent,
     237                        tr("You must select two or more nodes to split a circular way."),
     238                        tr("Warning"),
     239                        JOptionPane.WARNING_MESSAGE);
    222240                return;
    223241            }
     
    230248        if (wayChunks.size() < 2) {
    231249            if(wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size()-1)) {
    232                 JOptionPane.showMessageDialog(Main.parent, tr("You must select two or more nodes to split a circular way."));
     250                OptionPaneUtil.showMessageDialog(
     251                        Main.parent,
     252                        tr("You must select two or more nodes to split a circular way."),
     253                        tr("Warning"),
     254                        JOptionPane.WARNING_MESSAGE);
    233255            } else {
    234                 JOptionPane.showMessageDialog(Main.parent, tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"));
     256                OptionPaneUtil.showMessageDialog(
     257                        Main.parent,
     258                        tr("The way cannot be split at the selected nodes. (Hint: Select nodes in the middle of the way.)"),
     259                        tr("Warning"),
     260                        JOptionPane.WARNING_MESSAGE);
    235261            }
    236262            return;
     
    321347        }
    322348        if(warnmerole) {
    323             JOptionPane.showMessageDialog(Main.parent, tr("A role based relation membership was copied to all new ways.\nYou should verify this and correct it when necessary."));
     349            OptionPaneUtil.showMessageDialog(
     350                    Main.parent,
     351                    tr("<html>A role based relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
     352                    tr("Warning"),
     353                    JOptionPane.WARNING_MESSAGE);
    324354        } else if(warnme) {
    325             JOptionPane.showMessageDialog(Main.parent, tr("A relation membership was copied to all new ways.\nYou should verify this and correct it when necessary."));
     355            OptionPaneUtil.showMessageDialog(
     356                    Main.parent,
     357                    tr("<html>A relation membership was copied to all new ways.<br>You should verify this and correct it when necessary.</html>"),
     358                    tr("Warning"),
     359                    JOptionPane.WARNING_MESSAGE);
    326360        }
    327361
  • trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java

    r1820 r1857  
    2727import org.openstreetmap.josm.data.osm.Way;
    2828import org.openstreetmap.josm.gui.MapView;
     29import org.openstreetmap.josm.gui.OptionPaneUtil;
    2930import org.openstreetmap.josm.tools.Shortcut;
    3031
     
    131132
    132133        if(errMsg != null) {
    133             JOptionPane.showMessageDialog(Main.parent, errMsg);
     134            OptionPaneUtil.showMessageDialog(
     135                    Main.parent,
     136                    errMsg,
     137                    tr("Error"),
     138                    JOptionPane.ERROR_MESSAGE);
    134139        }
    135140
  • trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java

    r1820 r1857  
    1515import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTaskList;
    1616import org.openstreetmap.josm.data.osm.DataSource;
     17import org.openstreetmap.josm.gui.OptionPaneUtil;
    1718import org.openstreetmap.josm.gui.layer.Layer;
    1819import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
     
    7374
    7475        if(bboxCount == 0) {
    75             JOptionPane.showMessageDialog(
     76            OptionPaneUtil.showMessageDialog(
    7677                    Main.parent,
    7778                    tr("No data to update found. Have you already opened or downloaded a data layer?"),
  • trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java

    r1820 r1857  
    1717import org.openstreetmap.josm.data.osm.DataSet;
    1818import org.openstreetmap.josm.data.osm.OsmPrimitive;
     19import org.openstreetmap.josm.gui.OptionPaneUtil;
    1920import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    2021import org.openstreetmap.josm.gui.layer.Layer;
     
    205206        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
    206207        if (selection.size() == 0) {
    207             JOptionPane.showMessageDialog(
     208            OptionPaneUtil.showMessageDialog(
    208209                    Main.parent,
    209210                    tr("There are no selected primitives to update."),
  • trunk/src/org/openstreetmap/josm/actions/UploadAction.java

    r1820 r1857  
    2626import org.openstreetmap.josm.data.osm.OsmPrimitive;
    2727import org.openstreetmap.josm.gui.ExtendedDialog;
     28import org.openstreetmap.josm.gui.OptionPaneUtil;
    2829import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    2930import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     
    174175        ConflictCollection conflicts = Main.map.mapView.getEditLayer().getConflicts();
    175176        if (conflicts !=null && !conflicts.isEmpty()) {
    176             JOptionPane.showMessageDialog(Main.parent,tr("There are unresolved conflicts. You have to resolve these first."));
     177            OptionPaneUtil.showMessageDialog(
     178                    Main.parent,
     179                    tr("There are unresolved conflicts. You have to resolve these first."),
     180                    tr("Warning"),
     181                    JOptionPane.WARNING_MESSAGE
     182            );
    177183            Main.map.conflictDialog.action.button.setSelected(true);
    178184            Main.map.conflictDialog.action.actionPerformed(null);
  • trunk/src/org/openstreetmap/josm/actions/search/SelectionWebsiteLoader.java

    r1814 r1857  
    2020import org.openstreetmap.josm.Main;
    2121import org.openstreetmap.josm.data.osm.OsmPrimitive;
     22import org.openstreetmap.josm.gui.OptionPaneUtil;
    2223import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    2324import org.openstreetmap.josm.io.OsmIdReader;
     
    5960        } catch (IOException e) {
    6061            e.printStackTrace();
    61             JOptionPane.showMessageDialog(Main.parent, tr("Could not read from URL: \"{0}\"",url));
     62            OptionPaneUtil.showMessageDialog(
     63                    Main.parent,
     64                    tr("Could not read from URL: \"{0}\"",url),
     65                    tr("Error"),
     66                    JOptionPane.ERROR_MESSAGE
     67            );
    6268        } catch (SAXException e) {
    6369            e.printStackTrace();
    64             JOptionPane.showMessageDialog(Main.parent,tr("Parsing error in URL: \"{0}\"",url));
     70            OptionPaneUtil.showMessageDialog(
     71                    Main.parent,
     72                    tr("Parsing error in URL: \"{0}\"",url),
     73                    tr("Error"),
     74                    JOptionPane.ERROR_MESSAGE
     75            );
    6576        } catch(OsmTransferException e) {
    6677            e.printStackTrace();
    6778            if (e.getCause() != null) {
    6879                if (e.getCause() instanceof IOException ) {
    69                     JOptionPane.showMessageDialog(Main.parent, tr("Could not read from URL: \"{0}\"",url),
     80                    OptionPaneUtil.showMessageDialog(
     81                            Main.parent, tr("Could not read from URL: \"{0}\"",url),
    7082                            tr("Error"), JOptionPane.ERROR_MESSAGE);
    7183                } else if (e.getCause() instanceof SAXException) {
    72                     JOptionPane.showMessageDialog(Main.parent,tr("Parsing error in URL: \"{0}\"",url),
     84                    OptionPaneUtil.showMessageDialog(Main.parent,tr("Parsing error in URL: \"{0}\"",url),
    7385                            tr("Error"), JOptionPane.ERROR_MESSAGE);
    7486                }
    7587            } else {
    76                 JOptionPane.showMessageDialog(Main.parent,tr("Error while communicating with server.",url),
     88                OptionPaneUtil.showMessageDialog(Main.parent,tr("Error while communicating with server.",url),
    7789                        tr("Error"), JOptionPane.ERROR_MESSAGE);
    7890            }
  • trunk/src/org/openstreetmap/josm/command/AddCommand.java

    r1814 r1857  
    1313import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1414import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
     15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1516import org.openstreetmap.josm.tools.ImageProvider;
    1617
     
    3536    public AddCommand(OsmPrimitive osm) {
    3637        super();
     38        this.osm = osm;
     39    }
     40
     41    /**
     42     * Create the command and specify the element to add.
     43     */
     44    public AddCommand(OsmDataLayer layer, OsmPrimitive osm) {
     45        super(layer);
    3746        this.osm = osm;
    3847    }
  • trunk/src/org/openstreetmap/josm/corrector/TagCorrector.java

    r1814 r1857  
    2929import org.openstreetmap.josm.data.osm.Way;
    3030import org.openstreetmap.josm.gui.JMultilineLabel;
     31import org.openstreetmap.josm.gui.OptionPaneUtil;
    3132import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
    3233import org.openstreetmap.josm.tools.GBC;
     
    140141            }
    141142
    142             int answer = JOptionPane.showOptionDialog(Main.parent, p,
    143                     tr("Automatic tag correction"), JOptionPane.YES_NO_CANCEL_OPTION,
    144                     JOptionPane.PLAIN_MESSAGE, null,
    145                     applicationOptions, applicationOptions[0]);
     143            int answer = OptionPaneUtil.showOptionDialog(
     144                    Main.parent,
     145                    p,
     146                    tr("Automatic tag correction"),
     147                    JOptionPane.YES_NO_CANCEL_OPTION,
     148                    JOptionPane.PLAIN_MESSAGE,
     149                    applicationOptions,
     150                    applicationOptions[0]
     151            );
    146152
    147153            if (answer == JOptionPane.YES_OPTION) {
  • trunk/src/org/openstreetmap/josm/data/DataSetChecker.java

    r1814 r1857  
    99import org.openstreetmap.josm.Main;
    1010import org.openstreetmap.josm.data.osm.OsmPrimitive;
     11import org.openstreetmap.josm.gui.OptionPaneUtil;
    1112import org.openstreetmap.josm.gui.layer.Layer;
    1213import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     14
     15// FIXME: class still needed?
    1316
    1417public class DataSetChecker {
     
    2326                for (OsmPrimitive osm : ((OsmDataLayer)l).data.allPrimitives()) {
    2427                    if (s.contains(osm)) {
    25                         JOptionPane.showMessageDialog(Main.parent, "cross references");
     28                        // FIXME: better message
     29                        // FIXME: translate message and title
     30                        OptionPaneUtil.showMessageDialog(
     31                                Main.parent,
     32                                "cross references",
     33                                "Information",
     34                                JOptionPane.INFORMATION_MESSAGE);
    2635                        return;
    2736                    }
     
    3443            OsmDataLayer l = (OsmDataLayer)Main.map.mapView.getActiveLayer();
    3544            if (l.data != Main.main.getCurrentDataSet()) {
    36                 JOptionPane.showMessageDialog(Main.parent, "Main.ds / active layer mismatch");
     45                OptionPaneUtil.showMessageDialog(
     46                        Main.parent,
     47                        "Main.ds / active layer mismatch",
     48                        "Error",
     49                        JOptionPane.ERROR_MESSAGE
     50                );
    3751                return;
    3852            }
    3953        }
    4054
    41         JOptionPane.showMessageDialog(Main.parent, "working");
     55        OptionPaneUtil.showMessageDialog(
     56                Main.parent, "working", "", JOptionPane.INFORMATION_MESSAGE);
    4257    }
    4358}
  • trunk/src/org/openstreetmap/josm/data/Preferences.java

    r1722 r1857  
    3131import org.openstreetmap.josm.actions.AboutAction;
    3232import org.openstreetmap.josm.data.projection.Mercator;
     33import org.openstreetmap.josm.gui.OptionPaneUtil;
    3334import org.openstreetmap.josm.gui.preferences.ProxyPreferences;
    3435import org.openstreetmap.josm.tools.ColorHelper;
     
    4546
    4647    /**
    47     * Internal storage for the preferenced directory.
    48     * Do not access this variable directly!
    49     * @see #getPreferencesDirFile()
    50     */
     48     * Internal storage for the preferenced directory.
     49     * Do not access this variable directly!
     50     * @see #getPreferencesDirFile()
     51     */
    5152    private File preferencesDirFile = null;
    5253
     
    131132        String s;
    132133        if ((s = System.getenv("JOSM_RESOURCES")) != null) {
    133             if (!s.endsWith(File.separator))
     134            if (!s.endsWith(File.separator)) {
    134135                s = s + File.separator;
     136            }
    135137            locations.add(s);
    136138        }
    137139        if ((s = System.getProperty("josm.resources")) != null) {
    138             if (!s.endsWith(File.separator))
     140            if (!s.endsWith(File.separator)) {
    139141                s = s + File.separator;
     142            }
    140143            locations.add(s);
    141144        }
     
    180183        final Map<String,String> all = new TreeMap<String,String>();
    181184        for (final Entry<String,String> e : properties.entrySet())
    182             if (e.getKey().startsWith(prefix))
     185            if (e.getKey().startsWith(prefix)) {
    183186                all.put(e.getKey(), e.getValue());
     187            }
    184188        for (final Entry<String,String> e : override.entrySet())
    185189            if (e.getKey().startsWith(prefix))
    186                 if (e.getValue() == null)
     190                if (e.getValue() == null) {
    187191                    all.remove(e.getKey());
    188                 else
     192                } else {
    189193                    all.put(e.getKey(), e.getValue());
     194                }
    190195        return all;
    191196    }
     
    194199        final TreeMap<String,String> all = new TreeMap<String,String>();
    195200        for (final Entry<String,String> e : defaults.entrySet())
    196             if (e.getKey().startsWith("color.") && e.getValue() != null)
     201            if (e.getKey().startsWith("color.") && e.getValue() != null) {
    197202                all.put(e.getKey().substring(6), e.getValue());
     203            }
    198204        for (final Entry<String,String> e : properties.entrySet())
    199             if (e.getKey().startsWith("color."))
     205            if (e.getKey().startsWith("color.")) {
    200206                all.put(e.getKey().substring(6), e.getValue());
     207            }
    201208        for (final Entry<String,String> e : override.entrySet())
    202209            if (e.getKey().startsWith("color."))
    203                 if (e.getValue() == null)
     210                if (e.getValue() == null) {
    204211                    all.remove(e.getKey().substring(6));
    205                 else
     212                } else {
    206213                    all.put(e.getKey().substring(6), e.getValue());
     214                }
    207215        return all;
    208216    }
     
    213221
    214222    synchronized public void putDefault(final String key, final String def) {
    215         if(!defaults.containsKey(key) || defaults.get(key) == null)
     223        if(!defaults.containsKey(key) || defaults.get(key) == null) {
    216224            defaults.put(key, def);
    217         else if(def != null && !defaults.get(key).equals(def))
     225        } else if(def != null && !defaults.get(key).equals(def)) {
    218226            System.out.println("Defaults for " + key + " differ: " + def + " != " + defaults.get(key));
     227        }
    219228    }
    220229
     
    235244    synchronized public boolean put(final String key, String value) {
    236245        String oldvalue = properties.get(key);
    237         if(value != null && value.length() == 0)
     246        if(value != null && value.length() == 0) {
    238247            value = null;
     248        }
    239249        if(!((oldvalue == null && (value == null || value.equals(defaults.get(key))))
    240         || (value != null && oldvalue != null && oldvalue.equals(value))))
     250                || (value != null && oldvalue != null && oldvalue.equals(value))))
    241251        {
    242             if (value == null)
     252            if (value == null) {
    243253                properties.remove(key);
    244             else
     254            } else {
    245255                properties.put(key, value);
     256            }
    246257            save();
    247258            firePreferenceChanged(key, value);
     
    268279
    269280    private final void firePreferenceChanged(final String key, final String value) {
    270         for (final PreferenceChangedListener l : listener)
     281        for (final PreferenceChangedListener l : listener) {
    271282            l.preferenceChanged(key, value);
     283        }
    272284    }
    273285
     
    282294            setSystemProperties();
    283295            final PrintWriter out = new PrintWriter(new OutputStreamWriter(
    284             new FileOutputStream(getPreferencesDir() + "preferences"), "utf-8"), false);
     296                    new FileOutputStream(getPreferencesDir() + "preferences"), "utf-8"), false);
    285297            for (final Entry<String, String> e : properties.entrySet()) {
    286298                String s = defaults.get(e.getKey());
    287299                /* don't save default values */
    288                 if(s == null || !s.equals(e.getValue()))
     300                if(s == null || !s.equals(e.getValue())) {
    289301                    out.println(e.getKey() + "=" + e.getValue());
     302                }
    290303            }
    291304            out.close();
     
    300313        properties.clear();
    301314        final BufferedReader in = new BufferedReader(new InputStreamReader(
    302         new FileInputStream(getPreferencesDir()+"preferences"), "utf-8"));
     315                new FileInputStream(getPreferencesDir()+"preferences"), "utf-8"));
    303316        int lineNumber = 0;
    304317        ArrayList<Integer> errLines = new ArrayList<Integer>();
     
    322335        if (prefDir.exists()) {
    323336            if(!prefDir.isDirectory()) {
    324                 JOptionPane.showMessageDialog(null, tr("Cannot open preferences directory: {0}",Main.pref.getPreferencesDir()));
     337                OptionPaneUtil.showMessageDialog(
     338                        Main.parent,
     339                        tr("Cannot open preferences directory: {0}",Main.pref.getPreferencesDir()),
     340                        tr("Error"),
     341                        JOptionPane.ERROR_MESSAGE
     342                );
    325343                return;
    326344            }
    327         }
    328         else
     345        } else {
    329346            prefDir.mkdirs();
    330 
    331         if (!new File(getPreferencesDir()+"preferences").exists())
     347        }
     348
     349        if (!new File(getPreferencesDir()+"preferences").exists()) {
    332350            resetToDefault();
     351        }
    333352
    334353        try {
    335             if (reset)
     354            if (reset) {
    336355                resetToDefault();
    337             else
     356            } else {
    338357                load();
     358            }
    339359        } catch (final IOException e1) {
    340360            e1.printStackTrace();
    341361            String backup = getPreferencesDir() + "preferences.bak";
    342             JOptionPane.showMessageDialog(null, tr("Preferences file had errors. Making backup of old one to {0}.", backup));
     362            OptionPaneUtil.showMessageDialog(
     363                    Main.parent,
     364                    tr("Preferences file had errors. Making backup of old one to {0}.", backup),
     365                    tr("Error"),
     366                    JOptionPane.ERROR_MESSAGE
     367            );
    343368            new File(getPreferencesDir() + "preferences").renameTo(new File(backup));
    344369            save();
     
    362387    public Collection<Bookmark> loadBookmarks() throws IOException {
    363388        File bookmarkFile = new File(getPreferencesDir()+"bookmarks");
    364         if (!bookmarkFile.exists())
     389        if (!bookmarkFile.exists()) {
    365390            bookmarkFile.createNewFile();
     391        }
    366392        BufferedReader in = new BufferedReader(new InputStreamReader(
    367         new FileInputStream(bookmarkFile), "utf-8"));
     393                new FileInputStream(bookmarkFile), "utf-8"));
    368394
    369395        LinkedList<Bookmark> bookmarks = new LinkedList<Bookmark>();
     
    375401                Bookmark b = new Bookmark();
    376402                b.name = m.group(1);
    377                 for (int i = 0; i < b.latlon.length; ++i)
     403                for (int i = 0; i < b.latlon.length; ++i) {
    378404                    b.latlon[i] = Double.parseDouble(m.group(i+2));
     405                }
    379406                bookmarks.add(b);
    380407            }
     
    387414    public void saveBookmarks(Collection<Bookmark> bookmarks) throws IOException {
    388415        File bookmarkFile = new File(Main.pref.getPreferencesDir()+"bookmarks");
    389         if (!bookmarkFile.exists())
     416        if (!bookmarkFile.exists()) {
    390417            bookmarkFile.createNewFile();
     418        }
    391419        PrintWriter out = new PrintWriter(new OutputStreamWriter(
    392         new FileOutputStream(bookmarkFile), "utf-8"));
     420                new FileOutputStream(bookmarkFile), "utf-8"));
    393421        for (Bookmark b : bookmarks) {
    394422            out.print(b.name+"\u001e");
    395             for (int i = 0; i < b.latlon.length; ++i)
     423            for (int i = 0; i < b.latlon.length; ++i) {
    396424                out.print(b.latlon[i]+(i<b.latlon.length-1?"\u001e":""));
     425            }
    397426            out.println();
    398427        }
     
    422451        putDefault("color."+colName, ColorHelper.color2html(def));
    423452        String colStr = specName != null ? get("color."+specName) : "";
    424         if(colStr.equals(""))
     453        if(colStr.equals("")) {
    425454            colStr = get("color."+colName);
     455        }
    426456        return colStr.equals("") ? def : ColorHelper.html2color(colStr);
    427457    }
     
    481511        putDefault(key, def);
    482512        String v = get(key);
    483         if(v != null && v.length() != 0)
     513        if(v != null && v.length() != 0) {
    484514            try { return Double.parseDouble(v); } catch(NumberFormatException e) {}
     515        }
    485516        try { return Double.parseDouble(def); } catch(NumberFormatException e) {}
    486517        return 0.0;
     
    494525            for(String a : def)
    495526            {
    496                 if(d != null)
     527                if(d != null) {
    497528                    d += "\u001e" + a;
    498                 else
     529                } else {
    499530                    d = a;
     531                }
    500532            }
    501533            putDefault(key, d);
     
    506538            {
    507539                String r =s;
    508                 if(r.indexOf("§§§") > 0) /* history dialog */
     540                if(r.indexOf("§§§") > 0) {
    509541                    r = r.replaceAll("§§§","\u001e");
    510                 else /* old style ';' separation */
     542                } else {
    511543                    r = r.replace(';','\u001e');
     544                }
    512545                if(!r.equals(s)) /* save the converted string */
    513546                {
     
    534567            for(String a : val)
    535568            {
    536                 if(s != null)
     569                if(s != null) {
    537570                    s += "\u001e" + a;
    538                 else
     571                } else {
    539572                    s = a;
     573                }
    540574            }
    541575        }
  • trunk/src/org/openstreetmap/josm/data/ServerSidePreferences.java

    r1169 r1857  
    2424
    2525import org.openstreetmap.josm.Main;
     26import org.openstreetmap.josm.gui.OptionPaneUtil;
    2627import org.openstreetmap.josm.io.OsmConnection;
    2728import org.openstreetmap.josm.io.XmlWriter;
     
    4849                System.out.println("reading preferences from "+serverUrl);
    4950                URLConnection con = serverUrl.openConnection();
    50                 if (con instanceof HttpURLConnection) addAuth((HttpURLConnection) con);
     51                if (con instanceof HttpURLConnection) {
     52                    addAuth((HttpURLConnection) con);
     53                }
    5154                con.connect();
    5255                BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
     
    5659                    b.append("\n");
    5760                }
    58                 if (con instanceof HttpURLConnection) ((HttpURLConnection) con).disconnect();
     61                if (con instanceof HttpURLConnection) {
     62                    ((HttpURLConnection) con).disconnect();
     63                }
    5964                return b.toString();
    6065            } catch (IOException e) {
     
    7782                con.getInputStream().close();
    7883                con.disconnect();
    79                 JOptionPane.showMessageDialog(Main.parent, tr("Preferences stored on {0}", u.getHost()));
     84                OptionPaneUtil.showMessageDialog(
     85                        Main.parent,
     86                        tr("Preferences stored on {0}", u.getHost()),
     87                        tr("Information"),
     88                        JOptionPane.INFORMATION_MESSAGE
     89                );
    8090            } catch (Exception e) {
    8191                e.printStackTrace();
    82                 JOptionPane.showMessageDialog(Main.parent, tr("Could not upload preferences. Reason: {0}", e.getMessage()));
     92                OptionPaneUtil.showMessageDialog(
     93                        Main.parent,
     94                        tr("Could not upload preferences. Reason: {0}", e.getMessage()),
     95                        tr("Error"),
     96                        JOptionPane.ERROR_MESSAGE
     97                );
    8398            }
    8499        }
     
    119134    public void download(String userName, String password) {
    120135        resetToDefault();
    121         if (!properties.containsKey("osm-server.username") && userName != null)
     136        if (!properties.containsKey("osm-server.username") && userName != null) {
    122137            properties.put("osm-server.username", userName);
    123         if (!properties.containsKey("osm-server.password") && password != null)
     138        }
     139        if (!properties.containsKey("osm-server.password") && password != null) {
    124140            properties.put("osm-server.password", password);
     141        }
    125142        String cont = connection.download();
    126143        if (cont == null) return;
     
    128145        try {
    129146            XmlObjectParser.Uniform<Prop> parser = new XmlObjectParser.Uniform<Prop>(in, "tag", Prop.class);
    130             for (Prop p : parser)
     147            for (Prop p : parser) {
    131148                properties.put(p.key, p.value);
     149            }
    132150        } catch (RuntimeException e) {
    133151            e.printStackTrace();
     
    144162        StringBuilder b = new StringBuilder("<preferences>\n");
    145163        for (Entry<String, String> p : properties.entrySet()) {
    146             if (p.getKey().equals("osm-server.password"))
     164            if (p.getKey().equals("osm-server.password")) {
    147165                continue; // do not upload password. It would get stored in plain!
     166            }
    148167            b.append("<tag key='");
    149168            b.append(XmlWriter.encode(p.getKey()));
     
    163182            for (String line = in.readLine(); line != null; line = in.readLine()) {
    164183                StringTokenizer st = new StringTokenizer(line, ",");
    165                 if (st.countTokens() < 5)
     184                if (st.countTokens() < 5) {
    166185                    continue;
     186                }
    167187                Bookmark b = new Bookmark();
    168188                b.name = st.nextToken();
    169189                try {
    170                     for (int i = 0; i < b.latlon.length; ++i)
     190                    for (int i = 0; i < b.latlon.length; ++i) {
    171191                        b.latlon[i] = Double.parseDouble(st.nextToken());
     192                    }
    172193                    bookmarks.add(b);
    173194                } catch (NumberFormatException x) {
  • trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java

    r1750 r1857  
    6767    }
    6868
    69     protected void addConflict(Conflict<?> conflict) {
     69    /**
     70     * Adds a conflict to the collection
     71     *
     72     * @param conflict the conflict
     73     * @exception IllegalStateException thrown, if this collection already includes a
     74     * conflict for conflict.getMy()
     75     */
     76    protected void addConflict(Conflict<?> conflict) throws IllegalStateException {
    7077        if (hasConflictForMy(conflict.getMy()))
    7178            throw new IllegalStateException(tr("already registered a conflict for primitive ''{0}''", conflict.getMy().toString()));
  • trunk/src/org/openstreetmap/josm/data/projection/Lambert.java

    r1849 r1857  
    1313import org.openstreetmap.josm.data.coor.LatLon;
    1414import org.openstreetmap.josm.data.Bounds;
     15import org.openstreetmap.josm.gui.OptionPaneUtil;
    1516
    1617public class Lambert implements Projection {
     
    5253
    5354    public static final double zoneLimits[] = { Math.toRadians(53.5 * 0.9), // between Zone 1 and Zone 2 (in grad *0.9)
    54             Math.toRadians(50.5 * 0.9), // between Zone 2 and Zone 3
    55             Math.toRadians(47.51963 * 0.9), // between Zone 3 and Zone 4
    56             Math.toRadians(46.17821 * 0.9) };// lowest latitude of Zone 4
     55        Math.toRadians(50.5 * 0.9), // between Zone 2 and Zone 3
     56        Math.toRadians(47.51963 * 0.9), // between Zone 3 and Zone 4
     57        Math.toRadians(46.17821 * 0.9) };// lowest latitude of Zone 4
    5758
    5859    public static final double cMinLonZones = Math.toRadians(-4.9074074074074059 * 0.9);
     
    8485        if (lt >= zoneLimits[3] && lt <= cMaxLatZone1 && lg >= cMinLonZones && lg <= cMaxLonZones) {
    8586            // zone I
    86             if (lt > zoneLimits[0])
     87            if (lt > zoneLimits[0]) {
    8788                currentZone = 0;
    88             // zone II
    89             else if (lt > zoneLimits[1])
     89            } else if (lt > zoneLimits[1]) {
    9090                currentZone = 1;
    91             // zone III
    92             else if (lt > zoneLimits[2])
     91            } else if (lt > zoneLimits[2]) {
    9392                currentZone = 2;
    94             // zone III or IV
    95             else if (lt > zoneLimits[3])
     93            } else if (lt > zoneLimits[3])
    9694                // Note: zone IV is dedicated to Corsica island and extends from 47.8 to
    9795                // 45.9 degrees of latitude. There is an overlap with zone III that can be
    9896                // solved only with longitude (covers Corsica if lon > 7.2 degree)
    99                 if (lg < Math.toRadians(8 * 0.9))
     97                if (lg < Math.toRadians(8 * 0.9)) {
    10098                    currentZone = 2;
    101                 else
     99                } else {
    102100                    currentZone = 3;
     101                }
    103102        } else {
    104103            outOfLambertZones = true; // possible when MAX_LAT is used
     
    109108            } else if (layoutZone != currentZone) {
    110109                if ((currentZone < layoutZone && Math.abs(zoneLimits[currentZone] - lt) > cMaxOverlappingZones)
    111                 || (currentZone > layoutZone && Math.abs(zoneLimits[layoutZone] - lt) > cMaxOverlappingZones)) {
    112                     JOptionPane.showMessageDialog(Main.parent,
    113                     tr("IMPORTANT : data positioned far away from\n"
    114                     + "the current Lambert zone limits.\n"
    115                     + "Do not upload any data after this message.\n"
    116                     + "Undo your last action, save your work\n"
    117                     + "and start a new layer on the new zone."));
     110                        || (currentZone > layoutZone && Math.abs(zoneLimits[layoutZone] - lt) > cMaxOverlappingZones)) {
     111                    OptionPaneUtil.showMessageDialog(Main.parent,
     112                            tr("IMPORTANT : data positioned far away from\n"
     113                                    + "the current Lambert zone limits.\n"
     114                                    + "Do not upload any data after this message.\n"
     115                                    + "Undo your last action, save your work\n"
     116                                    + "and start a new layer on the new zone."),
     117                                    tr("Warning"),
     118                                    JOptionPane.WARNING_MESSAGE);
    118119                    layoutZone = -1;
    119120                } else {
     
    130131    public LatLon eastNorth2latlon(EastNorth p) {
    131132        LatLon geo;
    132         if (layoutZone == -1)
     133        if (layoutZone == -1) {
    133134            // possible until the Lambert zone is determined by latlon2eastNorth() with a valid LatLon
    134135            geo = Geographic(p, Xs[currentZone], Ys[currentZone], c[currentZone], n[currentZone]);
    135         else
     136        } else {
    136137            geo = Geographic(p, Xs[layoutZone], Ys[layoutZone], c[layoutZone], n[layoutZone]);
     138        }
    137139        // translate ellipsoid Clark => GRS80 (WGS83)
    138140        LatLon wgs = Clark2GRS80(geo);
     
    197199            double eslt = Ellipsoid.clarke.e * Math.sin(lat);
    198200            double nlt = 2.0 * Math.atan(Math.pow((1.0 + eslt) / (1.0 - eslt), Ellipsoid.clarke.e / 2.0) * l) - Math.PI
    199                     / 2.0;
     201            / 2.0;
    200202            delta = Math.abs(nlt - lat);
    201203            lat = nlt;
     
    261263            s2 *= s2;
    262264            double l = Math.atan((Z / norm)
    263                 / (1.0 - (ell.a * ell.e2 * Math.cos(lt) / (norm * Math.sqrt(1.0 - ell.e2 * s2)))));
     265                    / (1.0 - (ell.a * ell.e2 * Math.cos(lt) / (norm * Math.sqrt(1.0 - ell.e2 * s2)))));
    264266            delta = Math.abs(l - lt);
    265267            lt = l;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java

    r1847 r1857  
    9898        if (isVisible){
    9999            restorePositionAndDimension();
     100            toFront();
    100101        } else {
    101102            rememberPositionAndDimension();
     
    130131    protected void build() {
    131132        setTitle(tr("Resolve conflicts"));
     133        try {
     134            setAlwaysOnTop(true);
     135        } catch(SecurityException e) {
     136            System.out.println(tr("Warning: couldn't setAlwaysOnTop(true) for ConflictResolution Dialog. Exception: {0}", e.toString()));
     137        }
    132138        getContentPane().setLayout(new BorderLayout());
    133139
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r1856 r1857  
    5252
    5353import org.openstreetmap.josm.Main;
    54 import org.openstreetmap.josm.actions.DeleteAction;
    5554import org.openstreetmap.josm.command.AddCommand;
    5655import org.openstreetmap.josm.command.ChangeCommand;
     56import org.openstreetmap.josm.command.ConflictAddCommand;
    5757import org.openstreetmap.josm.data.conflict.Conflict;
    5858import org.openstreetmap.josm.data.osm.DataSet;
     
    604604        // --- copy relation action
    605605        buttonPanel.add(new SideButton(new DuplicateRelationAction()));
     606
     607        // --- apply relation action
     608        buttonPanel.add(new SideButton(new ApplyAction()));
    606609
    607610        // --- delete relation action
     
    10021005    }
    10031006
    1004     class OKAction extends AbstractAction {
     1007    abstract class SavingAction extends AbstractAction {
    10051008        /**
    10061009         * apply updates to a new relation
     
    10141017            tagEditorModel.applyToPrimitive(newRelation);
    10151018            memberTableModel.applyToRelation(newRelation);
    1016             Main.main.undoRedo.add(new AddCommand(newRelation));
     1019            Main.main.undoRedo.add(new AddCommand(getLayer(),newRelation));
     1020
     1021            // make sure everybody is notified about the changes
     1022            //
    10171023            DataSet.fireSelectionChanged(getLayer().data.getSelected());
     1024            getLayer().fireDataChange();
     1025            GenericRelationEditor.this.setRelation(newRelation);
     1026            RelationDialogManager.getRelationDialogManager().updateContext(
     1027                    getLayer(),
     1028                    getRelation(),
     1029                    GenericRelationEditor.this
     1030            );
    10181031        }
    10191032
    10201033        /**
    1021          * apply updates to an existing relation
     1034         * Apply the updates for an existing relation which has not been changed
     1035         * outside of the relation editor.
     1036         *
    10221037         */
    1023         protected void applyExistingRelation() {
     1038        protected void applyExistingConflictingRelation() {
    10241039            Relation editedRelation = new Relation(getRelation());
    10251040            tagEditorModel.applyToPrimitive(editedRelation);
    10261041            memberTableModel.applyToRelation(editedRelation);
    1027             if (isDirtyRelation()) {
    1028                 Conflict<Relation> conflict = new Conflict<Relation>(getRelation(), editedRelation);
    1029                 getLayer().getConflicts().add(conflict);
    1030                 OptionPaneUtil.showMessageDialog(
    1031                         Main.parent,
    1032                         tr("<html>The relation has changed outside of the editor.<br>"
    1033                                 + "Your edits can't be applied directly, a conflict has been created instead.</html>"),
    1034                                 tr("Warning"),
    1035                                 JOptionPane.WARNING_MESSAGE
    1036                 );
    1037             } else {
    1038                 tagEditorModel.applyToPrimitive(editedRelation);
    1039                 memberTableModel.applyToRelation(editedRelation);
    1040                 Main.main.undoRedo.add(new ChangeCommand(getRelation(), editedRelation));
    1041                 DataSet.fireSelectionChanged(getLayer().data.getSelected());
    1042             }
     1042            Conflict<Relation> conflict = new Conflict<Relation>(getRelation(), editedRelation);
     1043            Main.main.undoRedo.add(new ConflictAddCommand(getLayer(),conflict));
    10431044        }
    10441045
    10451046        /**
    1046          * Applies updates
     1047         * Apply the updates for an existing relation which has been changed
     1048         * outside of the relation editor.
     1049         *
    10471050         */
    1048         protected void applyChanges() {
     1051        protected void applyExistingNonConflictingRelation() {
     1052            Relation editedRelation = new Relation(getRelation());
     1053            tagEditorModel.applyToPrimitive(editedRelation);
     1054            memberTableModel.applyToRelation(editedRelation);
     1055            Main.main.undoRedo.add(new ChangeCommand(getRelation(), editedRelation));
     1056            DataSet.fireSelectionChanged(getLayer().data.getSelected());
     1057            getLayer().fireDataChange();
     1058            // this will refresh the snapshot and update the dialog title
     1059            //
     1060            setRelation(getRelation());
     1061        }
     1062
     1063        protected boolean confirmClosingBecauseOfDirtyState() {
     1064            String [] options = new String[] {
     1065                    tr("Yes, create a conflict and close"),
     1066                    tr("No, continue editing")
     1067            };
     1068            int ret = OptionPaneUtil.showOptionDialog(
     1069                    Main.parent,
     1070                    tr("<html>This relation has been changed outside of the editor.<br>"
     1071                            + "You can't apply your changes and continue editing.<br>"
     1072                            + "<br>"
     1073                            + "Do you want to create a conflict and close the editor?</html>"),
     1074                            tr("Conflict in data"),
     1075                            JOptionPane.YES_NO_OPTION,
     1076                            JOptionPane.WARNING_MESSAGE,
     1077                            options,
     1078                            options[0]
     1079            );
     1080            switch(ret) {
     1081            case JOptionPane.CANCEL_OPTION: return false;
     1082            case JOptionPane.YES_OPTION: return true;
     1083            case JOptionPane.NO_OPTION: return false;
     1084            }
     1085            return false;
     1086        }
     1087
     1088        protected void warnDoubleConflict() {
     1089            OptionPaneUtil.showMessageDialog(
     1090                    Main.parent,
     1091                    tr("<html>Layer ''{0}'' already has a conflict for primitive<br>"
     1092                            + "''{1}''.<br>"
     1093                            + "Please resolve this conflict first, then try again.</html>",
     1094                            getLayer().getName(),
     1095                            new PrimitiveNameFormatter().getName(getRelation())
     1096                    ),
     1097                    tr("Double conflict"),
     1098                    JOptionPane.WARNING_MESSAGE
     1099            );
     1100        }
     1101    }
     1102
     1103    class ApplyAction extends SavingAction {
     1104        public ApplyAction() {
     1105            putValue(SHORT_DESCRIPTION, tr("Apply the current updates"));
     1106            putValue(SMALL_ICON, ImageProvider.get("save"));
     1107            putValue(NAME, tr("Apply"));
     1108            setEnabled(true);
     1109        }
     1110
     1111        public void run() {
    10491112            if (getRelation() == null) {
    10501113                applyNewRelation();
    10511114            } else if (!memberTableModel.hasSameMembersAs(getRelationSnapshot())
    10521115                    || tagEditorModel.isDirty()) {
    1053                 applyExistingRelation();
    1054             }
    1055         }
    1056 
     1116                if (isDirtyRelation()) {
     1117                    if (confirmClosingBecauseOfDirtyState()) {
     1118                        if (getLayer().getConflicts().hasConflictForMy(getRelation())) {
     1119                            warnDoubleConflict();
     1120                            return;
     1121                        }
     1122                        applyExistingConflictingRelation();
     1123                        setVisible(false);
     1124                    }
     1125                } else {
     1126                    applyExistingNonConflictingRelation();
     1127                }
     1128            }
     1129        }
     1130
     1131        public void actionPerformed(ActionEvent e) {
     1132            run();
     1133        }
     1134    }
     1135
     1136    class OKAction extends SavingAction {
    10571137        public OKAction() {
    10581138            putValue(SHORT_DESCRIPTION, tr("Apply the updates and close the dialog"));
    10591139            putValue(SMALL_ICON, ImageProvider.get("ok"));
    1060             putValue(NAME, tr("Apply"));
     1140            putValue(NAME, tr("OK"));
    10611141            setEnabled(true);
    10621142        }
    10631143
    1064         public void actionPerformed(ActionEvent e) {
    1065             applyChanges();
     1144        public void run() {
     1145            if (getRelation() == null) {
     1146                applyNewRelation();
     1147            } else if (!memberTableModel.hasSameMembersAs(getRelationSnapshot())
     1148                    || tagEditorModel.isDirty()) {
     1149                if (isDirtyRelation()) {
     1150                    if (confirmClosingBecauseOfDirtyState()) {
     1151                        if (getLayer().getConflicts().hasConflictForMy(getRelation())) {
     1152                            warnDoubleConflict();
     1153                            return;
     1154                        }
     1155                        applyExistingConflictingRelation();
     1156                    } else
     1157                        return;
     1158                } else {
     1159                    applyExistingNonConflictingRelation();
     1160                }
     1161            }
    10661162            setVisible(false);
     1163        }
     1164
     1165        public void actionPerformed(ActionEvent e) {
     1166            run();
    10671167        }
    10681168    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r1845 r1857  
    440440    }
    441441
     442    /**
     443     * get a node we can link against when sorting members
     444     * @param element the element we want to link against
     445     * @param linked_element already linked against element
     446     * @return the unlinked node if element is a way, the node itself if element is a node, null otherwise
     447     */
     448    private static Node getUnusedNode(RelationMember element, RelationMember linked_element)
     449    {
     450        Node    result = null;
     451
     452        if (element.member instanceof Way) {
     453            Way w = (Way) element.member;
     454            if (linked_element.member instanceof Way) {
     455                Way x = (Way) linked_element.member;
     456                if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) {
     457                    result = w.lastNode();
     458                } else {
     459                    result = w.firstNode();
     460                }
     461            } else if (linked_element.member instanceof Node) {
     462                Node m = (Node) linked_element.member;
     463                if (w.firstNode() == m) {
     464                    result = w.lastNode();
     465                } else {
     466                    result = w.firstNode();
     467                }
     468            }
     469        } else if (element.member instanceof Node) {
     470            Node n = (Node) element.member;
     471            result = n;
     472        }
     473
     474        return result;
     475    }
     476
    442477    void sort() {
    443478        RelationNodeMap map = new RelationNodeMap(members);
     
    450485        /*
    451486         * sort any 2 or more connected elements together may be slow with many unconnected members
    452          * TODO: cleanup again, too much code in 1 method
    453487         */
    454488
    455         if (map.isEmpty())
     489        if (map.isEmpty()) {
    456490            // empty relation or incomplete members
    457491            return;
     492        }
    458493        segments = new Vector<LinkedList<Integer>>();
    459494
     
    482517                endSearchNode = null;
    483518                if (segment.size() == 1) {
     519                    // only one element in segment, so try to link against each linkable node of element
    484520                    RelationMember m = members.get(segment.getFirst());
    485521                    if (m.member instanceof Way) {
    486522                        Way w = (Way) m.member;
    487523                        endSearchNode = w.lastNode();
    488                         startSearchNode = w.firstNode();
     524                        if (w.lastNode() != w.firstNode())
     525                        {
     526                            startSearchNode = w.firstNode();
     527                        }
    489528                    } else if (m.member instanceof Node) {
    490529                        Node n = (Node) m.member;
     
    493532                } else {
    494533                    // add unused node of first element and unused node of last element
    495                     // start with the first element
    496                     RelationMember element = members.get(segment.getFirst());
    497                     RelationMember other_element = members.get(segment.get(1));
    498 
    499                     if (element.member instanceof Way) {
    500                         Way w = (Way) element.member;
    501                         if (other_element.member instanceof Way) {
    502                             Way x = (Way) other_element.member;
    503                             if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) {
    504                                 startSearchNode = w.lastNode();
    505                             } else {
    506                                 startSearchNode = w.firstNode();
    507                             }
    508                         } else if (other_element.member instanceof Node) {
    509                             Node m = (Node) other_element.member;
    510                             if (w.firstNode() == m) {
    511                                 startSearchNode = w.lastNode();
    512                             } else {
    513                                 startSearchNode = w.firstNode();
    514                             }
    515                         }
    516                     } else if (element.member instanceof Node) {
    517                         Node n = (Node) element.member;
    518                         startSearchNode = n;
    519                     }
    520 
    521                     // now the same for the last element
    522                     element = members.get(segment.getLast());
    523                     other_element = members.get(segment.get(segment.size() - 2));
    524 
    525                     if (element.member instanceof Way) {
    526                         Way w = (Way) element.member;
    527                         if (other_element.member instanceof Way) {
    528                             Way x = (Way) other_element.member;
    529                             if ((w.firstNode() == x.firstNode()) || (w.firstNode() == x.lastNode())) {
    530                                 endSearchNode = w.lastNode();
    531                             } else {
    532                                 endSearchNode = w.firstNode();
    533                             }
    534                         } else if (other_element.member instanceof Node) {
    535                             Node m = (Node) other_element.member;
    536                             if (w.firstNode() == m) {
    537                                 endSearchNode = w.lastNode();
    538                             } else {
    539                                 endSearchNode = w.firstNode();
    540                             }
    541                         }
    542                     } else if (element.member instanceof Node) {
    543                         Node n = (Node) element.member;
    544                         endSearchNode = n;
    545                     }
     534                    // start with the first element (compared to next element)
     535                    startSearchNode = getUnusedNode(members.get(segment.getFirst()), members.get(segment.get(1)));
     536
     537                    // now the same for the last element (compared to previous element)
     538                    endSearchNode = getUnusedNode(members.get(segment.getLast()), members.get(segment.get(segment.size() - 2)));
    546539                }
    547540
     
    566559
    567560        }
     561
    568562        if (segments.size() > 0) {
    569563            // append map.remaining() to segments list (as a single segment)
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationDialogManager.java

    r1856 r1857  
    119119        openDialogs.put(context, editor);
    120120        editor.addWindowListener(this);
     121    }
     122
     123    public void updateContext(OsmDataLayer layer, Relation relation, RelationEditor editor) {
     124        // lookup the entry for editor and remove it
     125        //
     126        for (DialogContext context: openDialogs.keySet()) {
     127            if (openDialogs.get(context) == editor) {
     128                openDialogs.remove(context);
     129                break;
     130            }
     131        }
     132        // don't add a window listener. Editor is already known to the relation dialog manager
     133        //
     134        DialogContext context = new DialogContext(layer, relation);
     135        openDialogs.put(context, editor);
    121136    }
    122137
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationEditor.java

    r1830 r1857  
    8989    }
    9090
    91     protected RelationEditor(OsmDataLayer layer, Relation relation, Collection<RelationMember> selectedMembers)
    92     {
     91    protected RelationEditor(OsmDataLayer layer, Relation relation, Collection<RelationMember> selectedMembers) {
    9392        // Initalizes ExtendedDialog
    9493        super(Main.parent,
    95                 relation == null
    96                 ? tr("Create new relation in layer ''{0}''", layer.getName())
    97                         : (relation.id == 0
    98                                 ? tr ("Edit new relation in layer ''{0}''", layer.getName())
    99                                         : tr("Edit relation #{0} in layer ''{1}''", relation.id, layer.getName())
    100                         ),
    101                         new String[] { tr("Apply Changes"), tr("Cancel")},
    102                         false
     94                "",
     95                new String[] { tr("Apply Changes"), tr("Cancel")},
     96                false
    10397        );
    104 
    105         this.relationSnapshot = (relation == null) ? null : new Relation(relation);
    106         this.relation = relation;
    10798        this.layer = layer;
     99        setRelation(relation);
    108100    }
    109101
     102    /**
     103     * updates the title of the relation editor
     104     */
     105    protected void updateTitle() {
     106        if (getRelation() == null) {
     107            setTitle(tr("Create new relation in layer ''{0}''", layer.getName()));
     108        } else if (getRelation().id == 0) {
     109            setTitle(tr("Edit new relation in layer ''{0}''", layer.getName()));
     110        } else {
     111            setTitle(tr("Edit relation #{0} in layer ''{1}''", relation.id, layer.getName()));
     112        }
     113    }
    110114    /**
    111115     * Replies the currently edited relation
     
    115119    protected Relation getRelation() {
    116120        return relation;
     121    }
     122
     123    /**
     124     * Sets the currently edited relation. Creates a snapshot of the current
     125     * state of the relation. See {@see #getRelationSnapshot()}
     126     *
     127     * @param relation the relation
     128     */
     129    protected void setRelation(Relation relation) {
     130        this.relationSnapshot = (relation == null) ? null : new Relation(relation);
     131        this.relation = relation;
     132        updateTitle();
    117133    }
    118134
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationNodeMap.java

    r1822 r1857  
    5757        if (m.member instanceof Way) {
    5858            Way w = (Way) m.member;
    59             if (!points.containsKey(w.firstNode())) {
    60                 points.put(w.firstNode(), new java.util.TreeSet<Integer>());
     59            if (w.lastNode() == w.firstNode())
     60            {
     61                nodes.put(w.firstNode(), Integer.valueOf(n));
    6162            }
    62             points.get(w.firstNode()).add(Integer.valueOf(n));
     63            else
     64            {
     65                if (!points.containsKey(w.firstNode())) {
     66                    points.put(w.firstNode(), new java.util.TreeSet<Integer>());
     67                }
     68                points.get(w.firstNode()).add(Integer.valueOf(n));
    6369
    64             if (!points.containsKey(w.lastNode())) {
    65                 points.put(w.lastNode(), new java.util.TreeSet<Integer>());
     70                if (!points.containsKey(w.lastNode())) {
     71                    points.put(w.lastNode(), new java.util.TreeSet<Integer>());
     72                }
     73                points.get(w.lastNode()).add(Integer.valueOf(n));
    6674            }
    67             points.get(w.lastNode()).add(Integer.valueOf(n));
    6875        } else if (m.member instanceof Node) {
    6976            Node node = (Node) m.member;
     
    7784        boolean result;
    7885        if (a.member instanceof Way) {
    79             result = points.get(((Way) a.member).firstNode()).remove(n);
    80             result &= points.get(((Way) a.member).lastNode()).remove(n);
     86            Way w = (Way) a.member;
     87            if (w.firstNode() == w.lastNode())
     88            {
     89                result = (nodes.remove(w.firstNode()) != null);
     90            }
     91            else
     92            {
     93                result = points.get(w.firstNode()).remove(n);
     94                result &= points.get(w.lastNode()).remove(n);
     95            }
    8196        } else {
    8297            result = (nodes.remove(a.member) != null);
  • trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java

    r1847 r1857  
    190190                catch (Exception x)
    191191                {
    192                     JOptionPane.showMessageDialog(Main.parent,tr("Cannot read place search results from server"));
    193192                    x.printStackTrace();
     193                    OptionPaneUtil.showMessageDialog(
     194                            Main.parent,
     195                            tr("Cannot read place search results from server"),
     196                            tr("Error"),
     197                            JOptionPane.ERROR_MESSAGE
     198                    );
    194199                }
    195200                component.setCursor(oldCursor);
  • trunk/src/org/openstreetmap/josm/io/NMEAImporter.java

    r1637 r1857  
    1212import org.openstreetmap.josm.Main;
    1313import org.openstreetmap.josm.actions.ExtensionFileFilter;
     14import org.openstreetmap.josm.gui.OptionPaneUtil;
    1415import org.openstreetmap.josm.gui.layer.GpxLayer;
    1516import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
     
    4243    private void showNmeaInfobox(boolean success, NmeaReader r) {
    4344        String msg = tr("Coordinates imported: ") + r.getNumberOfCoordinates() + "\n" + tr("Malformed sentences: ")
    44                 + r.getParserMalformed() + "\n" + tr("Checksum errors: ") + r.getParserChecksumErrors() + "\n";
    45         if (!success) // don't scare the user unneccessarily
     45        + r.getParserMalformed() + "\n" + tr("Checksum errors: ") + r.getParserChecksumErrors() + "\n";
     46        if (!success) {
    4647            msg += tr("Unknown sentences: ") + r.getParserUnknown() + "\n";
     48        }
    4749        msg += tr("Zero coordinates: ") + r.getParserZeroCoordinates();
    4850        if (success) {
    49             JOptionPane.showMessageDialog(Main.parent, msg, tr("NMEA import success"), JOptionPane.INFORMATION_MESSAGE);
     51            OptionPaneUtil.showMessageDialog(
     52                    Main.parent,
     53                    msg,
     54                    tr("NMEA import success"),
     55                    JOptionPane.INFORMATION_MESSAGE);
    5056        } else {
    51             JOptionPane.showMessageDialog(Main.parent, msg, tr("NMEA import faliure!"), JOptionPane.ERROR_MESSAGE);
     57            OptionPaneUtil.showMessageDialog(Main.parent, msg, tr("NMEA import faliure!"), JOptionPane.ERROR_MESSAGE);
    5258        }
    5359    }
Note: See TracChangeset for help on using the changeset viewer.