From 1f799dd70e40176119a1f93cc7db9d369d539001 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Fri, 13 Jan 2012 23:56:29 +0100 Subject: [PATCH] boats now zoom when map is zoomed, also when paused --- .../sailing/gwt/ui/adminconsole/RaceMap.java | 73 ++++++++++++------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java index 60429714b69..60ecda19553 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/RaceMap.java @@ -203,6 +203,16 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener, @Override public void onZoomEnd(MapZoomEndEvent event) { mapZoomedOrPannedSinceLastRaceSelectionChange = true; + Set competitorDAOsOfUnusedMarkers = new HashSet(boatMarkers.keySet()); + for (CompetitorDAO competitorDAO : getCompetitorsToShow()) { + boolean usedExistingMarker = updateMarkerForCompetitor(competitorDAO); + if (usedExistingMarker) { + competitorDAOsOfUnusedMarkers.remove(competitorDAO); + } + } + for (CompetitorDAO unusedMarkerCompetitorDAO : competitorDAOsOfUnusedMarkers) { + map.removeOverlay(boatMarkers.remove(unusedMarkerCompetitorDAO)); + } } }); map.addMapDragEndHandler(new MapDragEndHandler() { @@ -498,33 +508,9 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener, newMapBounds.extend(bounds.getNorthEast()); newMapBounds.extend(bounds.getSouthWest()); } - if (lastShownFix.containsKey(competitorDAO) && lastShownFix.get(competitorDAO) != -1) { - GPSFixDAO lastPos = getBoatFix(competitorDAO); - Marker boatMarker = boatMarkers.get(competitorDAO); - if (boatMarker == null) { - boatMarker = createBoatMarker(competitorDAO, false); - map.addOverlay(boatMarker); - boatMarkers.put(competitorDAO, boatMarker); - } else { - competitorDAOsOfUnusedMarkers.remove(competitorDAO); - // check if anchors match; re-use marker with setImage only if anchors match - Point newAnchor = imageResources.getBoatImageTransformator(lastPos, - selectedMapCompetitors.contains(competitorDAO)).getAnchor(); - Point oldAnchor = boatMarker.getIcon().getIconAnchor(); - if (oldAnchor.getX() == newAnchor.getX() && oldAnchor.getY() == newAnchor.getY()) { - boatMarker.setLatLng(LatLng.newInstance(lastPos.position.latDeg, - lastPos.position.lngDeg)); - boatMarker.setImage(imageResources.getBoatImageURL(lastPos, - selectedMapCompetitors.contains(competitorDAO))); - } else { - // anchors don't match; replace marker - map.removeOverlay(boatMarker); - boatMarker = createBoatMarker(competitorDAO, - selectedMapCompetitors.contains(competitorDAO)); - map.addOverlay(boatMarker); - boatMarkers.put(competitorDAO, boatMarker); - } - } + boolean usedExistingMarker = updateMarkerForCompetitor(competitorDAO); + if (usedExistingMarker) { + competitorDAOsOfUnusedMarkers.remove(competitorDAO); } } } @@ -541,6 +527,39 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener, } } } + + private boolean updateMarkerForCompetitor(CompetitorDAO competitorDAO) { + boolean usedExistingMarker = false; + if (lastShownFix.containsKey(competitorDAO) && lastShownFix.get(competitorDAO) != -1) { + GPSFixDAO lastPos = getBoatFix(competitorDAO); + Marker boatMarker = boatMarkers.get(competitorDAO); + if (boatMarker == null) { + boatMarker = createBoatMarker(competitorDAO, false); + map.addOverlay(boatMarker); + boatMarkers.put(competitorDAO, boatMarker); + } else { + usedExistingMarker = true; + // check if anchors match; re-use marker with setImage only if anchors match + Point newAnchor = imageResources.getBoatImageTransformator(lastPos, + selectedMapCompetitors.contains(competitorDAO)).getAnchor(); + Point oldAnchor = boatMarker.getIcon().getIconAnchor(); + if (oldAnchor.getX() == newAnchor.getX() && oldAnchor.getY() == newAnchor.getY()) { + boatMarker.setLatLng(LatLng.newInstance(lastPos.position.latDeg, + lastPos.position.lngDeg)); + boatMarker.setImage(imageResources.getBoatImageURL(lastPos, + selectedMapCompetitors.contains(competitorDAO))); + } else { + // anchors don't match; replace marker + map.removeOverlay(boatMarker); + boatMarker = createBoatMarker(competitorDAO, + selectedMapCompetitors.contains(competitorDAO)); + map.addOverlay(boatMarker); + boatMarkers.put(competitorDAO, boatMarker); + } + } + } + return usedExistingMarker; + } protected Marker createBuoyMarker(final MarkDAO markDAO) { MarkerOptions options = MarkerOptions.newInstance();