package com.google.gwt.maps.testing.client.maps; /* * #%L * GWT Maps API V3 - Showcase * %% * Copyright (C) 2011 - 2012 GWT Maps API V3 * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.maps.client.MapOptions; import com.google.gwt.maps.client.MapTypeId; import com.google.gwt.maps.client.MapWidget; import com.google.gwt.maps.client.base.LatLng; import com.google.gwt.maps.client.controls.ControlPosition; import com.google.gwt.maps.client.events.weatherlibmouse.WeatherMouseMapEvent; import com.google.gwt.maps.client.events.weatherlibmouse.WeatherMouseMapHandler; import com.google.gwt.maps.client.weatherlib.CloudLayer; import com.google.gwt.maps.client.weatherlib.LabelColor; import com.google.gwt.maps.client.weatherlib.TemperatureUnit; import com.google.gwt.maps.client.weatherlib.WeatherLayer; import com.google.gwt.maps.client.weatherlib.WeatherLayerOptions; import com.google.gwt.maps.client.weatherlib.WindSpeedUnit; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.VerticalPanel; /** * * <br> * <br> * See <a href= * "https://developers.google.com/maps/documentation/javascript/reference#WeatherLayer" * >WeatherLib API Doc</a> */ public class WeatherLayersWidget extends Composite { private final VerticalPanel pWidget; private MapWidget mapWidget; private WeatherLayer weatherLayer; private CloudLayer cloudLayer; public WeatherLayersWidget() { pWidget = new VerticalPanel(); initWidget(pWidget); draw(); } /** * Buttons for toggling layers */ private void drawLayerControls() { final Button button = new Button("Clouds"); button.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (cloudLayer.getMap() == null) { cloudLayer.setMap(mapWidget); button.getElement().getStyle().setColor("red"); } else { cloudLayer.setMap(null); button.getElement().getStyle().setColor("black"); } } }); final Button button2 = new Button("Forecast"); button2.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (weatherLayer.getMap() == null) { weatherLayer.setMap(mapWidget); button.getElement().getStyle().setColor("red"); } else { weatherLayer.setMap(null); button.getElement().getStyle().setColor("black"); } } }); FlowPanel widget = new FlowPanel(); widget.add(button); widget.add(new HTML("Weather Layers")); widget.add(button); widget.add(button2); DOM.setStyleAttribute(widget.getElement(), "background", "white"); DOM.setStyleAttribute(widget.getElement(), "padding", "5px"); DOM.setStyleAttribute(widget.getElement(), "margin", "3px"); DOM.setStyleAttribute(widget.getElement(), "border", "3px solid darkgray"); mapWidget.setControls(ControlPosition.RIGHT_CENTER, widget); button.getElement().getStyle().setColor("red"); button2.getElement().getStyle().setColor("red"); } private void draw() { pWidget.clear(); pWidget.add(new HTML("<br>Weather Map Layers Example - Can configure Imperial/Metric units")); drawMap(); drawLayerControls(); } private final native void ConsoleLog(Object msg) /*-{ if($wnd.console) { $wnd.console.log(msg); } }-*/; private void drawMap() { // zoom out for the clouds LatLng center = LatLng.newInstance(47.11, -4.91); MapOptions opts = MapOptions.newInstance(); opts.setZoom(3); opts.setCenter(center); opts.setMapTypeId(MapTypeId.SATELLITE); mapWidget = new MapWidget(opts); pWidget.add(mapWidget); mapWidget.setSize("750px", "500px"); // add weather conditions layer WeatherLayerOptions options2 = WeatherLayerOptions.newInstance(); options2.setTemperatureUnits(TemperatureUnit.FAHRENHEIT); options2.setWindSpeedUnits(WindSpeedUnit.MILES_PER_HOUR); options2.setLabelColor(LabelColor.BLACK); WeatherLayerOptions options = WeatherLayerOptions.newInstance(); options.setTemperatureUnits(TemperatureUnit.FAHRENHEIT); options.setWindSpeedUnits(WindSpeedUnit.MILES_PER_HOUR); options.setLabelColor(LabelColor.BLACK); weatherLayer = WeatherLayer.newInstance(options); weatherLayer.setMap(mapWidget); // apply clouds cloudLayer = CloudLayer.newInstance(); cloudLayer.setMap(mapWidget); // add custom handler for clicks on weather markers // NOTE: this is just being cat'd to the console as an // example of the information you get from the event weatherLayer.addClickHandler(new WeatherMouseMapHandler() { @Override public void onEvent(WeatherMouseMapEvent event) { ConsoleLog(event.getPixelOffset().getHeight()); ConsoleLog(event.getLatLng().getLatitude()); ConsoleLog(event.getInfoWindowHtml()); ConsoleLog(event.getFeatureDetails().getCurrent()); ConsoleLog(event.getFeatureDetails().getForecast().get(0)); ConsoleLog(event.getFeatureDetails().getLocation()); ConsoleLog(event.getFeatureDetails().getTemperatureUnits().value()); ConsoleLog(event.getFeatureDetails().getWindSpeedUnits().value()); // ideally you'd intercept the propagation of the event her so you could // display your own custom popup, not the default one } }); } }