]> git.argeo.org Git - gpl/argeo-suite.git/blob - swt/org.argeo.app.geo.swt/src/org/argeo/app/geo/swt/SwtMapPart.java
Implement current map display features.
[gpl/argeo-suite.git] / swt / org.argeo.app.geo.swt / src / org / argeo / app / geo / swt / SwtMapPart.java
1 package org.argeo.app.geo.swt;
2
3 import java.util.concurrent.CompletableFuture;
4
5 import org.argeo.app.geo.ux.JsImplementation;
6 import org.argeo.app.geo.ux.MapPart;
7 import org.argeo.cms.swt.CmsSwtUtils;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.browser.Browser;
10 import org.eclipse.swt.browser.ProgressEvent;
11 import org.eclipse.swt.browser.ProgressListener;
12 import org.eclipse.swt.layout.GridData;
13 import org.eclipse.swt.widgets.Composite;
14
15 public class SwtMapPart extends Composite implements MapPart {
16 static final long serialVersionUID = 2713128477504858552L;
17 private Browser browser;
18
19 // private CompletableFuture<Boolean> renderCompleted = new
20 // CompletableFuture<>();
21 private CompletableFuture<Boolean> pageLoaded = new CompletableFuture<>();
22
23 private String jsImplementation = JsImplementation.OPENLAYERS_MAP_PART.getJsClass();
24 private String mapVar = "globalThis.argeoMap";
25
26 public SwtMapPart(Composite parent, int style) {
27 super(parent, style);
28 parent.setLayout(CmsSwtUtils.noSpaceGridLayout());
29 setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
30 setLayout(CmsSwtUtils.noSpaceGridLayout());
31 browser = new Browser(this, SWT.BORDER);
32 browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
33 // functions exposed to JavaScript
34 // new onRenderComplete();
35 browser.setUrl("/pkg/org.argeo.app.geo.js/index.html");
36 browser.addProgressListener(new ProgressListener() {
37 static final long serialVersionUID = 1L;
38
39 @Override
40 public void completed(ProgressEvent event) {
41
42 // create map
43 browser.execute(mapVar + " = new " + jsImplementation + "();");
44
45 // browser.execute("console.log(myInstance.myField)");
46 pageLoaded.complete(true);
47 }
48
49 @Override
50 public void changed(ProgressEvent event) {
51 }
52 });
53 }
54
55 @Override
56 public void addPoint(Double lng, Double lat, String style) {
57 pageLoaded.thenAccept((b) -> {
58 browser.evaluate(
59 mapVar + ".addPoint(" + lng + ", " + lat + "," + (style == null ? "'default'" : style) + ")");
60 });
61 }
62
63 @Override
64 public void addUrlLayer(String url, Format format) {
65 pageLoaded.thenAccept((b) -> {
66 browser.evaluate(mapVar + ".addUrlLayer('" + url + "','" + format.name() + "')");
67 });
68 }
69
70 @Override
71 public void setZoom(int zoom) {
72 pageLoaded.thenAccept((b) -> {
73 browser.evaluate(mapVar + ".setZoom(" + zoom + ")");
74 });
75 }
76
77 @Override
78 public void setCenter(Double lng, Double lat) {
79 pageLoaded.thenAccept((b) -> {
80 browser.evaluate(mapVar + ".setCenter(" + lng + ", " + lat + ")");
81 });
82
83 }
84
85 // private void setRenderCompleted() {
86 // renderCompleted.complete(true);
87 // }
88 //
89 // private class onRenderComplete extends BrowserFunction {
90 //
91 // onRenderComplete() {
92 // super(browser, onRenderComplete.class.getSimpleName());
93 // }
94 //
95 // @Override
96 // public Object function(Object[] arguments) {
97 // setRenderCompleted();
98 // System.out.println("Render complete (Java)");
99 // return null;
100 // }
101 //
102 // }
103 }