Changeset 2315 in josm


Ignore:
Timestamp:
2009-10-25T13:58:47+01:00 (13 years ago)
Author:
Gubaer
Message:

fixed #3753: Merging the ends of two node ways produces corrupt way
Also extended help information. See help

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

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

    r2273 r2315  
    55import static org.openstreetmap.josm.gui.conflict.tags.TagConflictResolutionUtil.completeTagCollectionForEditing;
    66import static org.openstreetmap.josm.gui.conflict.tags.TagConflictResolutionUtil.normalizeTagCollectionBeforeEditing;
     7import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    78import static org.openstreetmap.josm.tools.I18n.tr;
    89
     
    2930import org.openstreetmap.josm.data.osm.Way;
    3031import org.openstreetmap.josm.data.osm.BackreferencedDataSet.RelationToChildReference;
     32import org.openstreetmap.josm.gui.DefaultNameFormatter;
     33import org.openstreetmap.josm.gui.HelpAwareOptionPane;
     34import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
    3135import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
    3236import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     37import org.openstreetmap.josm.tools.ImageProvider;
    3338import org.openstreetmap.josm.tools.Shortcut;
    34 
    35 
    3639/**
    3740 * Merges a collection of nodes into one node.
     
    161164                    waysToDelete.add(w);
    162165                } else {
    163                     JOptionPane.showMessageDialog(
     166                    ButtonSpec[] options = new ButtonSpec[] {
     167                            new ButtonSpec(
     168                                    tr("Abort Merging"),
     169                                    ImageProvider.get("cancel"),
     170                                    tr("Click to abort merging nodes"),
     171                                    null /* no special help topic */
     172                            )
     173                    };
     174                    HelpAwareOptionPane.showOptionDialog(
    164175                            Main.parent,
    165                             tr("Cannot merge nodes: " +
    166                             "Would have to delete a way that is still used."),
     176                            tr(
     177                                    "Cannot merge nodes: Would have to delete way ''{0}'' which is still used.",
     178                                    w.getDisplayName(DefaultNameFormatter.getInstance())
     179                            ),
    167180                            tr("Warning"),
    168                             JOptionPane.WARNING_MESSAGE
     181                            JOptionPane.WARNING_MESSAGE,
     182                            null, /* no icon */
     183                            options,
     184                            options[0],
     185                            ht("/Action/MergeNodes#WaysToDeleteStillInUse")
    169186                    );
    170187                    return null;
     
    178195            }
    179196        }
     197        cmds.add(new DeleteCommand(waysToDelete));
    180198        return cmds;
    181199    }
  • trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java

    r2303 r2315  
    77import java.awt.event.ActionEvent;
    88import java.awt.event.ActionListener;
     9import java.awt.event.KeyEvent;
    910import java.awt.event.WindowAdapter;
    1011import java.awt.event.WindowEvent;
     
    1213import java.util.List;
    1314
     15import javax.swing.AbstractAction;
    1416import javax.swing.Icon;
    1517import javax.swing.JButton;
     
    1719import javax.swing.JLabel;
    1820import javax.swing.JOptionPane;
    19 
    20 import org.openstreetmap.josm.gui.help.HelpBrowser;
     21import javax.swing.KeyStroke;
     22
    2123import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
    2224import org.openstreetmap.josm.gui.help.HelpUtil;
     
    4749    }
    4850
    49     static private class DefaultAction implements ActionListener {
     51    static private class DefaultAction extends AbstractAction {
    5052        private JDialog dialog;
    5153        private JOptionPane pane;
     
    5759            this.value = value;
    5860        }
     61
    5962        public void actionPerformed(ActionEvent e) {
    6063            pane.setValue(value);
     
    6366    }
    6467
     68    /**
     69     * Creates the list buttons to be displayed in the option pane dialog.
     70     *
     71     * @param options the option. If null, just creates an OK button and a help button
     72     * @param helpTopic the help topic. The context sensitive help of all buttons is equal
     73     * to the context sensitive help of the whole dialog
     74     * @return the list of buttons
     75     */
    6576    static private List<JButton> createOptionButtons(ButtonSpec[] options, String helpTopic) {
    6677        List<JButton> buttons = new ArrayList<JButton>();
    6778        if (options == null) {
    68             buttons.add(new JButton(tr("OK")));
     79            JButton b = new JButton(tr("OK"));
     80            b.setIcon(ImageProvider.get("ok"));
     81            b.setToolTipText(tr("Click to close the dialog"));
     82            b.setFocusable(true);
     83            buttons.add(b);
    6984        } else {
    7085            for (ButtonSpec spec: options) {
     
    7792                b.setFocusable(true);
    7893                buttons.add(b);
    79 
    8094            }
    8195        }
     
    8397    }
    8498
     99    /**
     100     * Creates the help button
     101     *
     102     * @param helpTopic the help topic
     103     * @return the help button
     104     */
    85105    static private JButton createHelpButton(final String helpTopic) {
    86106        JButton b = new JButton(tr("Help"));
     
    91111                new ActionListener() {
    92112                    public void actionPerformed(ActionEvent e) {
    93                         HelpBrowserProxy.getInstance().setUrlForHelpTopic(completeHelpTopic(helpTopic));
     113                        HelpBrowserProxy.getInstance().setUrlForHelpTopic(helpTopic);
    94114                    }
    95115                }
    96116        );
    97117        return b;
    98     }
    99 
    100     static private String completeHelpTopic(String helpTopic) {
    101         if (helpTopic == null) return null;
    102         if (! helpTopic.startsWith("/")) {
    103             helpTopic = "/" + helpTopic;
    104         }
    105         return "Help" + helpTopic;
    106118    }
    107119
     
    172184        dialog.addWindowListener(
    173185                new WindowAdapter() {
     186
    174187                    @Override
    175188                    public void windowClosing(WindowEvent e) {
     
    187200                                }
    188201                            }
    189                             if (i >= options.length) return; // default option not an option?
    190 
     202                            if (i >= options.length) {
     203                                buttons.get(0).requestFocusInWindow();
     204                            }
    191205                            buttons.get(i).requestFocusInWindow();
     206                        } else {
     207                            buttons.get(0).requestFocusInWindow();
    192208                        }
    193209                    }
     
    196212        if (options != null) {
    197213            for (int i=0; i < options.length;i++) {
    198                 buttons.get(i).addActionListener(new DefaultAction(dialog, pane, i));
     214                final DefaultAction action = new DefaultAction(dialog, pane, i);
     215                buttons.get(i).addActionListener(action);
     216                buttons.get(i).getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "enter");
     217                buttons.get(i).getActionMap().put("enter", action);
    199218            }
    200         }
     219        } else {
     220            final DefaultAction action = new DefaultAction(dialog, pane, 0);
     221            buttons.get(0).addActionListener(action);
     222            buttons.get(0).getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "enter");
     223            buttons.get(0).getActionMap().put("enter", action);
     224        }
     225
    201226        dialog.pack();
    202227        WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
Note: See TracChangeset for help on using the changeset viewer.