Hello Miguel, This change addresses issue 46 (add the closeInfoWindow() method to the MapWidget class), and also addresses a long standing issue, which is to make a 1:1 relationship between the InfoWindow object and the MapWidget object. Now there is an instance variable in MapWidget so that we only construct a new InfoWindow object once.
M maps/maps/src/com/google/gwt/maps/client/impl/MapImpl.java M maps/maps/src/com/google/gwt/maps/client/MapWidget.java M maps/maps/test/com/google/gwt/maps/client/MapWidgetTest.java -- Eric Z. Ayers - GWT Team - Atlanta, GA USA http://code.google.com/webtoolkit/ --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
M maps/maps/src/com/google/gwt/maps/client/impl/MapImpl.java M maps/maps/src/com/google/gwt/maps/client/MapWidget.java M maps/maps/test/com/google/gwt/maps/client/MapWidgetTest.java Index: maps/maps/src/com/google/gwt/maps/client/impl/MapImpl.java =================================================================== --- maps/maps/src/com/google/gwt/maps/client/impl/MapImpl.java (revision 785) +++ maps/maps/src/com/google/gwt/maps/client/impl/MapImpl.java (working copy) @@ -59,14 +59,15 @@ void clearOverlays(JavaScriptObject jsoPeer); + void closeInfoWindow(JavaScriptObject jsoPeer); + void closeInfoWindow(MapWidget map); @Constructor("$wnd.GMap2") JavaScriptObject construct(Element container); @Constructor("$wnd.GMap2") - JavaScriptObject construct(Element container, - JavaScriptObject mapOptions); + JavaScriptObject construct(Element container, JavaScriptObject mapOptions); boolean continuousZoomEnabled(JavaScriptObject jsoPeer); @@ -134,7 +135,7 @@ void openInfoWindow(MapWidget map, LatLng point, JavaScriptObject content, JavaScriptObject options); - + void openInfoWindow(MapWidget map, LatLng point, String content, JavaScriptObject options); @@ -163,8 +164,7 @@ void setCenter(JavaScriptObject jsoPeer, LatLng center, int zoom); - void setCenter(JavaScriptObject jsoPeer, LatLng center, int zoom, - MapType type); + void setCenter(JavaScriptObject jsoPeer, LatLng center, int zoom, MapType type); void setMapType(JavaScriptObject jsoPeerPeer, MapType type); Index: maps/maps/src/com/google/gwt/maps/client/MapWidget.java =================================================================== --- maps/maps/src/com/google/gwt/maps/client/MapWidget.java (revision 785) +++ maps/maps/src/com/google/gwt/maps/client/MapWidget.java (working copy) @@ -124,8 +124,8 @@ } private static native void nativeUnload() /*-{ - $wnd.GUnload && $wnd.GUnload(); - }-*/; + $wnd.GUnload && $wnd.GUnload(); + }-*/; private HandlerCollection<MapInfoWindowBeforeCloseHandler> infoWindowBeforeCloseHandlers; private HandlerCollection<MapInfoWindowCloseHandler> infoWindowCloseHandlers; @@ -152,6 +152,7 @@ private HandlerCollection<MapRightClickHandler> mapRightClickHandlers; private HandlerCollection<MapTypeChangedHandler> mapTypeChangedHandlers; private HandlerCollection<MapZoomEndHandler> mapZoomEndHandlers; + private InfoWindow infoWindow; /** * Cache of the map panes returned for this widget. @@ -688,6 +689,13 @@ } /** + * Close the currently open [EMAIL PROTECTED] InfoWindow}. + */ + public void closeInfoWindow() { + MapImpl.impl.closeInfoWindow(jsoPeer); + } + + /** * Computes the geographical coordinates from pixel coordinates in the div * that holds the draggable map. You need this when you implement interaction * with custom overlays. @@ -767,13 +775,13 @@ * * There is only one info window per map. * - * TODO(samgross): assign the info window to an instance field so that there - * is only one instance per map. - * * @return the info window associated with the map. */ public InfoWindow getInfoWindow() { - return new InfoWindow(this); + if (infoWindow == null) { + infoWindow = new InfoWindow(this); + } + return infoWindow; } /** @@ -942,7 +950,8 @@ /** * Removes a single handler of this map previously added with - * [EMAIL PROTECTED] MapWidget#addInfoWindowBeforeCloseHandler(MapInfoWindowBeforeCloseHandler)}. + * [EMAIL PROTECTED] MapWidget#addInfoWindowBeforeCloseHandler(MapInfoWindowBeforeCloseHandler)} + * . * * @param handler the handler to remove */ Index: maps/maps/test/com/google/gwt/maps/client/MapWidgetTest.java =================================================================== --- maps/maps/test/com/google/gwt/maps/client/MapWidgetTest.java (revision 785) +++ maps/maps/test/com/google/gwt/maps/client/MapWidgetTest.java (working copy) @@ -17,12 +17,17 @@ import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.maps.client.geom.LatLng; +import com.google.gwt.maps.client.overlay.Marker; +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.ui.RootPanel; /** * Tests for the MapWidget and related classes. */ public class MapWidgetTest extends GWTTestCase { + // length of time to wait for asynchronous test to complete. + static final int ASYNC_DELAY_MSEC = 5000; @Override public String getModuleName() { @@ -51,6 +56,7 @@ assertTrue("Center didn't match.", m.getCenter().isEquals( LatLng.newInstance(0, 80))); assertEquals("Zoom level didn't match.", m.getZoomLevel(), 4); + RootPanel.get().add(m); } public void testMapWidgetDefault() { @@ -68,4 +74,23 @@ LatLng.newInstance(45, 45))); assertEquals("Zoom level didn't match.", m.getZoomLevel(), 8); } + + public void testMapWidgetCloseInfoWindow() { + LatLng center = LatLng.newInstance(0, 0); + final MapWidget map = new MapWidget(center, 1); + map.setSize("300px", "300px"); + RootPanel.get().add(map); + InfoWindowContent content = new InfoWindowContent("<i>Hello World!</i>"); + InfoWindow info = map.getInfoWindow(); + info.open(center, content); + DeferredCommand.addCommand(new Command() { + + public void execute() { + map.closeInfoWindow(); + finishTest(); + } + + }); + delayTestFinish(ASYNC_DELAY_MSEC); + } }