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 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) {
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user