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.events.MapEventType;
009 import com.google.gwt.maps.client.events.MapHandlerRegistration;
010 import com.google.gwt.maps.client.events.animation.AnimationChangeEventFormatter;
011 import com.google.gwt.maps.client.events.animation.AnimationChangeMapHandler;
012 import com.google.gwt.maps.client.events.click.ClickEventFormatter;
013 import com.google.gwt.maps.client.events.click.ClickMapHandler;
014 import com.google.gwt.maps.client.events.clickable.ClickableChangeEventFormatter;
015 import com.google.gwt.maps.client.events.clickable.ClickableChangeMapHandler;
016 import com.google.gwt.maps.client.events.cursor.CursorChangeEventFormatter;
017 import com.google.gwt.maps.client.events.cursor.CursorChangeMapHandler;
018 import com.google.gwt.maps.client.events.dblclick.DblClickEventFormatter;
019 import com.google.gwt.maps.client.events.dblclick.DblClickMapHandler;
020 import com.google.gwt.maps.client.events.drag.DragEventFormatter;
021 import com.google.gwt.maps.client.events.drag.DragMapHandler;
022 import com.google.gwt.maps.client.events.dragend.DragEndEventFormatter;
023 import com.google.gwt.maps.client.events.dragend.DragEndMapHandler;
024 import com.google.gwt.maps.client.events.draggable.DraggableChangeEventFormatter;
025 import com.google.gwt.maps.client.events.draggable.DraggableChangeMapHandler;
026 import com.google.gwt.maps.client.events.dragstart.DragStartEventFormatter;
027 import com.google.gwt.maps.client.events.dragstart.DragStartMapHandler;
028 import com.google.gwt.maps.client.events.flat.FlatChangeEventFormatter;
029 import com.google.gwt.maps.client.events.flat.FlatChangeMapHandler;
030 import com.google.gwt.maps.client.events.icon.IconChangeEventFormatter;
031 import com.google.gwt.maps.client.events.icon.IconChangeMapHandler;
032 import com.google.gwt.maps.client.events.mousedown.MouseDownEventFormatter;
033 import com.google.gwt.maps.client.events.mousedown.MouseDownMapHandler;
034 import com.google.gwt.maps.client.events.mouseout.MouseOutEventFormatter;
035 import com.google.gwt.maps.client.events.mouseout.MouseOutMapHandler;
036 import com.google.gwt.maps.client.events.mouseover.MouseOverEventFormatter;
037 import com.google.gwt.maps.client.events.mouseover.MouseOverMapHandler;
038 import com.google.gwt.maps.client.events.mouseup.MouseUpEventFormatter;
039 import com.google.gwt.maps.client.events.mouseup.MouseUpMapHandler;
040 import com.google.gwt.maps.client.events.projection.ProjectionChangeEventFormatter;
041 import com.google.gwt.maps.client.events.projection.ProjectionChangeMapHandler;
042 import com.google.gwt.maps.client.events.rightclick.RightClickEventFormatter;
043 import com.google.gwt.maps.client.events.rightclick.RightClickMapHandler;
044 import com.google.gwt.maps.client.events.shadow.ShadowChangeEventFormatter;
045 import com.google.gwt.maps.client.events.shadow.ShadowChangeMapHandler;
046 import com.google.gwt.maps.client.events.shape.ShapeChangeEventFormatter;
047 import com.google.gwt.maps.client.events.shape.ShapeChangeMapHandler;
048 import com.google.gwt.maps.client.events.title.TitleChangeEventFormatter;
049 import com.google.gwt.maps.client.events.title.TitleChangeMapHandler;
050 import com.google.gwt.maps.client.events.visible.VisibleChangeEventFormatter;
051 import com.google.gwt.maps.client.events.visible.VisibleChangeMapHandler;
052 import com.google.gwt.maps.client.events.zindex.ZindexChangeEventFormatter;
053 import com.google.gwt.maps.client.events.zindex.ZindexChangeMapHandler;
054 import com.google.gwt.maps.client.mvc.MVCObject;
055 import com.google.gwt.maps.client.streetview.StreetViewPanoramaImpl;
056 import com.google.gwt.maps.client.streetview.StreetViewPanoramaWidget;
057
058 /**
059 * Creates a marker with the options specified. If a map is specified, the marker is added to the map upon construction. Note that the position must be set for the marker to display.
060 * This class extends MVCObject.
061 * <br><br>
062 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#Marker">Marker API Doc</a>
063 */
064 public class Marker extends MVCObject<Marker> {
065
066 /**
067 * Creates a marker with the options specified. If a map is specified, the marker is added to the map upon construction. Note that the position must be set for the marker to display.
068 * use newInstance();
069 */
070 protected Marker() {}
071
072 /**
073 * Creates a marker with the options specified. If a map is specified, the marker is added to the map upon construction. Note that the position must be set for the marker to display.
074 * @param options {@link MarkerOptions}
075 */
076 public static Marker newInstance(MarkerOptions options) {
077 return createJso(options).cast();
078 }
079
080 private static final native JavaScriptObject createJso(MarkerOptions options) /*-{
081 return new $wnd.google.maps.Marker(options);
082 }-*/;
083
084 /**
085 * get animation
086 */
087 public final Animation getAnimation() {
088 String animation = getAnimationImpl();
089 if (animation == null) {
090 return null;
091 }
092 return Animation.fromValue(animation);
093 }
094
095 private final native String getAnimationImpl() /*-{
096 return this.getAnimation();
097 }-*/;
098
099 /**
100 * get Clickable
101 */
102 public final native boolean getClickable() /*-{
103 return this.getClickable();
104 }-*/;
105
106 /**
107 * get Cursor
108 */
109 public final native String getCursor() /*-{
110 return this.getCursor();
111 }-*/;
112
113 /**
114 * get Draggable
115 */
116 public final native boolean getDraggable() /*-{
117 return this.getDraggable();
118 }-*/;
119
120 /**
121 * get Flat
122 */
123 public final native boolean getFlat() /*-{
124 return this.getFlat();
125 }-*/;
126
127 /**
128 * get Icon (if its a string use this)
129 */
130 public final native String getIcon_String() /*-{
131 return this.getIcon();
132 }-*/;
133
134 /**
135 * get Icon (if it is a marker image)
136 */
137 public final native MarkerImage getIcon_MarkerImage() /*-{
138 return this.getIcon();
139 }-*/;
140
141 public final MapWidget getMap() {
142 return MapWidget.newInstance(getMapImpl());
143 }
144
145 private final native MapImpl getMapImpl() /*-{
146 return this.getMap();
147 }-*/;;
148
149 /**
150 * get Map (if it is a pano)
151 */
152 public final StreetViewPanoramaWidget getMap_StreetViewPanorama() {
153 return StreetViewPanoramaWidget.newInstance(getMap_StreetViewPanoramaImpl());
154 }
155
156 private final native StreetViewPanoramaImpl getMap_StreetViewPanoramaImpl() /*-{
157 return this.getMap();
158 }-*/;
159
160 /**
161 * get Position
162 */
163 public final native LatLng getPosition() /*-{
164 return this.getPosition();
165 }-*/;
166
167 /**
168 * get Shadow (if it is a String)
169 */
170 public final native String getShadow_String() /*-{
171 return this.getShadow();
172 }-*/;
173
174 /**
175 * get Shadow (if it is a MarkerImage)
176 */
177 public final native MarkerImage getShadow_MarkerImage() /*-{
178 return this.getShadow();
179 }-*/;
180
181 /**
182 * get Shape
183 */
184 public final native MarkerShape getShape() /*-{
185 return this.getShape();
186 }-*/;
187
188 /**
189 * get Title
190 */
191 public final native String getTitle() /*-{
192 return this.getTitle();
193 }-*/;
194
195 /**
196 * get Visible
197 */
198 public final native boolean getVisible() /*-{
199 return this.getVisible();
200 }-*/;
201
202 /**
203 * get Z Index
204 */
205 public final native int getZindex() /*-{
206 return this.getZIndex();
207 }-*/;
208
209 /**
210 * set Animation
211 * @param animation
212 */
213 public final void setAnimation(Animation animation) {
214 setAnimationImpl(animation.value());
215 }
216
217 private final native void setAnimationImpl(String animation) /*-{
218 this.setAnimation(animation);
219 }-*/;
220
221 /**
222 * set Clickable
223 * @param clickable
224 */
225 public final native void setClickable(boolean clickable) /*-{
226 this.setClickable(clickable);
227 }-*/;
228
229 /**
230 * set Cursor
231 * @param cursor
232 */
233 public final native void setCursor(String cursor) /*-{
234 this.setCursor(cursor);
235 }-*/;
236
237 /**
238 * set Draggable
239 * @param draggable
240 */
241 public final native void setDraggable(boolean draggable) /*-{
242 this.setDraggable(draggable);
243 }-*/;
244
245 /**
246 * set Flat
247 * @param flat
248 */
249 public final native void setFlat(boolean flat) /*-{
250 this.setFlat(flat);
251 }-*/;
252
253 /**
254 * set Icon
255 * @param icon
256 */
257 public final native void setIcon(String icon) /*-{
258 this.setIcon(icon);
259 }-*/;
260
261 /**
262 * set Icon
263 * @param icon
264 */
265 public final native void setIcon(MarkerImage icon) /*-{
266 this.setIcon(icon);
267 }-*/;
268
269 /**
270 * set Map
271 * @param mapWidget
272 */
273 public final void setMap(MapWidget mapWidget) {
274 if (mapWidget == null) {
275 close();
276 } else {
277 setMapImpl(mapWidget.getJso());
278 }
279 }
280
281 private final native void setMapImpl(MapImpl map) /*-{
282 this.setMap(map);
283 }-*/;
284
285 /**
286 * set Map
287 * @param pano
288 */
289 public final void setMap(StreetViewPanoramaWidget pano) {
290 setMapImpl(pano.getJso());
291 }
292
293 private final native void setMapImpl(StreetViewPanoramaImpl pano) /*-{
294 this.setMap(pano);
295 }-*/;
296
297 /**
298 * set Options
299 * @param options
300 */
301 public final native void setOptions(MarkerOptions options) /*-{
302 this.setOptions(options);
303 }-*/;
304
305 /**
306 * set Position
307 * @param latlng
308 */
309 public final native void setPosition(LatLng latlng) /*-{
310 this.setPosition(latlng);
311 }-*/;
312
313 /**
314 * set Shadow
315 * @param shadow
316 */
317 public final native void setShadow(String shadow) /*-{
318 this.setShadow(shadow);
319 }-*/;
320
321 /**
322 * set MarkerImage
323 * @param markerImage
324 */
325 public final native void setShadow(MarkerImage markerImage) /*-{
326 this.setShadow(markerImage);
327 }-*/;
328
329 /**
330 * set Shape
331 * @param shape
332 */
333 public final native void setShape(MarkerShape shape) /*-{
334 this.setShape(shape);
335 }-*/;
336
337 /**
338 * set Title
339 * @param title
340 */
341 public final native void setTitle(String title) /*-{
342 this.setTitle(title);
343 }-*/;
344
345 /**
346 * set Visible
347 * @param visible
348 */
349 public final native void setVisible(boolean visible) /*-{
350 this.setVisible(visible);
351 }-*/;
352
353 /**
354 * set Z index
355 * @param number
356 */
357 public final native void setZindex(int number) /*-{
358 this.setZIndex(number);
359 }-*/;
360
361 /**
362 * The maximum default z-index that the API will assign to a marker. You may set a higher z-index to bring a marker to the front.
363 */
364 public final native int getMax_Zindex() /*-{
365 return $wnd.google.maps.Marker.MAX_ZINDEX;
366 }-*/;
367
368 /**
369 * This event is fired when the marker's animation property changes.
370 * @param handler
371 */
372 public final HandlerRegistration addAnimationChangeHandler(AnimationChangeMapHandler handler) {
373 return MapHandlerRegistration.addHandler(this, MapEventType.ANIMATION_CHANGED, handler, new AnimationChangeEventFormatter());
374 }
375
376 /**
377 * This event is fired when the marker icon was clicked.
378 * @param handler
379 */
380 public final HandlerRegistration addClickHandler(ClickMapHandler handler) {
381 return MapHandlerRegistration.addHandler(this, MapEventType.CLICK, handler, new ClickEventFormatter());
382 }
383
384 /**
385 * This event is fired when the marker's clickable property changes.
386 * @param handler
387 */
388 public final HandlerRegistration addClickableChangeHandler(ClickableChangeMapHandler handler) {
389 return MapHandlerRegistration.addHandler(this, MapEventType.CLICKABLE_CHANGED, handler, new ClickableChangeEventFormatter());
390 }
391
392 /**
393 * This event is fired when the marker's cursor property changes.
394 * @param handler
395 */
396 public final HandlerRegistration addCursorChangeHandler(CursorChangeMapHandler handler) {
397 return MapHandlerRegistration.addHandler(this, MapEventType.CURSOR_CHANGED, handler, new CursorChangeEventFormatter());
398 }
399
400 /**
401 * This event is fired when the marker icon was double clicked.
402 * @param handler
403 */
404 public final HandlerRegistration addDblClickHandler(DblClickMapHandler handler) {
405 return MapHandlerRegistration.addHandler(this, MapEventType.DBLCLICK, handler, new DblClickEventFormatter());
406 }
407
408 /**
409 * This event is repeatedly fired while the user drags the marker.
410 * @param handler
411 */
412 public final HandlerRegistration addDragHandler(DragMapHandler handler) {
413 return MapHandlerRegistration.addHandler(this, MapEventType.DRAG, handler, new DragEventFormatter());
414 }
415
416 /**
417 * This event is fired when the user stops dragging the marker.
418 * @param handler
419 */
420 public final HandlerRegistration addDragEndHandler(DragEndMapHandler handler) {
421 return MapHandlerRegistration.addHandler(this, MapEventType.DRAGEND, handler, new DragEndEventFormatter());
422 }
423
424 /**
425 * This event is fired when the marker's draggable property changes.
426 * @param handler
427 */
428 public final HandlerRegistration addDraggableChangeHandler(DraggableChangeMapHandler handler) {
429 return MapHandlerRegistration.addHandler(this, MapEventType.DRAGGABLE_CHANGED, handler, new DraggableChangeEventFormatter());
430 }
431
432 /**
433 * This event is fired when the user starts dragging the marker.
434 * @param handler
435 */
436 public final HandlerRegistration addDragStartHandler(DragStartMapHandler handler) {
437 return MapHandlerRegistration.addHandler(this, MapEventType.DRAGSTART, handler, new DragStartEventFormatter());
438 }
439
440 /**
441 * This event is fired when the marker's flat property changes.
442 * @param handler
443 */
444 public final HandlerRegistration addFlatChangeHandler(FlatChangeMapHandler handler) {
445 return MapHandlerRegistration.addHandler(this, MapEventType.FLAT_CHANGED, handler, new FlatChangeEventFormatter());
446 }
447
448 /**
449 * This event is fired when the marker icon property changes.
450 * @param handler
451 */
452 public final HandlerRegistration addIconChangeHandler(IconChangeMapHandler handler) {
453 return MapHandlerRegistration.addHandler(this, MapEventType.ICON_CHANGED, handler, new IconChangeEventFormatter());
454 }
455
456 /**
457 * This event is fired for a mousedown on the marker.
458 * @param handler
459 */
460 public final HandlerRegistration addMouseDownHandler(MouseDownMapHandler handler) {
461 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEDOWN, handler, new MouseDownEventFormatter());
462 }
463
464 /**
465 * This event is fired when the mouse leaves the area of the marker icon.
466 * @param handler
467 */
468 public final HandlerRegistration addMouseOutMoveHandler(MouseOutMapHandler handler) {
469 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOUT, handler, new MouseOutEventFormatter());
470 }
471
472 /**
473 * This event is fired when the mouse enters the area of the marker icon.
474 * @param handler
475 */
476 public final HandlerRegistration addMouseOverHandler(MouseOverMapHandler handler) {
477 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOVER, handler, new MouseOverEventFormatter());
478 }
479
480 /**
481 * This event is fired for a mouseup on the marker.
482 * @param handler
483 */
484 public final HandlerRegistration addMouseUpHandler(MouseUpMapHandler handler) {
485 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEUP, handler, new MouseUpEventFormatter());
486 }
487
488 /**
489 * This event is fired when the marker position property changes.
490 * @param handler
491 */
492 public final HandlerRegistration addProjectionChangeHandler(ProjectionChangeMapHandler handler) {
493 return MapHandlerRegistration.addHandler(this, MapEventType.PROJECTION_CHANGED, handler, new ProjectionChangeEventFormatter());
494 }
495
496 /**
497 * This event is fired for a rightclick on the marker.
498 * @param handler
499 */
500 public final HandlerRegistration addRightClickHandler(RightClickMapHandler handler) {
501 return MapHandlerRegistration.addHandler(this, MapEventType.RIGHTCLICK, handler, new RightClickEventFormatter());
502 }
503
504 /**
505 * This event is fired when the marker's shadow property changes.
506 * @param handler
507 */
508 public final HandlerRegistration addShadowChangeHandler(ShadowChangeMapHandler handler) {
509 return MapHandlerRegistration.addHandler(this, MapEventType.SHADOW_CHANGED, handler, new ShadowChangeEventFormatter());
510 }
511
512 /**
513 * This event is fired when the marker's shape property changes.
514 * @param handler
515 */
516 public final HandlerRegistration addShapeChangeHandler(ShapeChangeMapHandler handler) {
517 return MapHandlerRegistration.addHandler(this, MapEventType.SHAPE_CHANGED, handler, new ShapeChangeEventFormatter());
518 }
519
520 /**
521 * This event is fired when the marker title property changes.
522 * @param handler
523 */
524 public final HandlerRegistration addTitleChangeHandler(TitleChangeMapHandler handler) {
525 return MapHandlerRegistration.addHandler(this, MapEventType.TITLE_CHANGED, handler, new TitleChangeEventFormatter());
526 }
527
528 /**
529 * This event is fired when the marker's visible property changes.
530 * @param handler
531 */
532 public final HandlerRegistration addVisibleChangeHandler(VisibleChangeMapHandler handler) {
533 return MapHandlerRegistration.addHandler(this, MapEventType.VISIBLE_CHANGED, handler, new VisibleChangeEventFormatter());
534 }
535
536 /**
537 * This event is fired when the marker's zIndex property changes.
538 * @param handler
539 */
540 public final HandlerRegistration addZindexChangeHandler(ZindexChangeMapHandler handler) {
541 return MapHandlerRegistration.addHandler(this, MapEventType.ZINDEX_CHANGED, handler, new ZindexChangeEventFormatter());
542 }
543
544 /**
545 * close the marker
546 */
547 public final native void close() /*-{
548 this.setMap();
549 }-*/;
550
551 }