Changeset 2301 in josm


Ignore:
Timestamp:
2009-10-24T07:30:45+02:00 (10 years ago)
Author:
Gubaer
Message:

fixed #3765: Unable to resolve conflict
Improved warning message for conflicting relation versions and added help page

Location:
trunk/src/org/openstreetmap/josm
Files:
10 edited
1 moved

Legend:

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

    r2070 r2301  
    5555    public boolean executeCommand() {
    5656        super.executeCommand();
    57         conflict.getMy().setOsmId(
    58                 conflict.getMy().getId(),
    59                 (int)Math.max(conflict.getMy().getVersion(), conflict.getTheir().getVersion())
    60         );
     57        if (!conflict.getMy().isNew()) {
     58            conflict.getMy().setOsmId(
     59                    conflict.getMy().getId(),
     60                    (int)Math.max(conflict.getMy().getVersion(), conflict.getTheir().getVersion())
     61            );
     62        }
    6163        getLayer().getConflicts().remove(conflict);
    6264        rememberConflict(conflict);
  • trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java

    r2285 r2301  
    2424import org.openstreetmap.josm.Main;
    2525import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
    26 import org.openstreetmap.josm.gui.help.HelpBuilder;
     26import org.openstreetmap.josm.gui.help.HelpUtil;
    2727import org.openstreetmap.josm.tools.GBC;
    2828import org.openstreetmap.josm.tools.ImageProvider;
     
    218218        if (showHelpButton) {
    219219            buttonsPanel.add(new JButton(new HelpAction()), GBC.std().insets(2,2,2,2));
    220             HelpBuilder.setHelpContext(getRootPane(),helpTopic);
     220            HelpUtil.setHelpContext(getRootPane(),helpTopic);
    221221        }
    222222
  • trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java

    r2255 r2301  
    1818
    1919import org.openstreetmap.josm.gui.help.HelpBrowser;
    20 import org.openstreetmap.josm.gui.help.HelpBuilder;
     20import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
     21import org.openstreetmap.josm.gui.help.HelpUtil;
    2122import org.openstreetmap.josm.tools.ImageProvider;
    2223import org.openstreetmap.josm.tools.WindowGeometry;
     
    6162    }
    6263
     64    static private List<JButton> createOptionButtons(ButtonSpec[] options, String helpTopic) {
     65        List<JButton> buttons = new ArrayList<JButton>();
     66        if (options == null) {
     67            buttons.add(new JButton(tr("OK")));
     68        } else {
     69            for (ButtonSpec spec: options) {
     70                JButton b = new JButton(spec.text);
     71                b.setIcon(spec.icon);
     72                b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
     73                if (helpTopic != null) {
     74                    HelpUtil.setHelpContext(b, helpTopic);
     75                }
     76                b.setFocusable(true);
     77                buttons.add(b);
     78
     79            }
     80        }
     81        return buttons;
     82    }
     83
     84    static private JButton createHelpButton(final String helpTopic) {
     85        JButton b = new JButton(tr("Help"));
     86        b.setIcon(ImageProvider.get("help"));
     87        b.setToolTipText(tr("Show help information"));
     88        HelpUtil.setHelpContext(b, helpTopic);
     89        b.addActionListener(
     90                new ActionListener() {
     91                    public void actionPerformed(ActionEvent e) {
     92                        HelpBrowserProxy.getInstance().setUrlForHelpTopic(completeHelpTopic(helpTopic));
     93                    }
     94                }
     95        );
     96        return b;
     97    }
     98
     99    static private String completeHelpTopic(String helpTopic) {
     100        if (helpTopic == null) return null;
     101        if (! helpTopic.startsWith("/")) {
     102            helpTopic = "/" + helpTopic;
     103        }
     104        return "Help" + helpTopic;
     105    }
     106
    63107    /**
    64108     * Displays an option dialog which is aware of a help context. If <code>helpTopic</code> isn't null,
     
    67111     * browser.
    68112     *
     113     * <code>helpTopic</code> is the trailing part of a JOSM online help URL, i.e. the part after the leading
     114     * <code>http://josm.openstreetmap.de/wiki/Help</code>. It should start with a leading '/' and it
     115     * may include and anchor after a '#'.
     116     *
     117     * <strong>Examples</strong>
     118     * <ul>
     119     *    <li>/Dialogs/RelationEditor</li>
     120     *    <li>/Dialogs/RelationEditor#ConflictInData</li>
     121     * </ul>
     122     *
    69123     * In addition, the option buttons display JOSM icons, similar to ExtendedDialog.
    70124     *
     
    79133     * @return the index of the selected option or {@link JOptionPane#CLOSED_OPTION}
    80134     */
    81     static public int showOptionDialog(Component parentComponent, Object msg, String title, int messageType, Icon icon, ButtonSpec[] options, Object defaultOption, final String helpTopic)  {
    82         List<JButton> buttons = new ArrayList<JButton>();
    83 
    84         if (options == null) {
    85             buttons.add(new JButton(tr("OK")));
    86         } else {
    87             for (ButtonSpec spec: options) {
    88                 JButton b = new JButton(spec.text);
    89                 b.setIcon(spec.icon);
    90                 b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
    91                 if (helpTopic != null) {
    92                     HelpBuilder.setHelpContext(b, helpTopic);
    93                 }
    94                 buttons.add(b);
    95 
    96             }
    97         }
     135    static public int showOptionDialog(Component parentComponent, Object msg, String title, int messageType, Icon icon, final ButtonSpec[] options, final ButtonSpec defaultOption, final String helpTopic)  {
     136        final List<JButton> buttons = createOptionButtons(options, helpTopic);
    98137        if (helpTopic != null) {
    99             JButton b = new JButton(tr("Help"));
    100             b.setIcon(ImageProvider.get("help"));
    101             b.setToolTipText(tr("Show help information"));
    102             HelpBuilder.setHelpContext(b, helpTopic);
    103             b.addActionListener(
    104                     new ActionListener() {
    105                         public void actionPerformed(ActionEvent e) {
    106                             HelpBrowser browser = new HelpBrowser();
    107                             browser.setUrlForHelpTopic("Help/" + helpTopic);
    108                             browser.setVisible(true);
    109                         }
    110                     }
    111             );
    112             buttons.add(b);
     138            buttons.add(createHelpButton(helpTopic));
    113139        }
    114140
     
    145171                        super.windowClosed(e);
    146172                    }
     173
     174                    @Override
     175                    public void windowOpened(WindowEvent e) {
     176                        if (defaultOption != null && options != null && options.length > 0) {
     177                            int i;
     178                            for (i=0; i<options.length;i++) {
     179                                if (options[i] == defaultOption) {
     180                                    break;
     181                                }
     182                            }
     183                            if (i >= options.length) return; // default option not an option?
     184
     185                            buttons.get(i).requestFocusInWindow();
     186                        }
     187                    }
    147188                }
    148189        );
     
    155196        WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
    156197        if (helpTopic != null) {
    157             HelpBuilder.setHelpContext(dialog.getRootPane(), helpTopic);
     198            HelpUtil.setHelpContext(dialog.getRootPane(), helpTopic);
    158199        }
    159200        dialog.setVisible(true);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r2255 r2301  
    4646import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    4747import org.openstreetmap.josm.gui.SideButton;
    48 import org.openstreetmap.josm.gui.help.HelpBuilder;
     48import org.openstreetmap.josm.gui.help.HelpUtil;
    4949import org.openstreetmap.josm.gui.layer.Layer;
    5050import org.openstreetmap.josm.gui.layer.OsmDataLayer;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java

    r2274 r2301  
    3030import org.openstreetmap.josm.gui.help.HelpBrowser;
    3131import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
    32 import org.openstreetmap.josm.gui.help.HelpBuilder;
     32import org.openstreetmap.josm.gui.help.HelpUtil;
    3333import org.openstreetmap.josm.tools.ImageProvider;
    3434
     
    150150
    151151        resolver.addPropertyChangeListener(this);
    152         HelpBuilder.setHelpContext(this.getRootPane(), "Dialog/ConflictDialog");
     152        HelpUtil.setHelpContext(this.getRootPane(), "Dialog/ConflictDialog");
    153153    }
    154154
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r2240 r2301  
    2121import javax.swing.JPanel;
    2222import javax.swing.JScrollPane;
     23import javax.swing.KeyStroke;
    2324import javax.swing.ListSelectionModel;
    2425import javax.swing.SwingUtilities;
     
    115116        buttonPanel.add(new SideButton(selectAction), GBC.eol());
    116117
    117 
    118118        add(buttonPanel, BorderLayout.SOUTH);
     119        displaylist.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "deleteRelation");
     120        displaylist.getActionMap().put("deleteRelation", deleteAction);
    119121
    120122        // register as layer listener
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r2255 r2301  
    3030import org.openstreetmap.josm.actions.JosmAction;
    3131import org.openstreetmap.josm.gui.dialogs.DialogsPanel.Action;
    32 import org.openstreetmap.josm.gui.help.HelpBuilder;
     32import org.openstreetmap.josm.gui.help.HelpUtil;
    3333import org.openstreetmap.josm.gui.help.Helpful;
    3434import org.openstreetmap.josm.tools.GBC;
     
    381381            }
    382382            setTitle(titleBar.getTitle());
    383             HelpBuilder.setHelpContext(getRootPane(), helpTopic());
     383            HelpUtil.setHelpContext(getRootPane(), helpTopic());
    384384        }
    385385
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

    r2273 r2301  
    6464import org.openstreetmap.josm.gui.DefaultNameFormatter;
    6565import org.openstreetmap.josm.gui.ExceptionDialogUtil;
     66import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    6667import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    6768import org.openstreetmap.josm.gui.SideButton;
     69import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
    6870import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    6971import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
     
    8789
    8890    static private final Logger logger = Logger.getLogger(GenericRelationEditor.class.getName());
    89     static private final Dimension DEFAULT_EDITOR_DIMENSION = new Dimension(700, 500);
    9091
    9192    /** the tag table and its model */
     
    592593            );
    593594            switch(ret) {
    594             case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
    595             case JOptionPane.CLOSED_OPTION: return;
    596             case JOptionPane.NO_OPTION: return;
    597             case JOptionPane.YES_OPTION:
    598                 memberTableModel.removeMembersReferringTo(toCheck);
    599                 break;
     595                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
     596                case JOptionPane.CLOSED_OPTION: return;
     597                case JOptionPane.NO_OPTION: return;
     598                case JOptionPane.YES_OPTION:
     599                    memberTableModel.removeMembersReferringTo(toCheck);
     600                    break;
    600601            }
    601602        }
     
    628629            );
    629630            switch(ret) {
    630             case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
    631             case JOptionPane.YES_OPTION: return true;
    632             case JOptionPane.NO_OPTION: return false;
    633             case JOptionPane.CLOSED_OPTION: return false;
    634             case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
     631                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
     632                case JOptionPane.YES_OPTION: return true;
     633                case JOptionPane.NO_OPTION: return false;
     634                case JOptionPane.CLOSED_OPTION: return false;
     635                case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
    635636            }
    636637            // should not happen
     
    10461047
    10471048        protected boolean confirmClosingBecauseOfDirtyState() {
    1048             String [] options = new String[] {
    1049                     tr("Yes, create a conflict and close"),
    1050                     tr("No, continue editing")
     1049            ButtonSpec [] options = new ButtonSpec[] {
     1050                    new ButtonSpec(
     1051                            tr("Yes, create a conflict and close"),
     1052                            ImageProvider.get("ok"),
     1053                            tr("Click to create a conflict and close this relation editor") ,
     1054                            null /* no specific help topic */
     1055                    ),
     1056                    new ButtonSpec(
     1057                            tr("No, continue editing"),
     1058                            ImageProvider.get("cancel"),
     1059                            tr("Click to to return to the relation editor and to resume relation editing") ,
     1060                            null /* no specific help topic */
     1061                    )
    10511062            };
    1052             int ret = JOptionPane.showOptionDialog(
     1063
     1064            int ret = HelpAwareOptionPane.showOptionDialog(
    10531065                    Main.parent,
    10541066                    tr("<html>This relation has been changed outside of the editor.<br>"
     
    10571069                            + "Do you want to create a conflict and close the editor?</html>"),
    10581070                            tr("Conflict in data"),
    1059                             JOptionPane.YES_NO_OPTION,
    10601071                            JOptionPane.WARNING_MESSAGE,
    10611072                            null,
    10621073                            options,
    1063                             options[0]
     1074                            options[0], // OK is default
     1075                            "/Dialog/RelationEditor#RelationChangedOutsideOfEditor"
    10641076            );
    1065             switch(ret) {
    1066             case JOptionPane.CANCEL_OPTION: return false;
    1067             case JOptionPane.YES_OPTION: return true;
    1068             case JOptionPane.NO_OPTION: return false;
    1069             }
    1070             return false;
     1077            return ret == 0;
    10711078        }
    10721079
     
    12401247            );
    12411248            switch(ret) {
    1242             case JOptionPane.YES_OPTION: return true;
    1243             case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
    1244             default:
    1245                 return false;
     1249                case JOptionPane.YES_OPTION: return true;
     1250                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
     1251                default:
     1252                    return false;
    12461253            }
    12471254        }
  • trunk/src/org/openstreetmap/josm/gui/help/HelpUtil.java

    r2300 r2301  
    99import org.openstreetmap.josm.Main;
    1010
    11 public class HelpBuilder {
     11public class HelpUtil {
    1212
    1313    /**
    14      * Makes a component aware of context sensitive help
     14     * Makes a component aware of context sensitive help.
    1515     *
    1616     * @param component the component
     
    2222        component.putClientProperty("help", topic);
    2323    }
     24
    2425}
  • trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java

    r2289 r2301  
    5353import org.openstreetmap.josm.gui.SideButton;
    5454import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
    55 import org.openstreetmap.josm.gui.help.HelpBuilder;
     55import org.openstreetmap.josm.gui.help.HelpUtil;
    5656import org.openstreetmap.josm.gui.tagging.TagEditorModel;
    5757import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
     
    194194
    195195        pnl.add(new SideButton(new ContextSensitiveHelpAction("/Help/Dialogs/UploadDialog")));
    196         HelpBuilder.setHelpContext(getRootPane(),"/Help/Dialogs/UploadDialog");
     196        HelpUtil.setHelpContext(getRootPane(),"/Help/Dialogs/UploadDialog");
    197197        return pnl;
    198198    }
  • trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r2274 r2301  
    6666import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    6767import org.openstreetmap.josm.gui.help.HelpBrowser;
    68 import org.openstreetmap.josm.gui.help.HelpBuilder;
     68import org.openstreetmap.josm.gui.help.HelpUtil;
    6969import org.openstreetmap.josm.tools.DateUtils;
    7070import org.openstreetmap.josm.tools.GBC;
     
    383383            dialog.setContentPane(pane);
    384384            dialog.pack();
    385             HelpBuilder.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
     385            HelpUtil.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
    386386            WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
    387387            dialog.setVisible(true);
Note: See TracChangeset for help on using the changeset viewer.