--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.ui.externaltools.ProgramBuilderLaunchConfigurationType">
+ <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/>
+ <booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="true"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <resources> <item path="/org.argeo.app.geo.js" type="4"/> </resources>}"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/npm"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="run build"/>
+ <booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
+ <stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${project_loc}"/>
+</launchConfiguration>
import OSM from 'ol/source/OSM.js';
import TileLayer from 'ol/layer/Tile.js';
import View from 'ol/View.js';
+import { fromLonLat, toLonLat } from 'ol/proj.js';
import 'ol/ol.css';
-const map = new Map({
- layers: [
- new TileLayer({
- source: new OSM(),
- }),
- ],
- target: 'map',
- view: new View({
- center: [0, 0],
- zoom: 2,
- }),
-});
+//window.map = new Map({
+// layers: [
+// new TileLayer({
+// source: new OSM(),
+// }),
+// ],
+// target: 'mapTarget',
+// view: new View({
+// center: [0, 0],
+// zoom: 2,
+// }),
+//});
+//window.map.on('rendercomplete', e => {
+// console.log('Render completed.');
+// onRenderComplete();
+//});
+//map.getView().setZoom(4);
+
+if (typeof window.argeo === 'undefined')
+ window.argeo = {};
+if (typeof window.argeo.app === 'undefined')
+ window.argeo.app = {};
+if (typeof window.argeo.app.geo === 'undefined')
+ window.argeo.app.geo = {};
+
+
+
+window.argeo.app.geo.ArgeoMap = {
+ map: new Map({
+ layers: [
+ new TileLayer({
+ source: new OSM(),
+ }),
+ ],
+ target: 'map',
+ }),
+
+ setZoom: function(zoom) {
+ this.map.getView().setZoom(zoom);
+ },
+
+ setCenter: function(lng, lat) {
+ this.map.getView().setCenter(fromLonLat([lng, lat]));
+ },
+
+};
+//window.argeoMap = Object.create(argeo.app.geo.ArgeoMap);
+//window.argeoMap.map.on('rendercomplete', e => {
+// console.log('Render completed.');
+// onRenderComplete();
+//});
+
+
+//function argeo_app_geo_Map() {
+// console.log('Entered constructor');
+// this.map = new Map({
+// layers: [
+// new TileLayer({
+// source: new OSM(),
+// }),
+// ],
+// target: 'map',
+// view: new View({
+// center: [0, 0],
+// zoom: 2,
+// }),
+// });
+// this.map.on('rendercomplete', e => {
+// console.log('Render completed.');
+// onRenderComplete();
+// });
+//
+// this.setCenter = function(lng, lat) {
+// console.log('Center set ');
+// //this.map.getView().setCenter(ol.proj.fromLonLat([lng, lat]));
+// }
+//
+// this.setZoom = function(zoom) {
+// this.map.getView().setZoom(zoom);
+// }
+//}
+//
+//window.argeoMap = new argeo_app_geo_Map();
+//argeoMap.setCenter(13.404954, 52.520008);
+//function setCenter(lng, lat) {
+// map.getView().setCenter(lng, lat);
+//}
\ No newline at end of file
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;
-import org.eclipse.swt.widgets.Label;
public class OLMap extends Composite implements MapPart {
static final long serialVersionUID = 2713128477504858552L;
- private Label div;
+ private Browser browser;
+
+ // private CompletableFuture<Boolean> renderCompleted = new
+ // CompletableFuture<>();
+ private CompletableFuture<Boolean> 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());
-// div = new Label(this, SWT.NONE);
-// CmsSwtUtils.markup(div);
-// CmsSwtUtils.disableMarkupValidation(div);
-// div.setText(html);
-// div.setLayoutData(CmsSwtUtils.fillAll());
- String html = """
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Simple Map</title>
- <link rel="stylesheet" href="/pkg/org.argeo.app.geo.ux.web/main.css">
- <style>
- .map {
- width: 100%;
- height: 100vh;
- }
- </style>
- </head>
- <body>
- <div id="map" class="map"></div>
- <script src="/pkg/org.argeo.app.geo.ux.web/main.bundle.js"></script>
- </body>
-</html>
- """;
- Browser browser = new Browser(this, SWT.BORDER);
+ browser = new Browser(this, SWT.BORDER);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- //browser.setText(html);
+ // 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) {
- // TODO Auto-generated method stub
-
+ pageLoaded.thenAccept((b) -> {
+ browser.evaluate(mapVar + ".setZoom(" + zoom + ")");
+ });
}
@Override
public void setCenter(Double lng, Double lat) {
- // TODO Auto-generated method stub
-
+ 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;
+// }
+//
+// }
}