/*
* Copyright 2008 Google Inc.
*
* 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.
*/
package com.google.gwt.maps.sample.hellomaps.client;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.event.GroundOverlayVisibilityChangedHandler;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.geom.LatLngBounds;
import com.google.gwt.maps.client.overlay.GroundOverlay;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* This demo shows how to create a custom overlay in the form of a Rectangle and
* add it to the map.
*/
public class GroundOverlayDemo extends MapsDemo {
private static HTML descHTML = null;
private static final String descString = "<p>Creates a map viewport centered on Palo Alto, CA USA.</p>"
+ "<p>Draws a ground overlay at the center of the maps window with an image of a boot.</p>\n";
public static MapsDemoInfo init() {
return new MapsDemoInfo() {
@Override
public MapsDemo createInstance() {
return new GroundOverlayDemo();
}
@Override
public HTML getDescriptionHTML() {
if (descHTML == null) {
descHTML = new HTML(descString);
}
return descHTML;
}
@Override
public String getName() {
return "Ground Overlays";
}
};
}
private MapWidget map;
private boolean firstTime = true;
private Button hideButton;
private GroundOverlay groundOverlay;
public GroundOverlayDemo() {
VerticalPanel vp = new VerticalPanel();
map = new MapWidget(LatLng.newInstance(37.4419, -122.1419), 13);
vp.add(map);
vp.setSpacing(10);
map.setSize("500px", "500px");
map.setUIToDefault();
hideButton = new Button("Hide");
vp.add(hideButton);
hideButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
if (groundOverlay.isVisible()) {
hideButton.setText("Show");
} else {
hideButton.setText("Hide");
}
groundOverlay.setVisible(!groundOverlay.isVisible());
}
});
initWidget(vp);
}
@Override
public void onShow() {
// The map's bounds are meaningless until the map has been added to the DOM
// and sized appropriately
if (firstTime) {
firstTime = false;
LatLngBounds bounds = map.getBounds();
LatLng southWest = bounds.getSouthWest();
LatLng northEast = bounds.getNorthEast();
double lngDelta = (northEast.getLongitude() - southWest.getLongitude()) / 4;
double latDelta = (northEast.getLatitude() - southWest.getLatitude()) / 4;
// generate bounds that covers center map with half the width and height
LatLngBounds rectBounds = LatLngBounds.newInstance(LatLng.newInstance(
southWest.getLatitude() + latDelta, southWest.getLongitude()
+ lngDelta), LatLng.newInstance(northEast.getLatitude() - latDelta,
northEast.getLongitude() - lngDelta));
groundOverlay = new GroundOverlay("boot.jpg", rectBounds);
groundOverlay.addGroundOverlayVisibilityChangedHandler(new GroundOverlayVisibilityChangedHandler() {
public void onVisibilityChanged(
GroundOverlayVisibilityChangedEvent event) {
if (event.isVisible()) {
hideButton.setText("Hide Overlay");
} else {
hideButton.setText("Show Overlay");
}
}
});
map.addOverlay(groundOverlay);
}
}
}