diff --git a/docs/Changelog.md b/docs/Changelog.md index dff32919..1e461c6d 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -11,6 +11,7 @@ - OkHttp external cache [#135](https://github.com/mapsforge/vtm/issues/135) - Texture atlas improvements [#301](https://github.com/mapsforge/vtm/pull/301) [#304](https://github.com/mapsforge/vtm/pull/304) - vtm-ios-example module [#326](https://github.com/mapsforge/vtm/issues/326) +- Handle layers enabled state [#342](https://github.com/mapsforge/vtm/issues/342) - Gretty plugin at web modules [#338](https://github.com/mapsforge/vtm/issues/338) - Many other minor improvements and bug fixes - [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.8.0) diff --git a/vtm-gdx/src/org/oscim/gdx/InputHandler.java b/vtm-gdx/src/org/oscim/gdx/InputHandler.java index 505ef85f..32c316fb 100644 --- a/vtm-gdx/src/org/oscim/gdx/InputHandler.java +++ b/vtm-gdx/src/org/oscim/gdx/InputHandler.java @@ -1,5 +1,7 @@ /* + * Copyright 2013 Hannes Janetzek * Copyright 2016-2017 devemux86 + * Copyright 2017 Longri * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -26,7 +28,6 @@ import org.oscim.layers.GroupLayer; import org.oscim.layers.Layer; import org.oscim.layers.TileGridLayer; import org.oscim.layers.tile.buildings.BuildingLayer; -import org.oscim.map.Layers; import org.oscim.map.Map; import org.oscim.map.ViewController; import org.oscim.theme.VtmThemes; @@ -160,38 +161,6 @@ public class InputHandler implements InputProcessor { return false; } - private boolean toggleBuildingLayer(Layers layers) { - //search building layer - for (Layer l : layers) { - if (l instanceof BuildingLayer) { - l.setEnabled(!l.isEnabled()); - return true; - } else if (l instanceof GroupLayer) { - if (toggleBuildingLayer(((GroupLayer) l).layers)) { - return true; - } - } - } - return false; - } - - private boolean toggleBuildingLayer(List layers) { - for (Layer l : layers) { - if (l instanceof BuildingLayer) { - l.setEnabled(!l.isEnabled()); - return true; - } else if (l instanceof GroupLayer) { - if (toggleBuildingLayer(((GroupLayer) l).layers)) { - return true; - } - } - } - return false; - } - - ; - - @Override public boolean keyUp(int keycode) { switch (keycode) { @@ -285,4 +254,18 @@ public class InputHandler implements InputProcessor { mMap.updateMap(false); return true; } + + private boolean toggleBuildingLayer(List layers) { + for (Layer layer : layers) { + if (layer instanceof BuildingLayer) { + layer.setEnabled(!layer.isEnabled()); + return true; + } else if (layer instanceof GroupLayer) { + if (toggleBuildingLayer(((GroupLayer) layer).layers)) { + return true; + } + } + } + return false; + } } diff --git a/vtm/src/org/oscim/layers/GroupLayer.java b/vtm/src/org/oscim/layers/GroupLayer.java index b55bbd0f..f3bceae2 100644 --- a/vtm/src/org/oscim/layers/GroupLayer.java +++ b/vtm/src/org/oscim/layers/GroupLayer.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 devemux86 + * Copyright 2016-2017 devemux86 * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free Software @@ -39,4 +39,11 @@ public class GroupLayer extends Layer { layer.onDetach(); } } + + @Override + public void setEnableHandler(EnableHandler handler) { + for (Layer layer : layers) { + layer.setEnableHandler(handler); + } + } } diff --git a/vtm/src/org/oscim/layers/Layer.java b/vtm/src/org/oscim/layers/Layer.java index 4540dc37..5df00135 100644 --- a/vtm/src/org/oscim/layers/Layer.java +++ b/vtm/src/org/oscim/layers/Layer.java @@ -1,5 +1,7 @@ /* * Copyright 2013 Hannes Janetzek + * Copyright 2017 Longri + * Copyright 2017 devemux86 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -21,17 +23,13 @@ import org.oscim.renderer.LayerRenderer; public abstract class Layer { - public interface EnableChangeHandler{ - void changed(boolean enabled); - } - public Layer(Map map) { mMap = map; } private boolean mEnabled = true; + private EnableHandler mHandler; protected final Map mMap; - private EnableChangeHandler handler; protected LayerRenderer mRenderer; @@ -48,19 +46,16 @@ public abstract class Layer { public void setEnabled(boolean enabled) { boolean changed = mEnabled != enabled; mEnabled = enabled; - if (changed && this.handler != null) this.handler.changed(mEnabled); + if (mHandler != null && changed) + mHandler.changed(enabled); } public boolean isEnabled() { return mEnabled; } - public void setChangeHandler(EnableChangeHandler handler) { - this.handler = handler; - } - - public void removeEnabledChangeHandler() { - this.handler = null; + public void setEnableHandler(EnableHandler handler) { + mHandler = handler; } /** @@ -72,4 +67,8 @@ public abstract class Layer { public Map map() { return mMap; } + + public interface EnableHandler { + void changed(boolean enabled); + } } diff --git a/vtm/src/org/oscim/map/Layers.java b/vtm/src/org/oscim/map/Layers.java index 96419783..a67e55f8 100644 --- a/vtm/src/org/oscim/map/Layers.java +++ b/vtm/src/org/oscim/map/Layers.java @@ -1,7 +1,8 @@ /* * Copyright 2013 Hannes Janetzek - * Copyright 2016 devemux86 + * Copyright 2016-2017 devemux86 * Copyright 2016 Andrey Novikov + * Copyright 2017 Longri * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -36,6 +37,7 @@ import java.util.concurrent.CopyOnWriteArrayList; public final class Layers extends AbstractList { private final Map mMap; + private final Layer.EnableHandler mEnableHandler; private final List mLayerList = new CopyOnWriteArrayList<>(); private final List mGroupList = new ArrayList<>(); @@ -47,8 +49,15 @@ public final class Layers extends AbstractList { Layers(Map map) { mMap = map; + mEnableHandler = new Layer.EnableHandler() { + @Override + public void changed(boolean enabled) { + mDirtyLayers = true; + } + }; } + @Override public synchronized Layer get(int index) { return mLayerList.get(index); @@ -81,41 +90,11 @@ public final class Layers extends AbstractList { } } - layer.setChangeHandler(layerEnabledChangeHandler); - if(layer instanceof GroupLayer){ - addEnableChangeHandlerToGroupLayer((GroupLayer) layer); - } + layer.setEnableHandler(mEnableHandler); mLayerList.add(index, layer); mDirtyLayers = true; } - private void addEnableChangeHandlerToGroupLayer(GroupLayer gl){ - for (Layer l: gl.layers){ - if(l instanceof GroupLayer){ - addEnableChangeHandlerToGroupLayer((GroupLayer)l); - }else{ - l.setChangeHandler(layerEnabledChangeHandler); - } - } - } - - private void removeEnableChangeHandlerToGroupLayer(GroupLayer gl){ - for (Layer l: gl.layers){ - if(l instanceof GroupLayer){ - removeEnableChangeHandlerToGroupLayer((GroupLayer)l); - }else{ - l.removeEnabledChangeHandler(); - } - } - } - - private final Layer.EnableChangeHandler layerEnabledChangeHandler = new Layer.EnableChangeHandler() { - @Override - public void changed(boolean enabled) { - mDirtyLayers = true; - } - }; - /** * Add using layer groups. */ @@ -145,7 +124,6 @@ public final class Layers extends AbstractList { Layer remove = mLayerList.remove(index); // unbind removed layer - remove.removeEnabledChangeHandler(); if (remove instanceof UpdateListener) mMap.events.unbind((UpdateListener) remove); if (remove instanceof InputListener) @@ -160,7 +138,6 @@ public final class Layers extends AbstractList { if (gl instanceof InputListener) mMap.input.unbind((InputListener) gl); } - removeEnableChangeHandlerToGroupLayer((GroupLayer) remove); } // update layer group pointers @@ -170,6 +147,7 @@ public final class Layers extends AbstractList { mGroupIndex.put(group, pointer - 1); } + remove.setEnableHandler(null); return remove; } @@ -198,6 +176,7 @@ public final class Layers extends AbstractList { } } + remove.setEnableHandler(null); return remove; }