aboutsummaryrefslogtreecommitdiffstats
path: root/src/cgeo/geocaching/mapsforge/mfMapView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgeo/geocaching/mapsforge/mfMapView.java')
-rw-r--r--src/cgeo/geocaching/mapsforge/mfMapView.java449
1 files changed, 225 insertions, 224 deletions
diff --git a/src/cgeo/geocaching/mapsforge/mfMapView.java b/src/cgeo/geocaching/mapsforge/mfMapView.java
index 19e3b8d..a4d1e40 100644
--- a/src/cgeo/geocaching/mapsforge/mfMapView.java
+++ b/src/cgeo/geocaching/mapsforge/mfMapView.java
@@ -1,5 +1,19 @@
package cgeo.geocaching.mapsforge;
+import cgeo.geocaching.cgSettings;
+import cgeo.geocaching.mapcommon.cgMapMyOverlay;
+import cgeo.geocaching.mapcommon.cgMapOverlay;
+import cgeo.geocaching.mapcommon.cgOverlayScale;
+import cgeo.geocaching.mapcommon.cgUsersOverlay;
+import cgeo.geocaching.mapinterfaces.GeoPointImpl;
+import cgeo.geocaching.mapinterfaces.MapControllerImpl;
+import cgeo.geocaching.mapinterfaces.MapProjectionImpl;
+import cgeo.geocaching.mapinterfaces.MapViewImpl;
+import cgeo.geocaching.mapinterfaces.OnDragListener;
+import cgeo.geocaching.mapinterfaces.OverlayBase;
+import cgeo.geocaching.mapinterfaces.OverlayImpl;
+import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType;
+
import org.mapsforge.android.maps.GeoPoint;
import org.mapsforge.android.maps.MapDatabase;
import org.mapsforge.android.maps.MapView;
@@ -14,231 +28,218 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
-import android.view.MotionEvent;
import android.view.GestureDetector.SimpleOnGestureListener;
-import cgeo.geocaching.cgSettings;
-import cgeo.geocaching.mapcommon.cgMapMyOverlay;
-import cgeo.geocaching.mapcommon.cgMapOverlay;
-import cgeo.geocaching.mapcommon.cgOverlayScale;
-import cgeo.geocaching.mapcommon.cgUsersOverlay;
-import cgeo.geocaching.mapinterfaces.GeoPointImpl;
-import cgeo.geocaching.mapinterfaces.MapControllerImpl;
-import cgeo.geocaching.mapinterfaces.MapProjectionImpl;
-import cgeo.geocaching.mapinterfaces.MapViewImpl;
-import cgeo.geocaching.mapinterfaces.OnDragListener;
-import cgeo.geocaching.mapinterfaces.OverlayBase;
-import cgeo.geocaching.mapinterfaces.OverlayImpl;
-import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType;
+import android.view.MotionEvent;
public class mfMapView extends MapView implements MapViewImpl {
- private GestureDetector gestureDetector;
- private OnDragListener onDragListener;
-
- public mfMapView(Context context, AttributeSet attrs) {
- super(context, attrs);
- gestureDetector = new GestureDetector(context, new GestureListener());
- }
-
- @Override
- public void draw(Canvas canvas) {
- try {
- if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
- getController().setZoom(22);
- }
-
- super.draw(canvas);
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgMapView.draw: " + e.toString());
- }
- }
-
- @Override
- public void displayZoomControls(boolean takeFocus) {
- // nothing to do here
- }
-
- @Override
- public MapControllerImpl getMapController() {
- return new mfMapController(getController(), getMaxZoomLevel());
- }
-
- @Override
- public GeoPointImpl getMapViewCenter() {
- GeoPoint point = getMapCenter();
- return new mfGeoPoint(point.getLatitudeE6(), point.getLongitudeE6());
- }
-
- @Override
- public void addOverlay(OverlayImpl ovl) {
- getOverlays().add((Overlay)ovl);
- }
-
- @Override
- public void clearOverlays() {
- getOverlays().clear();
- }
-
- @Override
- public MapProjectionImpl getMapProjection() {
- return new mfMapProjection(getProjection());
- }
-
- @Override
- public cgMapOverlay createAddMapOverlay(cgSettings settings,
- Context context, Drawable drawable, boolean fromDetailIntent) {
-
- mfCacheOverlay ovl = new mfCacheOverlay(settings, context, drawable, fromDetailIntent);
- getOverlays().add(ovl);
- return ovl.getBase();
- }
-
- @Override
- public cgUsersOverlay createAddUsersOverlay(Context context, Drawable markerIn) {
- mfUsersOverlay ovl = new mfUsersOverlay(context, markerIn);
- getOverlays().add(ovl);
- return ovl.getBase();
- }
-
- @Override
- public cgMapMyOverlay createAddPositionOverlay(Activity activity,
- cgSettings settingsIn) {
- mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.PositionOverlay);
- getOverlays().add(ovl);
- return (cgMapMyOverlay) ovl.getBase();
- }
-
- @Override
- public cgOverlayScale createAddScaleOverlay(Activity activity,
- cgSettings settingsIn) {
- mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.ScaleOverlay);
- getOverlays().add(ovl);
- return (cgOverlayScale) ovl.getBase();
- }
-
- @Override
- public int getLatitudeSpan() {
-
- int span = 0;
-
- Projection projection = getProjection();
-
- if (projection != null && getHeight() > 0) {
-
- GeoPoint low = projection.fromPixels(0, 0);
- GeoPoint high = projection.fromPixels(0, getHeight());
-
- if (low != null && high != null) {
- span = Math.abs(high.getLatitudeE6() - low.getLatitudeE6());
- }
- }
-
- return span;
- }
-
- @Override
- public int getLongitudeSpan() {
-
- int span = 0;
-
- Projection projection = getProjection();
-
- if (projection != null && getWidth() > 0) {
- GeoPoint low = projection.fromPixels(0, 0);
- GeoPoint high = projection.fromPixels(getWidth(), 0);
-
- if (low != null && high != null) {
- span = Math.abs(high.getLongitudeE6() - low.getLongitudeE6());
- }
- }
-
- return span;
- }
-
- @Override
- public void preLoad() {
- // Nothing to do here
- }
-
- @Override
- public int getMapZoomLevel() {
- return getZoomLevel()+1;
- }
-
- @Override
- public boolean needsScaleOverlay() {
- return false;
- }
-
- @Override
- public void setBuiltinScale(boolean b) {
- setScaleBar(b);
- }
-
- @Override
- public void setMapSource(cgSettings settings) {
-
- switch(settings.mapSource) {
- case mapsforgeOsmarender:
- setMapViewMode(MapViewMode.OSMARENDER_TILE_DOWNLOAD);
- break;
- case mapsforgeCycle:
- setMapViewMode(MapViewMode.OPENCYCLEMAP_TILE_DOWNLOAD);
- break;
- case mapsforgeOffline:
- if (MapDatabase.isValidMapFile(settings.getMapFile())) {
- setMapViewMode(MapViewMode.CANVAS_RENDERER);
- super.setMapFile(settings.getMapFile());
- } else {
- setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD);
- }
- break;
- default:
- setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD);
- }
- }
-
- @Override
- public void repaintRequired(OverlayBase overlay) {
-
- try {
- mfOverlay ovl = (mfOverlay) overlay.getOverlayImpl();
-
- if (ovl != null) {
- ovl.requestRedraw();
- }
-
- } catch (Exception e) {
- Log.e(cgSettings.tag, "mfMapView.repaintRequired: " + e.toString());
- }
- }
-
- @Override
- public void setOnDragListener(OnDragListener onDragListener) {
- this.onDragListener = onDragListener;
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- gestureDetector.onTouchEvent(ev);
- return super.onTouchEvent(ev);
- }
-
- private class GestureListener extends SimpleOnGestureListener {
- @Override
- public boolean onDoubleTap(MotionEvent e) {
- if (onDragListener != null) {
- onDragListener.onDrag();
- }
- return true;
- }
-
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2,
- float distanceX, float distanceY) {
- if (onDragListener != null) {
- onDragListener.onDrag();
- }
- return super.onScroll(e1, e2, distanceX, distanceY);
- }
- }
+ private GestureDetector gestureDetector;
+ private OnDragListener onDragListener;
+
+ public mfMapView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ gestureDetector = new GestureDetector(context, new GestureListener());
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ try {
+ if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series)
+ getController().setZoom(22);
+ }
+
+ super.draw(canvas);
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgMapView.draw: " + e.toString());
+ }
+ }
+
+ @Override
+ public void displayZoomControls(boolean takeFocus) {
+ // nothing to do here
+ }
+
+ @Override
+ public MapControllerImpl getMapController() {
+ return new mfMapController(getController(), getMaxZoomLevel());
+ }
+
+ @Override
+ public GeoPointImpl getMapViewCenter() {
+ GeoPoint point = getMapCenter();
+ return new mfGeoPoint(point.getLatitudeE6(), point.getLongitudeE6());
+ }
+
+ @Override
+ public void addOverlay(OverlayImpl ovl) {
+ getOverlays().add((Overlay) ovl);
+ }
+
+ @Override
+ public void clearOverlays() {
+ getOverlays().clear();
+ }
+
+ @Override
+ public MapProjectionImpl getMapProjection() {
+ return new mfMapProjection(getProjection());
+ }
+
+ @Override
+ public cgMapOverlay createAddMapOverlay(cgSettings settings,
+ Context context, Drawable drawable, boolean fromDetailIntent) {
+
+ mfCacheOverlay ovl = new mfCacheOverlay(settings, context, drawable, fromDetailIntent);
+ getOverlays().add(ovl);
+ return ovl.getBase();
+ }
+
+ @Override
+ public cgUsersOverlay createAddUsersOverlay(Context context, Drawable markerIn) {
+ mfUsersOverlay ovl = new mfUsersOverlay(context, markerIn);
+ getOverlays().add(ovl);
+ return ovl.getBase();
+ }
+
+ @Override
+ public cgMapMyOverlay createAddPositionOverlay(Activity activity,
+ cgSettings settingsIn) {
+ mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.PositionOverlay);
+ getOverlays().add(ovl);
+ return (cgMapMyOverlay) ovl.getBase();
+ }
+
+ @Override
+ public cgOverlayScale createAddScaleOverlay(Activity activity,
+ cgSettings settingsIn) {
+ mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.ScaleOverlay);
+ getOverlays().add(ovl);
+ return (cgOverlayScale) ovl.getBase();
+ }
+
+ @Override
+ public int getLatitudeSpan() {
+
+ int span = 0;
+
+ Projection projection = getProjection();
+
+ if (projection != null && getHeight() > 0) {
+
+ GeoPoint low = projection.fromPixels(0, 0);
+ GeoPoint high = projection.fromPixels(0, getHeight());
+
+ if (low != null && high != null) {
+ span = Math.abs(high.getLatitudeE6() - low.getLatitudeE6());
+ }
+ }
+
+ return span;
+ }
+
+ @Override
+ public int getLongitudeSpan() {
+
+ int span = 0;
+
+ Projection projection = getProjection();
+
+ if (projection != null && getWidth() > 0) {
+ GeoPoint low = projection.fromPixels(0, 0);
+ GeoPoint high = projection.fromPixels(getWidth(), 0);
+
+ if (low != null && high != null) {
+ span = Math.abs(high.getLongitudeE6() - low.getLongitudeE6());
+ }
+ }
+
+ return span;
+ }
+
+ @Override
+ public void preLoad() {
+ // Nothing to do here
+ }
+
+ @Override
+ public int getMapZoomLevel() {
+ return getZoomLevel() + 1;
+ }
+
+ @Override
+ public boolean needsScaleOverlay() {
+ return false;
+ }
+
+ @Override
+ public void setBuiltinScale(boolean b) {
+ setScaleBar(b);
+ }
+
+ @Override
+ public void setMapSource(cgSettings settings) {
+
+ switch (settings.mapSource) {
+ case mapsforgeOsmarender:
+ setMapViewMode(MapViewMode.OSMARENDER_TILE_DOWNLOAD);
+ break;
+ case mapsforgeCycle:
+ setMapViewMode(MapViewMode.OPENCYCLEMAP_TILE_DOWNLOAD);
+ break;
+ case mapsforgeOffline:
+ if (MapDatabase.isValidMapFile(settings.getMapFile())) {
+ setMapViewMode(MapViewMode.CANVAS_RENDERER);
+ super.setMapFile(settings.getMapFile());
+ } else {
+ setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD);
+ }
+ break;
+ default:
+ setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD);
+ }
+ }
+
+ @Override
+ public void repaintRequired(OverlayBase overlay) {
+
+ try {
+ mfOverlay ovl = (mfOverlay) overlay.getOverlayImpl();
+
+ if (ovl != null) {
+ ovl.requestRedraw();
+ }
+
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "mfMapView.repaintRequired: " + e.toString());
+ }
+ }
+
+ @Override
+ public void setOnDragListener(OnDragListener onDragListener) {
+ this.onDragListener = onDragListener;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ gestureDetector.onTouchEvent(ev);
+ return super.onTouchEvent(ev);
+ }
+
+ private class GestureListener extends SimpleOnGestureListener {
+ @Override
+ public boolean onDoubleTap(MotionEvent e) {
+ if (onDragListener != null) {
+ onDragListener.onDrag();
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onScroll(MotionEvent e1, MotionEvent e2,
+ float distanceX, float distanceY) {
+ if (onDragListener != null) {
+ onDragListener.onDrag();
+ }
+ return super.onScroll(e1, e2, distanceX, distanceY);
+ }
+ }
}