Search in sources :

Example 1 with MapObject

use of com.codename1.googlemaps.MapContainer.MapObject in project codenameone-google-maps by codenameone.

the class MapContainer method addMarker.

/**
 * Adds a marker to the map with the given attributes
 * @param opts The marker options.
 * @return marker reference object that should be used when removing the marker
 */
public MapObject addMarker(MarkerOptions opts) {
    // public MapObject addMarker(EncodedImage icon, Coord location, String text, String longText, final ActionListener onClick) {
    EncodedImage icon = opts.getIcon();
    Coord location = opts.getLocation();
    String text = opts.getText();
    String longText = opts.getLongText();
    ActionListener onClick = opts.getOnClick();
    if (internalNative != null) {
        byte[] iconData = null;
        if (icon != null) {
            iconData = icon.getImageData();
            internalNative.setMarkerSize(icon.getWidth(), icon.getHeight());
        }
        long key = internalNative.addMarker(iconData, location.getLatitude(), location.getLongitude(), text, longText, onClick != null, opts.anchorU, opts.anchorV);
        MapObject o = new MapObject();
        o.mapKey = key;
        o.callback = onClick;
        markers.add(o);
        return o;
    } else {
        if (internalLightweightCmp != null) {
            PointLayer pl = new PointLayer(location, text, icon);
            if (points == null) {
                points = new PointsLayer();
                internalLightweightCmp.addLayer(points);
            }
            points.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent evt) {
                    PointLayer point = (PointLayer) evt.getSource();
                    for (MapObject o : markers) {
                        if (o.point == point) {
                            if (o.callback != null) {
                                o.callback.actionPerformed(new ActionEvent(o));
                            }
                            evt.consume();
                            return;
                        }
                    }
                }
            });
            points.addPoint(pl);
            MapObject o = new MapObject();
            o.point = pl;
            o.callback = onClick;
            markers.add(o);
            internalLightweightCmp.revalidate();
            return o;
        } else {
            String uri = null;
            int iconWidth = 0;
            int iconHeight = 0;
            int anchorU = 0;
            int anchorV = 0;
            if (icon != null) {
                uri = WebBrowser.createDataURI(icon.getImageData(), "image/png");
                iconWidth = icon.getWidth();
                iconHeight = icon.getHeight();
                anchorU = (int) (icon.getWidth() * opts.anchorU);
                anchorV = (int) (icon.getHeight() * opts.anchorV);
            }
            // browserBridge.waitForReady();
            MapObject o = new MapObject();
            o.callback = onClick;
            o.pending = true;
            final String fUri = uri;
            final int fIconWidth = iconWidth;
            final int fIconHeight = iconHeight;
            final float fAnchorU = anchorU;
            final float fAnchorV = anchorV;
            browserBridge.ready(() -> {
                internalBrowser.execute("callback.onSuccess(" + BRIDGE + ".addMarker(${0}, ${1}, ${2}, ${3}, ${4}, ${5}, ${6}, ${7}, ${8}))", new Object[] { // long key = ((Double)browserBridge.bridge.call("addMarker", new Object[]{
                fUri, location.getLatitude(), location.getLongitude(), text, longText, fIconWidth, fIconHeight, fAnchorU, fAnchorV }, jsres -> {
                    o.mapKey = jsres.getInt();
                    o.pending = false;
                });
            });
            // MapObject o = new MapObject();
            // o.mapKey = res.getInt();
            // o.callback = onClick;
            markers.add(o);
            // System.out.println("MapKey added "+o.mapKey);
            return o;
        }
    }
}
Also used : Coord(com.codename1.maps.Coord) PointsLayer(com.codename1.maps.layers.PointsLayer) ActionListener(com.codename1.ui.events.ActionListener) PointLayer(com.codename1.maps.layers.PointLayer) ActionEvent(com.codename1.ui.events.ActionEvent) EncodedImage(com.codename1.ui.EncodedImage) Point(com.codename1.ui.geom.Point)

Example 2 with MapObject

use of com.codename1.googlemaps.MapContainer.MapObject in project codenameone-google-maps by codenameone.

the class MapContainer method addPath.

/**
 * Draws a path on the map
 * @param path the path to draw on the map
 * @return a map object instance that allows us to remove the drawn path
 */
