Ignore:
Timestamp:
2019-10-02T23:11:24+02:00 (5 years ago)
Author:
Don-vip
Message:

fix #12669 - Disable upload and save buttons when not needed

File:
1 edited

Legend:

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

    r14397 r15404  
    77import java.awt.event.ActionEvent;
    88import java.awt.event.KeyEvent;
     9import java.beans.PropertyChangeListener;
    910import java.util.LinkedList;
    1011import java.util.List;
     
    2526import org.openstreetmap.josm.gui.HelpAwareOptionPane;
    2627import org.openstreetmap.josm.gui.MainApplication;
     28import org.openstreetmap.josm.gui.Notification;
    2729import org.openstreetmap.josm.gui.io.AsynchronousUploadPrimitivesTask;
    2830import org.openstreetmap.josm.gui.io.UploadDialog;
    2931import org.openstreetmap.josm.gui.io.UploadPrimitivesTask;
    3032import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer;
     33import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
     34import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
    3135import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3236import org.openstreetmap.josm.gui.util.GuiHelper;
     
    4145 * Action that opens a connection to the osm server and uploads all changes.
    4246 *
    43  * An dialog is displayed asking the user to specify a rectangle to grab.
     47 * A dialog is displayed asking the user to specify a rectangle to grab.
    4448 * The url and account settings from the preferences are used.
    4549 *
     
    9195    }
    9296
     97    private final PropertyChangeListener updateOnRequireUploadChange = evt -> {
     98        if (OsmDataLayer.REQUIRES_UPLOAD_TO_SERVER_PROP.equals(evt.getPropertyName())) {
     99            updateEnabledState();
     100        }
     101    };
     102
    93103    /**
    94104     * Registers an upload hook. Adds the hook at the first position of the upload hooks.
     
    146156
    147157    @Override
     158    protected LayerChangeAdapter buildLayerChangeAdapter() {
     159        return new LayerChangeAdapter() {
     160            @Override
     161            public void layerAdded(LayerAddEvent e) {
     162                if (e.getAddedLayer() instanceof OsmDataLayer) {
     163                    e.getAddedLayer().addPropertyChangeListener(updateOnRequireUploadChange);
     164                }
     165                super.layerAdded(e);
     166            }
     167
     168            @Override
     169            public void layerRemoving(LayerRemoveEvent e) {
     170                if (e.getRemovedLayer() instanceof OsmDataLayer) {
     171                    e.getRemovedLayer().removePropertyChangeListener(updateOnRequireUploadChange);
     172                }
     173                super.layerRemoving(e);
     174            }
     175        };
     176    }
     177
     178    @Override
    148179    protected void updateEnabledState() {
    149180        OsmDataLayer editLayer = getLayerManager().getEditLayer();
    150         setEnabled(editLayer != null && editLayer.isUploadable());
     181        setEnabled(editLayer != null && editLayer.requiresUploadToServer());
    151182    }
    152183
     
    232263    public void uploadData(final OsmDataLayer layer, APIDataSet apiData) {
    233264        if (apiData.isEmpty()) {
    234             JOptionPane.showMessageDialog(
    235                     MainApplication.getMainFrame(),
    236                     tr("No changes to upload."),
    237                     tr("Warning"),
    238                     JOptionPane.INFORMATION_MESSAGE
    239             );
     265            new Notification(tr("No changes to upload.")).show();
    240266            return;
    241267        }
     
    292318            return;
    293319        if (MainApplication.getMap() == null) {
    294             JOptionPane.showMessageDialog(
    295                     MainApplication.getMainFrame(),
    296                     tr("Nothing to upload. Get some data first."),
    297                     tr("Warning"),
    298                     JOptionPane.WARNING_MESSAGE
    299             );
     320            new Notification(tr("Nothing to upload. Get some data first.")).show();
    300321            return;
    301322        }
Note: See TracChangeset for help on using the changeset viewer.