001 package com.google.gwt.maps.client.overlays;
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.base.LatLng;
008 import com.google.gwt.maps.client.base.LatLngBounds;
009 import com.google.gwt.maps.client.events.MapEventType;
010 import com.google.gwt.maps.client.events.MapHandlerRegistration;
011 import com.google.gwt.maps.client.events.center.CenterChangeEventFormatter;
012 import com.google.gwt.maps.client.events.center.CenterChangeMapHandler;
013 import com.google.gwt.maps.client.events.click.ClickEventFormatter;
014 import com.google.gwt.maps.client.events.click.ClickMapHandler;
015 import com.google.gwt.maps.client.events.dblclick.DblClickEventFormatter;
016 import com.google.gwt.maps.client.events.dblclick.DblClickMapHandler;
017 import com.google.gwt.maps.client.events.mousedown.MouseDownEventFormatter;
018 import com.google.gwt.maps.client.events.mousedown.MouseDownMapHandler;
019 import com.google.gwt.maps.client.events.mousemove.MouseMoveEventFormatter;
020 import com.google.gwt.maps.client.events.mousemove.MouseMoveMapHandler;
021 import com.google.gwt.maps.client.events.mouseout.MouseOutEventFormatter;
022 import com.google.gwt.maps.client.events.mouseout.MouseOutMapHandler;
023 import com.google.gwt.maps.client.events.mouseover.MouseOverEventFormatter;
024 import com.google.gwt.maps.client.events.mouseover.MouseOverMapHandler;
025 import com.google.gwt.maps.client.events.mouseup.MouseUpEventFormatter;
026 import com.google.gwt.maps.client.events.mouseup.MouseUpMapHandler;
027 import com.google.gwt.maps.client.events.radius.RadiusChangeEventFormatter;
028 import com.google.gwt.maps.client.events.radius.RadiusChangeMapHandler;
029 import com.google.gwt.maps.client.events.rightclick.RightClickEventFormatter;
030 import com.google.gwt.maps.client.events.rightclick.RightClickMapHandler;
031 import com.google.gwt.maps.client.mvc.MVCObject;
032
033 /**
034 * A circle overlay. This class extends MVCObject. <br>
035 * <br>
036 * See <a href=
037 * "https://developers.google.com/maps/documentation/javascript/reference#Circle"
038 * >Circle API Doc</a>
039 */
040 public class Circle extends MVCObject<Circle> {
041
042 /**
043 * use newInstance();
044 */
045 protected Circle() {
046 }
047
048 /**
049 * Create a circle using the passed CircleOptions, which specify the bounds
050 * and style.
051 *
052 * @param options
053 */
054 public final static Circle newInstance(CircleOptions options) {
055 return createJso(options).cast();
056 }
057
058 private final static native JavaScriptObject createJso(CircleOptions options) /*-{
059 return new $wnd.google.maps.Circle(options);
060 }-*/;
061
062 /**
063 * Returns the bounds of this circle.
064 */
065 public final native LatLngBounds getBounds() /*-{
066 return this.getBounds();
067 }-*/;
068
069 /**
070 * Returns the center of this circle.
071 */
072 public final native LatLng getCenter() /*-{
073 return this.getCenter();
074 }-*/;
075
076 /**
077 * Returns whether this circle can be edited by the user.
078 */
079 public final native boolean getEditable() /*-{
080 return this.getEditable();
081 }-*/;
082
083 /**
084 * Renders the circle on the specified map. If map is set to null, the
085 * circle will be removed.
086 *
087 * @param mapWidget
088 */
089 public final void setMap(MapWidget mapWidget) {
090 if (mapWidget == null) {
091 setMapImpl(null);
092 } else {
093 setMapImpl(mapWidget.getJso());
094 }
095 }
096
097 private final native void setMapImpl(MapImpl map) /*-{
098 this.map = map;
099 }-*/;
100
101 /**
102 * Returns the map on which this circle is displayed.
103 */
104 public final MapWidget getMap() {
105 return MapWidget.newInstance(getMapImpl());
106 }
107
108 private final native MapImpl getMapImpl() /*-{
109 return this.map;
110 }-*/;
111
112 /**
113 * If set to true, the user can edit this circle by dragging the control
114 * points shown at the corners and on each edge.
115 *
116 * @param editable
117 */
118 public final native void setEditable(boolean editable) /*-{
119 this.setEditable(editable);
120 }-*/;
121
122 /**
123 * sets the Circle options
124 *
125 * @param options
126 */
127 public final native void setOptions(CircleOptions options) /*-{
128 this.options = options;
129 }-*/;
130
131 /**
132 * Sets the radius of this circle (in meters).
133 *
134 * @param radius
135 */
136 public final native void setRadius(double radius) /*-{
137 this.setRadius(radius);
138 }-*/;
139
140 /**
141 * Returns the radius of this circle (in meters).
142 */
143 public final native double getRadius() /*-{
144 return this.getRadius();
145 }-*/;
146
147 /**
148 * add center change handler
149 *
150 * @param handler
151 */
152 public final HandlerRegistration addCenterChangeHandler(
153 CenterChangeMapHandler handler) {
154 return MapHandlerRegistration.addHandler(this,
155 MapEventType.CENTER_CHANGED, handler,
156 new CenterChangeEventFormatter());
157 }
158
159 /**
160 * This event is fired when the DOM click event is fired on the Circle.
161 *
162 * @param handler
163 */
164 public final HandlerRegistration addClickHandler(ClickMapHandler handler) {
165 return MapHandlerRegistration.addHandler(this, MapEventType.CLICK,
166 handler, new ClickEventFormatter());
167 }
168
169 /**
170 * This event is fired when the DOM dblclick event is fired on the Circle.
171 *
172 * @param handler
173 */
174 public final HandlerRegistration addDblClickHandler(
175 DblClickMapHandler handler) {
176 return MapHandlerRegistration.addHandler(this, MapEventType.DBLCLICK,
177 handler, new DblClickEventFormatter());
178 }
179
180 /**
181 * This event is fired when the DOM mousedown event is fired on the Circle.
182 *
183 * @param handler
184 */
185 public final HandlerRegistration addMouseDownHandler(
186 MouseDownMapHandler handler) {
187 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEDOWN,
188 handler, new MouseDownEventFormatter());
189 }
190
191 /**
192 * This event is fired when the DOM mousemove event is fired on the Circle.
193 *
194 * @param handler
195 */
196 public final HandlerRegistration addMouseMoveHandler(
197 MouseMoveMapHandler handler) {
198 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEMOVE,
199 handler, new MouseMoveEventFormatter());
200 }
201
202 /**
203 * This event is fired on Circle mouseout.
204 *
205 * @param handler
206 */
207 public final HandlerRegistration addMouseOutMoveHandler(
208 MouseOutMapHandler handler) {
209 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOUT,
210 handler, new MouseOutEventFormatter());
211 }
212
213 /**
214 * This event is fired on Circle mouseover.
215 *
216 * @param handler
217 */
218 public final HandlerRegistration addMouseOverHandler(
219 MouseOverMapHandler handler) {
220 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOVER,
221 handler, new MouseOverEventFormatter());
222 }
223
224 /**
225 * This event is fired when the DOM mouseup event is fired on the Circle.
226 *
227 * @param handler
228 */
229 public final HandlerRegistration addMouseUpHandler(MouseUpMapHandler handler) {
230 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEUP,
231 handler, new MouseUpEventFormatter());
232 }
233
234 /**
235 * This event is fired when the circle's radius is changed.
236 *
237 * @param handler
238 */
239 public final HandlerRegistration addRadiusChangeHandler(
240 RadiusChangeMapHandler handler) {
241 return MapHandlerRegistration.addHandler(this,
242 MapEventType.RADIUS_CHANGED, handler,
243 new RadiusChangeEventFormatter());
244 }
245
246 /**
247 * This event is fired when the Circle is right-clicked on.
248 *
249 * @param handler
250 */
251 public final HandlerRegistration addRightClickHandler(
252 RightClickMapHandler handler) {
253 return MapHandlerRegistration.addHandler(this, MapEventType.RIGHTCLICK,
254 handler, new RightClickEventFormatter());
255 }
256
257 }