/* * Copyright 2008 Jeff Dwyer * * 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.apress.progwt.client.map; import com.apress.progwt.client.college.ServiceCache; import com.apress.progwt.client.college.gui.MyPageTab; import com.apress.progwt.client.college.gui.SchoolLink; import com.apress.progwt.client.domain.Application; import com.apress.progwt.client.domain.School; import com.apress.progwt.client.domain.User; import com.google.gwt.maps.client.InfoWindow; import com.google.gwt.maps.client.InfoWindowContent; import com.google.gwt.maps.client.MapWidget; import com.google.gwt.maps.client.control.MapTypeControl; import com.google.gwt.maps.client.control.SmallMapControl; import com.google.gwt.maps.client.event.MarkerClickListener; import com.google.gwt.maps.client.geom.LatLng; import com.google.gwt.maps.client.overlay.Marker; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.SimplePanel; /** * Unfortunately, GoogleMaps don't play well with Tabs, so we have to do * some trickery here. This isn't purely a GWT specific issue, but * something that stems from trying to use heavyweight javascript widgets * like the maps when we're creating the UI dynamically. See * http://www.dynamicdrive.com/forums/archive/index.php/t-3923.html * * * * @author Jeff Dwyer * */ public class MyCollegeMap extends Composite implements MyPageTab { private static final LatLng middleAmerica = new LatLng(37.0625, -95.677068); private MapWidget map; private User user; public MyCollegeMap(ServiceCache serviceCache) { map = new MapWidget(middleAmerica, 4); map.setPixelSize(760, 300); map.addControl(new SmallMapControl()); map.addControl(new MapTypeControl()); map.setScrollWheelZoomEnabled(true); SimplePanel sizeCorrector = new SimplePanel(); sizeCorrector.add(map); sizeCorrector.setPixelSize(760,300); initWidget(sizeCorrector); } private Marker createMarker(final School school) { LatLng point = new LatLng(school.getLatitude(), school .getLongitude()); if (point.getLatitude() == -1 && point.getLongitude() == -1) { return null; } final Marker marker = new Marker(point); marker.addMarkerClickListener(new MarkerClickListener() { public void onClick(Marker sender) { InfoWindow info = map.getInfoWindow(); info.open(sender, new InfoWindowContent(new SchoolLink( school))); } public void onDoubleClick(Marker sender) { } }); return marker; } public String getHistoryName() { return "MyCollegeMap"; } public void load(User user) { this.user = user; } public void refresh() { map.checkResize(); if (user != null) { load(user); map.clearOverlays(); for (Application app : user.getSchoolRankings()) { Marker marker = createMarker(app.getSchool()); if (marker != null) { map.addOverlay(marker); } } } } }