boats now zoom when map is zoomed, also when paused

This commit is contained in:
Axel Uhl committed 2012-01-13 23:56:29 +01:00
1 parent b630be9418
commit 1f799dd70e
1 file changed
+34 -15
@@ -203,6 +203,16 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
@Override
public void onZoomEnd(MapZoomEndEvent event) {
mapZoomedOrPannedSinceLastRaceSelectionChange = true;
Set<CompetitorDAO> competitorDAOsOfUnusedMarkers = new HashSet<CompetitorDAO>(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,6 +508,28 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
newMapBounds.extend(bounds.getNorthEast());
newMapBounds.extend(bounds.getSouthWest());
}
boolean usedExistingMarker = updateMarkerForCompetitor(competitorDAO);
if (usedExistingMarker) {
competitorDAOsOfUnusedMarkers.remove(competitorDAO);
}
}
}
if (!mapZoomedOrPannedSinceLastRaceSelectionChange && newMapBounds != null) {
map.setZoomLevel(map.getBoundsZoomLevel(newMapBounds));
map.setCenter(newMapBounds.getCenter());
mapFirstZoomDone = true;
}
for (CompetitorDAO unusedMarkerCompetitorDAO : competitorDAOsOfUnusedMarkers) {
map.removeOverlay(boatMarkers.remove(unusedMarkerCompetitorDAO));
}
for (CompetitorDAO unusedTailCompetitorDAO : competitorDAOsOfUnusedTails) {
map.removeOverlay(tails.remove(unusedTailCompetitorDAO));
}
}
}
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);
@@ -506,7 +538,7 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
map.addOverlay(boatMarker);
boatMarkers.put(competitorDAO, boatMarker);
} else {
competitorDAOsOfUnusedMarkers.remove(competitorDAO);
usedExistingMarker = true;
// check if anchors match; re-use marker with setImage only if anchors match
Point newAnchor = imageResources.getBoatImageTransformator(lastPos,
selectedMapCompetitors.contains(competitorDAO)).getAnchor();
@@ -526,20 +558,7 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
}
}
}
}
}
if (!mapZoomedOrPannedSinceLastRaceSelectionChange && newMapBounds != null) {
map.setZoomLevel(map.getBoundsZoomLevel(newMapBounds));
map.setCenter(newMapBounds.getCenter());
mapFirstZoomDone = true;
}
for (CompetitorDAO unusedMarkerCompetitorDAO : competitorDAOsOfUnusedMarkers) {
map.removeOverlay(boatMarkers.remove(unusedMarkerCompetitorDAO));
}
for (CompetitorDAO unusedTailCompetitorDAO : competitorDAOsOfUnusedTails) {
map.removeOverlay(tails.remove(unusedTailCompetitorDAO));
}
}
return usedExistingMarker;
}
protected Marker createBuoyMarker(final MarkDAO markDAO) {