package cgeo.geocaching.maps; import cgeo.geocaching.storage.DataStore; import cgeo.geocaching.location.Geopoint; import cgeo.geocaching.location.Viewport; import cgeo.geocaching.maps.interfaces.GeneralOverlay; import cgeo.geocaching.maps.interfaces.MapProjectionImpl; import cgeo.geocaching.maps.interfaces.MapViewImpl; import cgeo.geocaching.maps.interfaces.OverlayImpl; import android.graphics.Canvas; import android.graphics.Point; import android.location.Location; import java.util.ArrayList; public class PositionAndScaleOverlay implements GeneralOverlay { private OverlayImpl ovlImpl = null; PositionDrawer positionDrawer = null; ScaleDrawer scaleDrawer = null; DirectionDrawer directionDrawer = null; DistanceDrawer distanceDrawer = null; public PositionAndScaleOverlay(final OverlayImpl ovlImpl, final MapViewImpl mapView, final Geopoint coords, final String geocode) { this.ovlImpl = ovlImpl; positionDrawer = new PositionDrawer(); scaleDrawer = new ScaleDrawer(); if (coords != null) { directionDrawer = new DirectionDrawer(coords); distanceDrawer = new DistanceDrawer(mapView, coords); } else if (geocode != null) { final Viewport bounds = DataStore.getBounds(geocode); if (bounds != null) { directionDrawer = new DirectionDrawer(bounds.center); distanceDrawer = new DistanceDrawer(mapView, bounds.center); } } } public void setCoordinates(final Location coordinatesIn) { positionDrawer.setCoordinates(coordinatesIn); if (directionDrawer != null) { directionDrawer.setCoordinates(coordinatesIn); distanceDrawer.setCoordinates(coordinatesIn); } } public Location getCoordinates() { return positionDrawer.getCoordinates(); } public void setHeading(final float bearingNow) { positionDrawer.setHeading(bearingNow); } public float getHeading() { return positionDrawer.getHeading(); } @Override public void drawOverlayBitmap(final Canvas canvas, final Point drawPosition, final MapProjectionImpl projection, final byte drawZoomLevel) { drawInternal(canvas, projection, getOverlayImpl().getMapViewImpl()); } @Override public void draw(final Canvas canvas, final MapViewImpl mapView, final boolean shadow) { drawInternal(canvas, mapView.getMapProjection(), mapView); } private void drawInternal(final Canvas canvas, final MapProjectionImpl projection, final MapViewImpl mapView) { if (directionDrawer != null) { directionDrawer.drawDirection(canvas, projection); } positionDrawer.drawPosition(canvas, projection); scaleDrawer.drawScale(canvas, mapView); if (distanceDrawer != null) { distanceDrawer.drawDistance(canvas); } } @Override public OverlayImpl getOverlayImpl() { return this.ovlImpl; } public ArrayList<Location> getHistory() { return positionDrawer.getHistory(); } public void setHistory(final ArrayList<Location> history) { positionDrawer.setHistory(history); } }