Ticket #20025: 20025.core.2.patch

File 20025.core.2.patch, 6.1 KB (added by taylor.smock, 4 years ago)

Add coloring to the Settings tab if the changeset tags have been programatically modified

  • src/org/openstreetmap/josm/actions/UploadAction.java

    diff --git a/src/org/openstreetmap/josm/actions/UploadAction.java b/src/org/openstreetmap/josm/actions/UploadAction.java
    index 9d085ae856..4c80c15f92 100644
    a b import static org.openstreetmap.josm.tools.I18n.tr;  
    66
    77import java.awt.event.ActionEvent;
    88import java.awt.event.KeyEvent;
     9import java.util.HashMap;
    910import java.util.LinkedList;
    1011import java.util.List;
    1112import java.util.Map;
    public class UploadAction extends AbstractUploadAction {  
    242243        final UploadDialog dialog = UploadDialog.getUploadDialog();
    243244        dialog.setUploadedPrimitives(apiData);
    244245        dialog.initLifeCycle(layer.getDataSet());
     246        Map<String, String> changesetTags = dialog.getChangeset().getKeys();
     247        Map<String, String> originalChangesetTags = new HashMap<>(changesetTags);
     248        for (UploadHook hook : UPLOAD_HOOKS) {
     249            hook.modifyChangesetTags(changesetTags);
     250        }
     251        dialog.getModel().putAll(changesetTags);
     252        if (!originalChangesetTags.equals(changesetTags)) {
     253            dialog.setChangesetTagsModifiedProgramatically();
     254        }
    245255        dialog.setVisible(true);
    246256        dialog.rememberUserInput();
    247257        if (dialog.isCanceled()) {
    public class UploadAction extends AbstractUploadAction {  
    258268
    259269        // Any hooks want to change the changeset tags?
    260270        Changeset cs = dialog.getChangeset();
    261         Map<String, String> changesetTags = cs.getKeys();
    262         for (UploadHook hook : UPLOAD_HOOKS) {
    263             hook.modifyChangesetTags(changesetTags);
    264         }
     271        changesetTags = cs.getKeys();
    265272        for (UploadHook hook : LATE_UPLOAD_HOOKS) {
    266273            hook.modifyChangesetTags(changesetTags);
    267274        }
  • src/org/openstreetmap/josm/gui/io/UploadDialog.java

    diff --git a/src/org/openstreetmap/josm/gui/io/UploadDialog.java b/src/org/openstreetmap/josm/gui/io/UploadDialog.java
    index 94b852d758..9eb21ecea2 100644
    a b  
    22package org.openstreetmap.josm.gui.io;
    33
    44import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
     5import static org.openstreetmap.josm.tools.I18n.marktr;
    56import static org.openstreetmap.josm.tools.I18n.tr;
    67import static org.openstreetmap.josm.tools.I18n.trn;
    78
    89import java.awt.BorderLayout;
     10import java.awt.Color;
    911import java.awt.Component;
    1012import java.awt.Dimension;
    1113import java.awt.FlowLayout;
    import javax.swing.JOptionPane;  
    3335import javax.swing.JPanel;
    3436import javax.swing.JSplitPane;
    3537import javax.swing.JTabbedPane;
     38import javax.swing.event.TableModelListener;
    3639
    3740import org.openstreetmap.josm.data.APIDataSet;
    3841import org.openstreetmap.josm.data.osm.Changeset;
    3942import org.openstreetmap.josm.data.osm.DataSet;
    4043import org.openstreetmap.josm.data.osm.OsmPrimitive;
     44import org.openstreetmap.josm.data.preferences.NamedColorProperty;
    4145import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    4246import org.openstreetmap.josm.gui.MainApplication;
    4347import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
    import org.openstreetmap.josm.tools.Utils;  
    6468 * @since 2025
    6569 */
    6670public class UploadDialog extends AbstractUploadDialog implements PreferenceChangedListener, PropertyChangeListener {
     71    /** A warning color to indicate something is non-default in the changeset tags */
     72    private static final Color WARNING_BACKGROUND = new NamedColorProperty(
     73            marktr("Changesets: Non-default advanced settings"), new Color(0xF89042)).get();
    6774    /** the unique instance of the upload dialog */
    6875    private static UploadDialog uploadDialog;
    6976
    public class UploadDialog extends AbstractUploadDialog implements PreferenceChan  
    8996    private final transient UploadDialogModel model = new UploadDialogModel();
    9097
    9198    private transient DataSet dataSet;
     99    private TableModelListener changesetTagListener;
    92100
    93101    /**
    94102     * Constructs a new {@code UploadDialog}.
    public class UploadDialog extends AbstractUploadDialog implements PreferenceChan  
    147155        pnlSettings.add(pnlUploadStrategySelectionPanel, GBC.eop().fill(GridBagConstraints.HORIZONTAL));
    148156        pnlSettings.add(pnlTagEditorBorder, GBC.eol().fill(GridBagConstraints.BOTH));
    149157
     158        // if another tab is added, please don't forget to update setChangesetTagsModifiedProgramatically
    150159        tpConfigPanels.add(pnlSettings);
    151160        tpConfigPanels.setTitleAt(1, tr("Settings"));
    152161        tpConfigPanels.setToolTipTextAt(1, tr("Decide how to upload the data and which changeset to use"));
    public class UploadDialog extends AbstractUploadDialog implements PreferenceChan  
    354363        super.setVisible(visible);
    355364    }
    356365
     366    /**
     367     * This is called by {@link UploadAction} if {@link org.openstreetmap.josm.actions.upload.UploadHook}s change
     368     * the changeset tags.
     369     */
     370    public void setChangesetTagsModifiedProgramatically() {
     371        final Color originalColor = this.tpConfigPanels.getBackgroundAt(1);
     372        this.tpConfigPanels.setBackgroundAt(1, WARNING_BACKGROUND);
     373        if (this.changesetTagListener != null) {
     374            this.model.removeTableModelListener(this.changesetTagListener);
     375        }
     376        this.changesetTagListener = event -> {
     377            tpConfigPanels.setBackgroundAt(1, originalColor);
     378            this.model.removeTableModelListener(changesetTagListener);
     379            changesetTagListener = null;
     380        };
     381
     382        this.model.addTableModelListener(this.changesetTagListener);
     383    }
     384
    357385    static final class CompactTabbedPane extends JTabbedPane {
    358386        @Override
    359387        public Dimension getPreferredSize() {
    public class UploadDialog extends AbstractUploadDialog implements PreferenceChan  
    606634    public void clean() {
    607635        setUploadedPrimitives(null);
    608636        dataSet = null;
     637        if (this.changesetTagListener != null) {
     638            this.changesetTagListener.tableChanged(null);
     639            this.model.removeTableModelListener(this.changesetTagListener);
     640            this.changesetTagListener = null;
     641        }
    609642    }
    610643}