/* * 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.core.client.EntryPoint; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.maps.client.Maps; import com.google.gwt.maps.sample.hellomaps.client.MapsDemo.MapsDemoInfo; import com.google.gwt.user.client.History; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DecoratorPanel; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; /** * Main class for implementing the HelloMaps gwt-google-apis demo. */ public class HelloMaps implements EntryPoint, ValueChangeHandler<String> { protected DemoList list = new DemoList(); private MapsDemoInfo curInfo; private MapsDemo curMapsDemo; private HTML description = new HTML(); private VerticalPanel innerPanel = new VerticalPanel(); private FlexTable outerPanel = new FlexTable(); public void onModuleLoad() { if (!Maps.isLoaded()) { Window.alert("The Maps API is not installed." + " The <script> tag that loads the Maps API may be missing or your Maps key may be wrong."); return; } if (!Maps.isBrowserCompatible()) { Window.alert("The Maps API is not compatible with this browser."); return; } // Load all the MapsDemos. loadMapsDemos(); innerPanel.setStylePrimaryName("hm-mapinnerpanel"); // innerPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); HorizontalPanel horizPanel = new HorizontalPanel(); list.setStylePrimaryName("hm-demolistbox"); Button nextLink = new Button(">>"); nextLink.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { show(list.getNext(), true); } }); horizPanel.add(new Label("Select Demo: ")); horizPanel.setSpacing(4); horizPanel.add(list); horizPanel.add(nextLink); innerPanel.add(horizPanel); innerPanel.add(description); innerPanel.setSpacing(10); History.addValueChangeHandler(this); outerPanel.setStylePrimaryName("hm-outerpanel"); outerPanel.insertRow(0); outerPanel.insertRow(0); outerPanel.insertRow(0); outerPanel.insertRow(0); outerPanel.insertRow(0); outerPanel.addCell(0); outerPanel.addCell(1); outerPanel.addCell(2); outerPanel.addCell(3); outerPanel.addCell(4); outerPanel.setWidget(0, 0, new HTML( "This Maps-enabled application was built using the Google " + "API Library for GWT, " + "<a href=\"http://code.google.com/p/gwt-google-apis/\">" + "http://code.google.com/p/gwt-google-apis/</a>. " + "The drop down list below allows you to select a scenario that " + "demonstrates a particular capability of the Maps support.")); outerPanel.setWidget(1, 0, innerPanel); DecoratorPanel decorator = new DecoratorPanel(); decorator.add(outerPanel); RootPanel.get("hm-map").add(decorator); // Show the initial screen. String initToken = History.getToken(); if (initToken.length() > 0) { onValueChange(initToken); } else { showInfo(); } } public void onValueChange(ValueChangeEvent<String> event){ String token = event.getValue(); onValueChange(token); } public void show(MapsDemoInfo info, boolean affectHistory) { // Don't bother re-displaying the existing MapsDemo. This can be an issue // in practice, because when the history context is set, our // onHistoryChanged() handler will attempt to show the currently-visible // MapsDemo. if (info == curInfo) { return; } curInfo = info; // Remove the old MapsDemo from the display area. if (curMapsDemo != null) { innerPanel.remove(curMapsDemo); } // Get the new MapsDemo instance, and display its description in the // MapsDemo list. curMapsDemo = info.getInstance(); list.setMapsDemoSelection(info.getName()); // If affectHistory is set, create a new item on the history stack. This // will ultimately result in onHistoryChanged() being called. It will call // show() again, but nothing will happen because it will request the exact // same MapsDemo we're already showing. if (affectHistory) { History.newItem(info.getName()); } // Display the new MapsDemo and update the description panel. innerPanel.add(curMapsDemo); outerPanel.setWidget(2, 0, info.getDescriptionHTML()); outerPanel.setWidget( 3, 0, new HTML( "These concepts behind these demos" + " are explained in the " + "<a href=\"http://www.google.com/apis/maps/documentation/index.html\">" + "Google Maps API Concepts</a> document.")); // info is an inner class of the class we want to display. Strip off the // generated anonymous class name. String strippedClassName = info.getClass().getName(); int lastIndex = strippedClassName.lastIndexOf('$'); if (lastIndex > 0) { strippedClassName = strippedClassName.substring(0, lastIndex); } outerPanel.setWidget(4, 0, new HTML("<h5> See source in " + strippedClassName + "</h5><h5>Maps API version: " + Maps.getVersion() + "</h5>")); curMapsDemo.onShow(); } /** * Adds all MapsDemos to the list. Note that this does not create actual * instances of all MapsDemos yet (they are created on-demand). This can make * a significant difference in startup time. */ protected void loadMapsDemos() { list.addMapsDemo(SimpleDemo.init()); list.addMapsDemo(AnimateDemo.init()); list.addMapsDemo(DragCursorDemo.init()); list.addMapsDemo(ControlsDemo.init()); list.addMapsDemo(MapUIOptionsDemo.init()); list.addMapsDemo(EventDemo.init()); list.addMapsDemo(ClickDemo.init()); list.addMapsDemo(MapEventDemo.init()); list.addMapsDemo(InfoWindowDemo.init()); list.addMapsDemo(OverlayDemo.init()); list.addMapsDemo(MarkerInfoWindowDemo.init()); list.addMapsDemo(IconDemo.init()); list.addMapsDemo(IconClassDemo.init()); list.addMapsDemo(DragMarkerDemo.init()); list.addMapsDemo(CustomControlDemo.init()); list.addMapsDemo(MapTypeDemo.init()); list.addMapsDemo(CustomMapTypeDemo.init()); list.addMapsDemo(GroundOverlayDemo.init()); list.addMapsDemo(CustomOverlayDemo.init()); list.addMapsDemo(DrawingOverlayDemo.init()); list.addMapsDemo(GeoRssOverlayDemo.init()); list.addMapsDemo(KmlOverlayDemo.init()); list.addMapsDemo(TrafficOverlayDemo.init()); list.addMapsDemo(SimpleDirectionsDemo.init()); list.addMapsDemo(RoutedDirectionsDemo.init()); list.addMapsDemo(GeocoderDemo.init()); list.addMapsDemo(Geocoder2Demo.init()); list.addMapsDemo(ReverseGeocoderDemo.init()); list.addMapsDemo(EarthPluginDemo.init()); list.addMapsDemo(GoogleBarDemo.init()); list.addMapsDemo(AdsManagerDemo.init()); list.addMapsDemo(StreetviewOverlayDemo.init()); list.addMapsDemo(StreetviewDemo.init()); } private void onValueChange(String token) { // Find the MapsDemoInfo associated with the history context. If one is // found, show it (It may not be found, for example, when the user mis- // types a URL, or on startup, when the first context will be ""). MapsDemoInfo info = list.find(token); if (info == null) { showInfo(); return; } show(info, false); } private void showInfo() { show(list.find("The Basics"), false); } }