001 package com.google.gwt.maps.client.overlays;
002
003 import com.google.gwt.core.client.JavaScriptObject;
004 import com.google.gwt.dom.client.Element;
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.closeclick.CloseClickEventFormatter;
012 import com.google.gwt.maps.client.events.closeclick.CloseClickMapHandler;
013 import com.google.gwt.maps.client.events.content.ContentChangeEventFormatter;
014 import com.google.gwt.maps.client.events.content.ContentChangeMapHandler;
015 import com.google.gwt.maps.client.events.domready.DomReadyEventFormatter;
016 import com.google.gwt.maps.client.events.domready.DomReadyMapHandler;
017 import com.google.gwt.maps.client.events.position.PositionChangeEventFormatter;
018 import com.google.gwt.maps.client.events.position.PositionChangeMapHandler;
019 import com.google.gwt.maps.client.events.zindex.ZindexChangeEventFormatter;
020 import com.google.gwt.maps.client.events.zindex.ZindexChangeMapHandler;
021 import com.google.gwt.maps.client.mvc.MVCObject;
022 import com.google.gwt.maps.client.streetview.StreetViewPanoramaImpl;
023 import com.google.gwt.maps.client.streetview.StreetViewPanoramaWidget;
024 import com.google.gwt.user.client.ui.Widget;
025
026 /**
027 * An overlay that looks like a bubble and is often connected to a marker.
028 * <br>Extends {@link MVCObject}.
029 *
030 */
031 public class InfoWindow extends MVCObject<InfoWindow> {
032
033 /**
034 * use newInstance();
035 * Creates an info window with the given options. An InfoWindow can be placed on a map at a particular position or above a marker, depending on what is specified in the options. Unless auto-pan is disabled, an InfoWindow will pan the map to make itself visible when it is opened. After constructing an InfoWindow, you must call open to display it on the map. The user can click the close button on the InfoWindow to remove it from the map, or the developer can call close() for the same effect.
036 */
037 protected InfoWindow() {}
038
039 /**
040 * Creates an info window with the given options. An InfoWindow can be placed on a map at a particular position or above a marker, depending on what is specified in the options. Unless auto-pan is disabled, an InfoWindow will pan the map to make itself visible when it is opened. After constructing an InfoWindow, you must call open to display it on the map. The user can click the close button on the InfoWindow to remove it from the map, or the developer can call close() for the same effect.
041 * @param options {@link InfoWindowOptions}
042 */
043 public static final InfoWindow newInstance(InfoWindowOptions options) {
044 return createJso(options).cast();
045 }
046
047 private static final native JavaScriptObject createJso(InfoWindowOptions options) /*-{
048 return new $wnd.google.maps.InfoWindow(options);
049 }-*/;
050
051 /**
052 * Closes this InfoWindow by removing it from the DOM structure.
053 */
054 public final native void close() /*-{
055 this.close();
056 }-*/;
057
058 /**
059 * get content if its a string
060 * @return String
061 */
062 public final native String getContent_String() /*-{
063 return this.getContent();
064 }-*/;
065
066 /**
067 * get content if its a node
068 * @return {@link Element}
069 */
070 public final native Element getContent_Node() /*-{
071 return this.getContent();
072 }-*/;
073
074 /**
075 * get Position
076 */
077 public final native LatLng getPosition() /*-{
078 return this.getPosition();
079 }-*/;
080
081 /**
082 * get Z index
083 */
084 public final native int getZindex() /*-{
085 return this.getZIndex();
086 }-*/;
087
088 /**
089 * Opens this InfoWindow on the given map. Optionally, an InfoWindow can be associated with an anchor. In the core API, the only anchor is the Marker class. However, an anchor can be any MVCObject that exposes the position property and optionally anchorPoint for calculating the pixelOffset (see InfoWindowOptions). The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow.
090 * @param mapWidget
091 */
092 public final void open(MapWidget mapWidget) {
093 open(mapWidget.getJso(), null);
094 }
095
096 /**
097 * Opens this InfoWindow on the given map. Optionally, an InfoWindow can be associated with an anchor. In the core API, the only anchor is the Marker class. However, an anchor can be any MVCObject that exposes the position property and optionally anchorPoint for calculating the pixelOffset (see InfoWindowOptions). The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow.
098 * @param mapWidget
099 * @param anchor
100 */
101 public final void open(MapWidget mapWidget, MVCObject<?> anchor) {
102 open(mapWidget.getJso(), anchor);
103 }
104
105 private final native void open(MapImpl impl) /*-{
106 this.open(impl);
107 }-*/;
108
109 private final native void open(MapImpl impl, MVCObject<?> anchor) /*-{
110 this.open(impl, anchor);
111 }-*/;
112
113 private final native void open(MapImpl impl, JavaScriptObject anchor) /*-{
114 this.open(impl, anchor);
115 }-*/;
116
117 /**
118 * Opens this InfoWindow on the given map. Optionally, an InfoWindow can be associated with an anchor. In the core API, the only anchor is the Marker class. However, an anchor can be any MVCObject that exposes the position property and optionally anchorPoint for calculating the pixelOffset (see InfoWindowOptions). The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow.
119 * @param streetViewPanoRamaWidget
120 */
121 public final void open(StreetViewPanoramaWidget streetViewPanoRamaWidget) {
122 open(streetViewPanoRamaWidget.getJso());
123 }
124
125 /**
126 * Opens this InfoWindow on the given map. Optionally, an InfoWindow can be associated with an anchor. In the core API, the only anchor is the Marker class. However, an anchor can be any MVCObject that exposes the position property and optionally anchorPoint for calculating the pixelOffset (see InfoWindowOptions). The anchorPoint is the offset from the anchor's position to the tip of the InfoWindow.
127 * @param streetViewPanoRamaWidget
128 * @param anchor
129 */
130 public final void open(StreetViewPanoramaWidget streetViewPanoRamaWidget, MVCObject<?> anchor) {
131 open(streetViewPanoRamaWidget.getJso(), anchor);
132 }
133
134 private final native void open(StreetViewPanoramaImpl impl) /*-{
135 this.open(impl);
136 }-*/;
137
138 private final native void open(StreetViewPanoramaImpl impl, MVCObject<?> anchor) /*-{
139 this.open(impl, anchor);
140 }-*/;
141
142 public final void setContent(Widget widget) {
143 setContent(widget.getElement());
144 }
145
146 /**
147 * set Content
148 * @param content
149 */
150 public final native void setContent(String content) /*-{
151 this.setContent(content);
152 }-*/;
153
154 /**
155 * set Content
156 * @param element
157 */
158 public final native void setContent(Element element) /*-{
159 this.setContent(element);
160 }-*/;
161
162 /**
163 * set Options
164 * @param options
165 */
166 public final native void setOptions(InfoWindowOptions options) /*-{
167 this.setOptions(options);
168 }-*/;
169
170 /**
171 * set Position
172 * @param position
173 */
174 public final native void setPosition(LatLng position) /*-{
175 this.setPosition(position);
176 }-*/;
177
178 /**
179 * set Z index
180 * @param index
181 */
182 public final native void setZindex(int index) /*-{
183 this.setZIndex(index);
184 }-*/;
185
186 /**
187 * This event is fired when the close button was clicked.
188 * @param handler
189 */
190 public final HandlerRegistration addCloseClickHandler(CloseClickMapHandler handler) {
191 return MapHandlerRegistration.addHandler(this, MapEventType.CLOSECLICK, handler, new CloseClickEventFormatter());
192 }
193
194 /**
195 * This event is fired when the content property changes.
196 * @param handler
197 */
198 public final HandlerRegistration addContentChangeHandler(ContentChangeMapHandler handler) {
199 return MapHandlerRegistration.addHandler(this, MapEventType.CONTENT_CHANGED, handler, new ContentChangeEventFormatter());
200 }
201
202 /**
203 * This event is fired when the <code><div></code> containing the InfoWindow's content is attached to the DOM. You may wish to monitor this event if you are building out your info window content dynamically.
204 * @param handler
205 */
206 public final HandlerRegistration addDomReadyHandler(DomReadyMapHandler handler) {
207 return MapHandlerRegistration.addHandler(this, MapEventType.DOMREADY, handler, new DomReadyEventFormatter());
208 }
209
210 /**
211 * This event is fired when the position property changes.
212 * @param handler
213 */
214 public final HandlerRegistration addPositionChangeHandler(PositionChangeMapHandler handler) {
215 return MapHandlerRegistration.addHandler(this, MapEventType.POSITION_CHANGED, handler, new PositionChangeEventFormatter());
216 }
217
218 /**
219 * This event is fired when the InfoWindow's zIndex changes.
220 * @param handler
221 */
222 public final HandlerRegistration addZindexChangedHandler(ZindexChangeMapHandler handler) {
223 return MapHandlerRegistration.addHandler(this, MapEventType.ZINDEX_CHANGED, handler, new ZindexChangeEventFormatter());
224 }
225
226 }