Handle layer enabled state (#342)
This commit is contained in:
parent
18d8e18bdf
commit
9fff945978
@ -22,12 +22,18 @@ import com.badlogic.gdx.Input.Buttons;
|
|||||||
import com.badlogic.gdx.InputProcessor;
|
import com.badlogic.gdx.InputProcessor;
|
||||||
|
|
||||||
import org.oscim.layers.GenericLayer;
|
import org.oscim.layers.GenericLayer;
|
||||||
|
import org.oscim.layers.GroupLayer;
|
||||||
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.TileGridLayer;
|
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.Map;
|
||||||
import org.oscim.map.ViewController;
|
import org.oscim.map.ViewController;
|
||||||
import org.oscim.theme.VtmThemes;
|
import org.oscim.theme.VtmThemes;
|
||||||
import org.oscim.utils.Easing;
|
import org.oscim.utils.Easing;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class InputHandler implements InputProcessor {
|
public class InputHandler implements InputProcessor {
|
||||||
|
|
||||||
private ViewController mViewport;
|
private ViewController mViewport;
|
||||||
@ -145,10 +151,47 @@ public class InputHandler implements InputProcessor {
|
|||||||
}
|
}
|
||||||
mMap.render();
|
mMap.render();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Input.Keys.B:
|
||||||
|
toggleBuildingLayer(mMap.layers());
|
||||||
|
mMap.render();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
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
|
@Override
|
||||||
public boolean keyUp(int keycode) {
|
public boolean keyUp(int keycode) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
|
@ -21,12 +21,17 @@ import org.oscim.renderer.LayerRenderer;
|
|||||||
|
|
||||||
public abstract class Layer {
|
public abstract class Layer {
|
||||||
|
|
||||||
|
public interface EnableChangeHandler{
|
||||||
|
void changed(boolean enabled);
|
||||||
|
}
|
||||||
|
|
||||||
public Layer(Map map) {
|
public Layer(Map map) {
|
||||||
mMap = map;
|
mMap = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean mEnabled = true;
|
private boolean mEnabled = true;
|
||||||
protected final Map mMap;
|
protected final Map mMap;
|
||||||
|
private EnableChangeHandler handler;
|
||||||
|
|
||||||
protected LayerRenderer mRenderer;
|
protected LayerRenderer mRenderer;
|
||||||
|
|
||||||
@ -41,13 +46,23 @@ public abstract class Layer {
|
|||||||
* @param enabled
|
* @param enabled
|
||||||
*/
|
*/
|
||||||
public void setEnabled(boolean enabled) {
|
public void setEnabled(boolean enabled) {
|
||||||
|
boolean changed = mEnabled != enabled;
|
||||||
mEnabled = enabled;
|
mEnabled = enabled;
|
||||||
|
if (changed && this.handler != null) this.handler.changed(mEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
return mEnabled;
|
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.
|
* Override to perform clean up of resources before shutdown.
|
||||||
*/
|
*/
|
||||||
|
@ -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);
|
mLayerList.add(index, layer);
|
||||||
mDirtyLayers = true;
|
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.
|
* Add using layer groups.
|
||||||
*/
|
*/
|
||||||
@ -114,6 +145,7 @@ public final class Layers extends AbstractList<Layer> {
|
|||||||
Layer remove = mLayerList.remove(index);
|
Layer remove = mLayerList.remove(index);
|
||||||
|
|
||||||
// unbind removed layer
|
// unbind removed layer
|
||||||
|
remove.removeEnabledChangeHandler();
|
||||||
if (remove instanceof UpdateListener)
|
if (remove instanceof UpdateListener)
|
||||||
mMap.events.unbind((UpdateListener) remove);
|
mMap.events.unbind((UpdateListener) remove);
|
||||||
if (remove instanceof InputListener)
|
if (remove instanceof InputListener)
|
||||||
@ -128,6 +160,7 @@ public final class Layers extends AbstractList<Layer> {
|
|||||||
if (gl instanceof InputListener)
|
if (gl instanceof InputListener)
|
||||||
mMap.input.unbind((InputListener) gl);
|
mMap.input.unbind((InputListener) gl);
|
||||||
}
|
}
|
||||||
|
removeEnableChangeHandlerToGroupLayer((GroupLayer) remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
// update layer group pointers
|
// 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++) {
|
for (int i = 0, n = mLayerList.size(); i < n; i++) {
|
||||||
Layer o = mLayerList.get(i);
|
Layer o = mLayerList.get(i);
|
||||||
|
|
||||||
if (o.getRenderer() != null)
|
if (o.isEnabled() && o.getRenderer() != null)
|
||||||
numRenderLayers++;
|
numRenderLayers++;
|
||||||
|
|
||||||
if (o instanceof GroupLayer) {
|
if (o instanceof GroupLayer) {
|
||||||
GroupLayer groupLayer = (GroupLayer) o;
|
GroupLayer groupLayer = (GroupLayer) o;
|
||||||
for (Layer gl : groupLayer.layers) {
|
for (Layer gl : groupLayer.layers) {
|
||||||
if (gl.getRenderer() != null)
|
if (gl.isEnabled() && gl.getRenderer() != null)
|
||||||
numRenderLayers++;
|
numRenderLayers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,14 +277,14 @@ public final class Layers extends AbstractList<Layer> {
|
|||||||
for (int i = 0, cnt = 0, n = mLayerList.size(); i < n; i++) {
|
for (int i = 0, cnt = 0, n = mLayerList.size(); i < n; i++) {
|
||||||
Layer o = mLayerList.get(i);
|
Layer o = mLayerList.get(i);
|
||||||
LayerRenderer l = o.getRenderer();
|
LayerRenderer l = o.getRenderer();
|
||||||
if (l != null)
|
if (o.isEnabled() && l != null)
|
||||||
mLayerRenderer[cnt++] = l;
|
mLayerRenderer[cnt++] = l;
|
||||||
|
|
||||||
if (o instanceof GroupLayer) {
|
if (o instanceof GroupLayer) {
|
||||||
GroupLayer groupLayer = (GroupLayer) o;
|
GroupLayer groupLayer = (GroupLayer) o;
|
||||||
for (Layer gl : groupLayer.layers) {
|
for (Layer gl : groupLayer.layers) {
|
||||||
l = gl.getRenderer();
|
l = gl.getRenderer();
|
||||||
if (l != null)
|
if (gl.isEnabled() && l != null)
|
||||||
mLayerRenderer[cnt++] = l;
|
mLayerRenderer[cnt++] = l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user