From 330f18409e989922f353928422ff742c60dea178 Mon Sep 17 00:00:00 2001 From: Taylor Smock Date: Sat, 21 Sep 2019 17:52:26 -0600 Subject: [PATCH] Only enable RapiD download button when there is a dataset Signed-off-by: Taylor Smock --- .../plugins/rapid/backend/RapiDAction.java | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/openstreetmap/josm/plugins/rapid/backend/RapiDAction.java b/src/main/java/org/openstreetmap/josm/plugins/rapid/backend/RapiDAction.java index 8df0667..2eefcc3 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/rapid/backend/RapiDAction.java +++ b/src/main/java/org/openstreetmap/josm/plugins/rapid/backend/RapiDAction.java @@ -26,24 +26,38 @@ public class RapiDAction extends JosmAction { @Override public void actionPerformed(ActionEvent event) { - final RapiDLayer layer = getLayer(); + final RapiDLayer layer = getLayer(true); getRapiDData(layer); } - public RapiDLayer getLayer() { + /** + * Get the first {@link RapiDLayer} that we can find. + * + * @param create true if we want to create a new layer + * @return A RapiDLayer, or a new RapiDLayer if none exist. May return + * {@code null} if {@code create} is {@code false}. + */ + public RapiDLayer getLayer(boolean create) { final List rapidLayers = MainApplication.getLayerManager().getLayersOfType(RapiDLayer.class); RapiDLayer layer; synchronized (this) { - if (rapidLayers.isEmpty()) { + if (rapidLayers.isEmpty() && create) { layer = new RapiDLayer(new DataSet(), RapiDPlugin.NAME, null); MainApplication.getLayerManager().addLayer(layer); - } else { + } else if (!rapidLayers.isEmpty()) { layer = rapidLayers.get(0); + } else { + layer = null; } } return layer; } + /** + * Get data for a {@link RapiDLayer} + * + * @param layer The {@link RapiDLayer} to add data to + */ public void getRapiDData(RapiDLayer layer) { final List osmLayers = MainApplication.getLayerManager().getLayersOfType(OsmDataLayer.class); for (final OsmDataLayer osmLayer : osmLayers) { @@ -53,6 +67,12 @@ public class RapiDAction extends JosmAction { } } + /** + * Get the data for RapiD + * + * @param layer A pre-existing {@link RapiDLayer} + * @param osmLayer The osm datalayer with a set of bounds + */ public void getRapiDData(RapiDLayer layer, OsmDataLayer osmLayer) { final DataSet editSet = osmLayer.getDataSet(); final List editSetBounds = editSet.getDataSourceBounds(); @@ -71,4 +91,13 @@ public class RapiDAction extends JosmAction { } } } + + @Override + protected void updateEnabledState() { + if (getLayerManager().getEditDataSet() == null) { + setEnabled(false); + } else { + setEnabled(true); + } + } }