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