Ignore:
Timestamp:
2017-08-28T14:44:23+02:00 (4 years ago)
Author:
Don-vip
Message:

see #15182 - transfer GUI dependencies from tools.TextTagParser to gui.datatransfer.importers.TextTagPaster

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/TextTagPaster.java

    r12620 r12683  
    33
    44import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
     5import static org.openstreetmap.josm.tools.I18n.tr;
    56
     7import java.awt.GridBagLayout;
    68import java.awt.datatransfer.DataFlavor;
    79import java.awt.datatransfer.UnsupportedFlavorException;
     
    911import java.util.Map;
    1012
     13import javax.swing.JLabel;
     14import javax.swing.JOptionPane;
     15import javax.swing.JPanel;
    1116import javax.swing.TransferHandler.TransferSupport;
    1217
     18import org.openstreetmap.josm.Main;
     19import org.openstreetmap.josm.gui.ExtendedDialog;
     20import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
     21import org.openstreetmap.josm.gui.help.HelpUtil;
     22import org.openstreetmap.josm.gui.widgets.UrlLabel;
     23import org.openstreetmap.josm.io.XmlWriter;
     24import org.openstreetmap.josm.tools.GBC;
     25import org.openstreetmap.josm.tools.LanguageInfo.LocaleType;
    1326import org.openstreetmap.josm.tools.Logging;
    1427import org.openstreetmap.josm.tools.TextTagParser;
     28import org.openstreetmap.josm.tools.TextTagParser.TagWarningCallback;
    1529
    1630/**
     
    4761        Map<String, String> tags = getTagsImpl(support);
    4862        if (tags.isEmpty()) {
    49             TextTagParser.showBadBufferMessage(HELP);
     63            showBadBufferMessage(HELP);
    5064            throw new IOException("Invalid tags to paste.");
    5165        }
    52         if (!TextTagParser.validateTags(tags)) {
     66        if (!TextTagParser.validateTags(tags, TextTagPaster::warning)) {
    5367            throw new IOException("Tags to paste are not valid.");
    5468        }
     
    5973        return TextTagParser.readTagsFromText((String) support.getTransferable().getTransferData(df));
    6074    }
     75
     76    /**
     77     * Default {@link TagWarningCallback} implementation.
     78     * Displays a warning about a problematic tag and ask user what to do about it.
     79     * @param text Message to display
     80     * @param data Tag key and/or value
     81     * @param code to use with {@code ExtendedDialog#toggleEnable(String)}
     82     * @return 1 to validate and display next warnings if any, 2 to cancel operation, 3 to clear buffer, 4 to paste tags
     83     * @since 12683
     84     */
     85    public static int warning(String text, String data, String code) {
     86        ExtendedDialog ed = new ExtendedDialog(
     87                    Main.parent,
     88                    tr("Do you want to paste these tags?"),
     89                    tr("Ok"), tr("Cancel"), tr("Clear buffer"), tr("Ignore warnings"));
     90        ed.setButtonIcons("ok", "cancel", "dialogs/delete", "pastetags");
     91        ed.setContent("<html><b>"+text + "</b><br/><br/><div width=\"300px\">"+XmlWriter.encode(data, true)+"</html>");
     92        ed.setDefaultButton(2);
     93        ed.setCancelButton(2);
     94        ed.setIcon(JOptionPane.WARNING_MESSAGE);
     95        ed.toggleEnable(code);
     96        ed.showDialog();
     97        int r = ed.getValue();
     98        if (r == 0) r = 2;
     99        // clean clipboard if user asked
     100        if (r == 3) ClipboardUtils.copyString("");
     101        return r;
     102    }
     103
     104    /**
     105     * Shows message that the buffer can not be pasted, allowing user to clean the buffer
     106     * @param helpTopic the help topic of the parent action
     107     * TODO: Replace by proper HelpAwareOptionPane instead of self-made help link
     108     */
     109    public static void showBadBufferMessage(String helpTopic) {
     110        String msg = tr("<html><p> Sorry, it is impossible to paste tags from buffer. It does not contain any JOSM object"
     111            + " or suitable text. </p></html>");
     112        JPanel p = new JPanel(new GridBagLayout());
     113        p.add(new JLabel(msg), GBC.eop());
     114        String helpUrl = HelpUtil.getHelpTopicUrl(HelpUtil.buildAbsoluteHelpTopic(helpTopic, LocaleType.DEFAULT));
     115        if (helpUrl != null) {
     116            p.add(new UrlLabel(helpUrl), GBC.eop());
     117        }
     118
     119        ExtendedDialog ed = new ExtendedDialog(
     120                    Main.parent,
     121                    tr("Warning"),
     122                    tr("Ok"), tr("Clear buffer"))
     123            .setButtonIcons("ok", "dialogs/delete")
     124            .setContent(p)
     125            .setDefaultButton(1)
     126            .setCancelButton(1)
     127            .setIcon(JOptionPane.WARNING_MESSAGE)
     128            .toggleEnable("tags.paste.cleanbadbuffer");
     129
     130        ed.showDialog();
     131
     132        // clean clipboard if user asked
     133        if (ed.getValue() == 2) ClipboardUtils.copyString("");
     134    }
    61135}
Note: See TracChangeset for help on using the changeset viewer.