package org.argeo.app.geo.swt.openlayers; import java.util.concurrent.CompletableFuture; import org.argeo.app.geo.ux.MapPart; import org.argeo.cms.swt.CmsSwtUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.browser.ProgressEvent; import org.eclipse.swt.browser.ProgressListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; public class OLMap extends Composite implements MapPart { static final long serialVersionUID = 2713128477504858552L; private Browser browser; // private CompletableFuture renderCompleted = new // CompletableFuture<>(); private CompletableFuture pageLoaded = new CompletableFuture<>(); private String mapVar = "window.argeoMap"; public OLMap(Composite parent, int style) { super(parent, style); parent.setLayout(CmsSwtUtils.noSpaceGridLayout()); setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); setLayout(CmsSwtUtils.noSpaceGridLayout()); browser = new Browser(this, SWT.BORDER); browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); // functions exposed to JavaScript // new onRenderComplete(); browser.setUrl("/pkg/org.argeo.app.geo.js/index.html"); browser.addProgressListener(new ProgressListener() { static final long serialVersionUID = 1L; @Override public void completed(ProgressEvent event) { // create map browser.execute(mapVar + " = Object.create(window.argeo.app.geo.ArgeoMap);"); pageLoaded.complete(true); } @Override public void changed(ProgressEvent event) { } }); } @Override public void addPoint(Double lng, Double lat) { // TODO Auto-generated method stub } @Override public void addUrlLayer(String layer, Format format) { // TODO Auto-generated method stub } @Override public void setZoom(int zoom) { pageLoaded.thenAccept((b) -> { browser.evaluate(mapVar + ".setZoom(" + zoom + ")"); }); } @Override public void setCenter(Double lng, Double lat) { pageLoaded.thenAccept((b) -> { browser.evaluate(mapVar + ".setCenter(" + lng + ", " + lat + ")"); }); } // private void setRenderCompleted() { // renderCompleted.complete(true); // } // // private class onRenderComplete extends BrowserFunction { // // onRenderComplete() { // super(browser, onRenderComplete.class.getSimpleName()); // } // // @Override // public Object function(Object[] arguments) { // setRenderCompleted(); // System.out.println("Render complete (Java)"); // return null; // } // // } }