public MapObject addPath(Coord... path) {
    if (internalNative != null) {
        long key = internalNative.beginPath();
        for (Coord c : path) {
            internalNative.addToPath(key, c.getLatitude(), c.getLongitude());
        }
        key = internalNative.finishPath(key);
        MapObject o = new MapObject();
        o.mapKey = key;
        markers.add(o);
        return o;
    } else {
        if (internalLightweightCmp != null) {
            LinesLayer ll = new LinesLayer();
            ll.addLineSegment(path);
            internalLightweightCmp.addLayer(ll);
            MapObject o = new MapObject();
            o.lines = ll;
            markers.add(o);
            return o;
        } else {
            // browserBridge.waitForReady();
            StringBuilder json = new StringBuilder();
            json.append("[");
            boolean first = true;
            for (Coord c : path) {
                if (first) {
                    first = false;
                } else {
                    json.append(", ");
                }
                json.append("{\"lat\":").append(c.getLatitude()).append(", \"lon\": ").append(c.getLongitude()).append("}");
            }
            json.append("]");
            // long key = ((Double)browserBridge.bridge.call("addPathAsJSON", new Object[]{json.toString()})).intValue();
            MapObject o = new MapObject();
            o.pending = true;
            browserBridge.ready(() -> {
                internalBrowser.execute("callback.onSuccess(" + BRIDGE + ".addPathAsJSON(${0}));", new Object[] { json.toString() }, jsres -> {
                    o.mapKey = jsres.getInt();
                    o.pending = false;
                });
            });
            markers.add(o);
            return o;
        }
    }
}
Also used : Coord(com.codename1.maps.Coord) LinesLayer(com.codename1.maps.layers.LinesLayer)

Example 3 with MapObject

use of com.codename1.googlemaps.MapContainer.MapObject in project codenameone-google-maps by codenameone.

the class MapInfoPanel method createMarkerButton.

private Button createMarkerButton(MapObject mo, String label, Image icon, final Coord location) {
    Button b = new Button(label, icon);
    b.addActionListener(e -> {
        map.zoom(location, (int) map.getZoom());
    });
    return b;
}
Also used : Button(com.codename1.ui.Button)

Example 4 with MapObject

use of com.codename1.googlemaps.MapContainer.MapObject in project codenameone-google-maps by codenameone.

the class MapLayout method uninstallMarker.

private void uninstallMarker(Component cmp) {
    MapObject marker = (MapObject) cmp.getClientProperty(MARKER_KEY);
    if (marker != null) {
        map.removeMapObject(marker);
        markers.remove(marker);
        cmp.putClientProperty(MARKER_KEY, null);
    }
}
Also used : MapObject(com.codename1.googlemaps.MapContainer.MapObject)

Example 5 with MapObject

use of com.codename1.googlemaps.MapContainer.MapObject in project codenameone-google-maps by codenameone.

the class MapLayout method uninstallMarkers.

private void uninstallMarkers() {
    actual.setVisible(true);
    actual.setShouldCalcPreferredSize(true);
    actual.revalidate();
    List<MapObject> toRemove = new ArrayList<MapObject>(markers);
    List<Component> children = new ArrayList<Component>();
    for (Component child : actual) {
        children.add(child);
    }
    for (MapObject marker : toRemove) {
        $(() -> map.removeMapObject(marker));
    }
    for (Component child : children) {
        child.putClientProperty(MARKER_KEY, null);
    }
    markers.clear();
}
Also used : ArrayList(java.util.ArrayList) Component(com.codename1.ui.Component) MapObject(com.codename1.googlemaps.MapContainer.MapObject)

Aggregations

MapObject (com.codename1.googlemaps.MapContainer.MapObject)4 Coord (com.codename1.maps.Coord)3 EncodedImage (com.codename1.ui.EncodedImage)3 Button (com.codename1.ui.Button)2 Component (com.codename1.ui.Component)2 ActionEvent (com.codename1.ui.events.ActionEvent)2 ActionListener (com.codename1.ui.events.ActionListener)2 FloatingActionButton (com.codename1.components.FloatingActionButton)1 InteractionDialog (com.codename1.components.InteractionDialog)1 ToastBar (com.codename1.components.ToastBar)1 MapContainer (com.codename1.googlemaps.MapContainer)1 MarkerOptions (com.codename1.googlemaps.MapContainer.MarkerOptions)1 Util (com.codename1.io.Util)1 BoundingBox (com.codename1.maps.BoundingBox)1 MapListener (com.codename1.maps.MapListener)1 LinesLayer (com.codename1.maps.layers.LinesLayer)1 PointLayer (com.codename1.maps.layers.PointLayer)1 PointsLayer (com.codename1.maps.layers.PointsLayer)1 ComponentSelector.$ (com.codename1.ui.ComponentSelector.$)1 Container (com.codename1.ui.Container)1