X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.geo%2Fsrc%2Forg%2Fargeo%2Fapp%2Fgeo%2Fux%2FOpenLayersMapPart.java;h=512a473c080f5bc906397757a0478209211cf138;hb=6e13b9416a5fd1f5477eb7233f86d3eacbb88c55;hp=a856bccd188fd1b9ed8d4fe5893aee5a6cf6e53f;hpb=b4b19aebd564f6be5195f2e5ea1499ac8a3f40e7;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.geo/src/org/argeo/app/geo/ux/OpenLayersMapPart.java b/org.argeo.app.geo/src/org/argeo/app/geo/ux/OpenLayersMapPart.java index a856bcc..512a473 100644 --- a/org.argeo.app.geo/src/org/argeo/app/geo/ux/OpenLayersMapPart.java +++ b/org.argeo.app.geo/src/org/argeo/app/geo/ux/OpenLayersMapPart.java @@ -1,7 +1,12 @@ package org.argeo.app.geo.ux; import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; +import org.argeo.app.geo.ux.MapPart.FeaturePopupEvent; +import org.argeo.app.geo.ux.MapPart.FeatureSelectedEvent; +import org.argeo.app.geo.ux.MapPart.FeatureSingleClickEvent; import org.argeo.app.ol.AbstractOlObject; import org.argeo.app.ol.Layer; import org.argeo.app.ol.OlMap; @@ -63,4 +68,39 @@ public class OpenLayersMapPart extends AbstractGeoJsObject { return mapPartName; } + public void selectFeatures(String layerName, Object... ids) { + executeMethod(getMethodName(), layerName, (Object[]) ids); + } + + /* + * CALLBACKS + */ + public void onFeatureSelected(Consumer toDo) { + addCallback("FeatureSelected", (arr) -> { + toDo.accept(new FeatureSelectedEvent((String) arr[0])); + return null; + }); + } + + public void onFeatureSingleClick(Consumer toDo) { + addCallback("FeatureSingleClick", (arr) -> { + toDo.accept(new FeatureSingleClickEvent((String) arr[0])); + return null; + }); + } + + public void onFeaturePopup(Function toDo) { + addCallback("FeaturePopup", (arr) -> { + return toDo.apply(new FeaturePopupEvent((String) arr[0])); + }); + } + + protected void addCallback(String suffix, Function toDo) { + getJsClient().getReadyStage().thenAccept((ready) -> { + String functionName = getJsClient().createJsFunction(getMapPartName() + "__on" + suffix, toDo); + getJsClient().execute(getJsReference() + ".callbacks['on" + suffix + "']=" + functionName + ";"); + executeMethod("enable" + suffix); + }); + } + }