001 package com.google.gwt.maps.client.overlays;
002
003 import com.google.gwt.core.client.JavaScriptObject;
004 import com.google.gwt.core.client.JsArray;
005 import com.google.gwt.event.shared.HandlerRegistration;
006 import com.google.gwt.maps.client.MapImpl;
007 import com.google.gwt.maps.client.MapWidget;
008 import com.google.gwt.maps.client.base.LatLng;
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.click.ClickEventFormatter;
012 import com.google.gwt.maps.client.events.click.ClickMapHandler;
013 import com.google.gwt.maps.client.events.dblclick.DblClickEventFormatter;
014 import com.google.gwt.maps.client.events.dblclick.DblClickMapHandler;
015 import com.google.gwt.maps.client.events.mousedown.MouseDownEventFormatter;
016 import com.google.gwt.maps.client.events.mousedown.MouseDownMapHandler;
017 import com.google.gwt.maps.client.events.mousemove.MouseMoveEventFormatter;
018 import com.google.gwt.maps.client.events.mousemove.MouseMoveMapHandler;
019 import com.google.gwt.maps.client.events.mouseout.MouseOutEventFormatter;
020 import com.google.gwt.maps.client.events.mouseout.MouseOutMapHandler;
021 import com.google.gwt.maps.client.events.mouseover.MouseOverEventFormatter;
022 import com.google.gwt.maps.client.events.mouseover.MouseOverMapHandler;
023 import com.google.gwt.maps.client.events.mouseup.MouseUpEventFormatter;
024 import com.google.gwt.maps.client.events.mouseup.MouseUpMapHandler;
025 import com.google.gwt.maps.client.events.rightclick.RightClickEventFormatter;
026 import com.google.gwt.maps.client.events.rightclick.RightClickMapHandler;
027 import com.google.gwt.maps.client.mvc.MVCArray;
028 import com.google.gwt.maps.client.mvc.MVCObject;
029
030 /**
031 * A polyline is a linear overlay of connected line segments on the map. This
032 * class extends MVCObject. <br>
033 * <br>
034 * See <a href=
035 * "https://developers.google.com/maps/documentation/javascript/reference#Polyline"
036 * >Polyline API Doc</a>
037 */
038 public class Polyline extends MVCObject<Polyline> {
039
040 /**
041 * use newInstance();
042 *
043 */
044 protected Polyline() {
045 }
046
047 /**
048 * Create a polyline using the passed PolylineOptions, which specify both
049 * the path of the polyline and the stroke style to use when drawing the
050 * polyline. You may pass either an array of LatLngs or an MVCArray of
051 * LatLngs when constructing a polyline, though simple arrays are converted
052 * to MVCArrays within the polyline upon instantiation.
053 *
054 * @param options
055 * {@link PolylineOptions}
056 */
057 public static final Polyline newInstance(PolylineOptions options) {
058 return createJso(options).cast();
059 }
060
061 private static native JavaScriptObject createJso(PolylineOptions options) /*-{
062 return new $wnd.google.maps.Polyline(options);
063 }-*/;
064
065 /**
066 * Returns whether this shape can be edited by the user.
067 */
068 public final native boolean getEditable() /*-{
069 return this.getEditable();
070 }-*/;
071
072 /**
073 * Returns the map on which this shape is attached.
074 */
075 public final MapWidget getMap() {
076 return MapWidget.newInstance(getMapImpl());
077 }
078
079 private final native MapImpl getMapImpl() /*-{
080 return this.getMap();
081 }-*/;
082
083 /**
084 * Retrieves the first path.
085 */
086 public final native MVCArray<LatLng> getPath() /*-{
087 return this.getPath();
088 }-*/;
089
090 /**
091 * If set to true, the user can edit this shape by dragging the control
092 * points shown at the vertices and on each segment.
093 *
094 * @param editable
095 */
096 public final native void setEditable(boolean editable) /*-{
097 this.setEditable(editable);
098 }-*/;
099
100 /**
101 * Renders this shape on the specified map. If map is set to null, the shape
102 * will be removed.
103 *
104 * @param mapWidget
105 */
106 public final void setMap(MapWidget mapWidget) {
107 if (mapWidget == null) {
108 setMapImpl(null);
109 } else {
110 setMapImpl(mapWidget.getJso());
111 }
112 }
113
114 private final native void setMapImpl(MapImpl impl) /*-{
115 this.setMap(impl);
116 }-*/;
117
118 /**
119 * set Options
120 *
121 * @param options
122 */
123 public final native void setOptions(PolylineOptions options) /*-{
124 this.setOptions(options);
125 }-*/;
126
127 /**
128 * Sets the first path. See {@link PolylineOptions} for more details.
129 *
130 * @param path
131 */
132 public final native void setPath(MVCArray<LatLng> path) /*-{
133 this.setPath(path);
134 }-*/;
135
136 /**
137 * Sets the first path. See {@link PolylineOptions} for more details.
138 *
139 * @param path
140 */
141 public final native void setPath(JsArray<LatLng> path) /*-{
142 this.setPath(path);
143 }-*/;
144
145 /**
146 * This event is fired when the DOM click event is fired on the Polyline.
147 *
148 * @param handler
149 */
150 public final HandlerRegistration addClickHandler(ClickMapHandler handler) {
151 return MapHandlerRegistration.addHandler(this, MapEventType.CLICK,
152 handler, new ClickEventFormatter());
153 }
154
155 /**
156 * This event is fired when the DOM dblclick event is fired on the Polyline.
157 *
158 * @param handler
159 */
160 public final HandlerRegistration addDblClickHandler(
161 DblClickMapHandler handler) {
162 return MapHandlerRegistration.addHandler(this, MapEventType.DBLCLICK,
163 handler, new DblClickEventFormatter());
164 }
165
166 /**
167 * This event is fired when the DOM mousedown event is fired on the
168 * Polyline.
169 *
170 * @param handler
171 */
172 public final HandlerRegistration addMouseDownHandler(
173 MouseDownMapHandler handler) {
174 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEDOWN,
175 handler, new MouseDownEventFormatter());
176 }
177
178 /**
179 * This event is fired when the DOM mousemove event is fired on the
180 * Polyline.
181 *
182 * @param handler
183 */
184 public final HandlerRegistration addMouseMoveHandler(
185 MouseMoveMapHandler handler) {
186 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEMOVE,
187 handler, new MouseMoveEventFormatter());
188 }
189
190 /**
191 * This event is fired on Polyline mouseout.
192 *
193 * @param handler
194 */
195 public final HandlerRegistration addMouseOutMoveHandler(
196 MouseOutMapHandler handler) {
197 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOUT,
198 handler, new MouseOutEventFormatter());
199 }
200
201 /**
202 * This event is fired on Polyline mouseover.
203 *
204 * @param handler
205 */
206 public final HandlerRegistration addMouseOverHandler(
207 MouseOverMapHandler handler) {
208 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEOVER,
209 handler, new MouseOverEventFormatter());
210 }
211
212 /**
213 * This event is fired when the DOM mouseup event is fired on the Polyline.
214 *
215 * @param handler
216 */
217 public final HandlerRegistration addMouseUpHandler(MouseUpMapHandler handler) {
218 return MapHandlerRegistration.addHandler(this, MapEventType.MOUSEUP,
219 handler, new MouseUpEventFormatter());
220 }
221
222 /**
223 * This event is fired when the Polyline is right-clicked on.
224 *
225 * @param handler
226 */
227 public final HandlerRegistration addRightClickHandler(
228 RightClickMapHandler handler) {
229 return MapHandlerRegistration.addHandler(this, MapEventType.RIGHTCLICK,
230 handler, new RightClickEventFormatter());
231 }
232
233 }