001 package com.google.gwt.maps.client.drawinglib; 002 003 import com.google.gwt.core.client.JavaScriptObject; 004 import com.google.gwt.event.shared.HandlerRegistration; 005 import com.google.gwt.maps.client.MapImpl; 006 import com.google.gwt.maps.client.MapWidget; 007 import com.google.gwt.maps.client.events.MapEventType; 008 import com.google.gwt.maps.client.events.MapHandlerRegistration; 009 import com.google.gwt.maps.client.events.overlaycomplete.OverlayCompleteEventFormatter; 010 import com.google.gwt.maps.client.events.overlaycomplete.OverlayCompleteMapHandler; 011 import com.google.gwt.maps.client.events.overlaycomplete.circle.CircleCompleteEventFormatter; 012 import com.google.gwt.maps.client.events.overlaycomplete.circle.CircleCompleteMapHandler; 013 import com.google.gwt.maps.client.events.overlaycomplete.marker.MarkerCompleteEventFormatter; 014 import com.google.gwt.maps.client.events.overlaycomplete.marker.MarkerCompleteMapHandler; 015 import com.google.gwt.maps.client.events.overlaycomplete.polygon.PolygonCompleteEventFormatter; 016 import com.google.gwt.maps.client.events.overlaycomplete.polygon.PolygonCompleteMapHandler; 017 import com.google.gwt.maps.client.events.overlaycomplete.polyline.PolylineCompleteEventFormatter; 018 import com.google.gwt.maps.client.events.overlaycomplete.polyline.PolylineCompleteMapHandler; 019 import com.google.gwt.maps.client.events.overlaycomplete.rectangle.RectangleCompleteEventFormatter; 020 import com.google.gwt.maps.client.events.overlaycomplete.rectangle.RectangleCompleteMapHandler; 021 import com.google.gwt.maps.client.mvc.MVCObject; 022 023 /** 024 * Allows users to draw markers, polygons, polylines, rectangles, and circles on the map. The DrawingManager's drawing mode defines the type of overlay that will be created by the user. Adds a control to the map, allowing the user to switch drawing mode. This class extends MVCObject. 025 * <br><br> 026 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#DrawingManager">DrawingManager API Doc</a> 027 */ 028 public class DrawingManager extends MVCObject<DrawingManager> { 029 030 /** 031 * use newInstance(); 032 */ 033 protected DrawingManager() {} 034 035 /** 036 * Creates a DrawingManager that allows users to draw overlays on the map, and switch between the type of overlay to be drawn with a drawing control. 037 * @param options 038 */ 039 public static final DrawingManager newInstance(DrawingManagerOptions options) { 040 return createJso(options).cast(); 041 } 042 043 private static native JavaScriptObject createJso(DrawingManagerOptions options) /*-{ 044 return new $wnd.google.maps.drawing.DrawingManager(options); 045 }-*/; 046 047 /** 048 * Returns the DrawingManager's drawing mode. 049 */ 050 public final OverlayType getDrawingMode() { 051 return OverlayType.fromValue(getDrawingModeImpl()); 052 } 053 054 private final native String getDrawingModeImpl() /*-{ 055 return this.getDrawingMode(); 056 }-*/; 057 058 /** 059 * Changes the DrawingManager's drawing mode, which defines the type of overlay to be added on the map. Accepted values are MARKER, POLYGON, POLYLINE, RECTANGLE, CIRCLE, or null. A drawing mode of null means that the user can interact with the map as normal, and clicks do not draw anything. 060 * @param drawingMode 061 */ 062 public final void setDrawingMode(OverlayType drawingMode) { 063 setDrawingModeImpl(drawingMode.value()); 064 } 065 066 private final native void setDrawingModeImpl(String drawingMode) /*-{ 067 this.setDrawingMode(drawingmode); 068 }-*/; 069 070 /** 071 * Attaches the DrawingManager object to the specified Map. 072 * @param mapWidget 073 */ 074 public final void setMap(MapWidget mapWidget) { 075 setMapImpl(mapWidget.getJso()); 076 } 077 078 private final native void setMapImpl(MapImpl map) /*-{ 079 this.setMap(map); 080 }-*/; 081 082 /** 083 * Returns the Map to which the DrawingManager is attached, which is the Map on which the overlays created will be placed. 084 */ 085 public final MapWidget getMap() { 086 return MapWidget.newInstance(getMapImpl()); 087 } 088 089 private final native MapImpl getMapImpl() /*-{ 090 return this.getMap(); 091 }-*/; 092 093 /** 094 * This event is fired when the user has finished drawing a circle. 095 * @param handler 096 */ 097 public final HandlerRegistration addCircleCompleteHandler(CircleCompleteMapHandler handler) { 098 return MapHandlerRegistration.addHandlerDrawing(this, MapEventType.CIRCLECOMPLETE, handler, new CircleCompleteEventFormatter()); 099 } 100 101 /** 102 * This event is fired when the user has finished drawing a marker. 103 * @param handler 104 */ 105 public final HandlerRegistration addMarkerCompleteHandler(MarkerCompleteMapHandler handler) { 106 return MapHandlerRegistration.addHandlerDrawing(this, MapEventType.MARKERCOMPLETE, handler, new MarkerCompleteEventFormatter()); 107 } 108 109 /** 110 * This event is fired when the user has finished drawing an overlay of any type. 111 * @param handler 112 */ 113 public final HandlerRegistration addOverlayCompleteHandler(OverlayCompleteMapHandler handler) { 114 return MapHandlerRegistration.addHandler(this, MapEventType.OVERLAYCOMPLETE, handler, new OverlayCompleteEventFormatter()); 115 } 116 117 /** 118 * This event is fired when the user has finished drawing a polygon. 119 * @param handler 120 */ 121 public final HandlerRegistration addPolygonCompleteHandler(PolygonCompleteMapHandler handler) { 122 return MapHandlerRegistration.addHandlerDrawing(this, MapEventType.POLYGONCOMPLETE, handler, new PolygonCompleteEventFormatter()); 123 } 124 125 /** 126 * This event is fired when the user has finished drawing a polyline. 127 * @param handler 128 */ 129 public final HandlerRegistration addPolylineCompleteHandler(PolylineCompleteMapHandler handler) { 130 return MapHandlerRegistration.addHandlerDrawing(this, MapEventType.POLYLINECOMPLETE, handler, new PolylineCompleteEventFormatter()); 131 } 132 133 /** 134 * This event is fired when the user has finished drawing a rectangle. 135 * @param handler 136 */ 137 public final HandlerRegistration addRectangleCompleteHandler(RectangleCompleteMapHandler handler) { 138 return MapHandlerRegistration.addHandlerDrawing(this, MapEventType.RECTANGLECOMPLETE, handler, new RectangleCompleteEventFormatter()); 139 } 140 141 }