Handle layer enabled state (#342)

This commit is contained in:
Andre Höpfner 2017-03-28 18:13:35 +02:00 committed by Emux
parent 18d8e18bdf
commit 9fff945978
3 changed files with 95 additions and 4 deletions

View File

@ -22,12 +22,18 @@ import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.InputProcessor;
import org.oscim.layers.GenericLayer;
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;
import org.oscim.utils.Easing;
import java.util.List;
public class InputHandler implements InputProcessor {
private ViewController mViewport;
@ -145,10 +151,47 @@ public class InputHandler implements InputProcessor {
}
mMap.render();
break;
case Input.Keys.B:
toggleBuildingLayer(mMap.layers());
mMap.render();
break;
}
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<Layer> 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) {

View File

@ -21,12 +21,17 @@ 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;
protected final Map mMap;
private EnableChangeHandler handler;
protected LayerRenderer mRenderer;
@ -41,13 +46,23 @@ public abstract class Layer {
* @param enabled
*/
public void setEnabled(boolean enabled) {
boolean changed = mEnabled != enabled;
mEnabled = enabled;
if (changed && this.handler != null) this.handler.changed(mEnabled);
}
public boolean isEnabled() {
return mEnabled;
}
public void setChangeHandler(EnableChangeHandler handler) {
this.handler = handler;
}
public void removeEnabledChangeHandler() {
this.handler = null;
}
/**
* Override to perform clean up of resources before shutdown.
*/

View File

@ -81,10 +81,41 @@ public final class Layers extends AbstractList<Layer> {
}
}
layer.setChangeHandler(layerEnabledChangeHandler);
if(layer instanceof GroupLayer){
addEnableChangeHandlerToGroupLayer((GroupLayer) layer);
}
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.
*/
@ -114,6 +145,7 @@ public final class Layers extends AbstractList<Layer> {
Layer remove = mLayerList.remove(index);
// unbind removed layer
remove.removeEnabledChangeHandler();
if (remove instanceof UpdateListener)
mMap.events.unbind((UpdateListener) remove);
if (remove instanceof InputListener)
@ -128,6 +160,7 @@ public final class Layers extends AbstractList<Layer> {
if (gl instanceof InputListener)
mMap.input.unbind((InputListener) gl);
}
removeEnableChangeHandlerToGroupLayer((GroupLayer) remove);
}
// update layer group pointers
@ -225,13 +258,13 @@ public final class Layers extends AbstractList<Layer> {
for (int i = 0, n = mLayerList.size(); i < n; i++) {
Layer o = mLayerList.get(i);
if (o.getRenderer() != null)
if (o.isEnabled() && o.getRenderer() != null)
numRenderLayers++;
if (o instanceof GroupLayer) {
GroupLayer groupLayer = (GroupLayer) o;
for (Layer gl : groupLayer.layers) {
if (gl.getRenderer() != null)
if (gl.isEnabled() && gl.getRenderer() != null)
numRenderLayers++;
}
}
@ -244,14 +277,14 @@ public final class Layers extends AbstractList<Layer> {
for (int i = 0, cnt = 0, n = mLayerList.size(); i < n; i++) {
Layer o = mLayerList.get(i);
LayerRenderer l = o.getRenderer();
if (l != null)
if (o.isEnabled() && l != null)
mLayerRenderer[cnt++] = l;
if (o instanceof GroupLayer) {
GroupLayer groupLayer = (GroupLayer) o;
for (Layer gl : groupLayer.layers) {
l = gl.getRenderer();
if (l != null)
if (gl.isEnabled() && l != null)
mLayerRenderer[cnt++] = l;
}
}