001 package com.google.gwt.maps.client.placeslib;
002
003 import com.google.gwt.ajaxloader.client.ArrayHelper;
004 import com.google.gwt.core.client.JavaScriptObject;
005 import com.google.gwt.core.client.JsArrayString;
006 import com.google.gwt.dom.client.Element;
007 import com.google.gwt.event.shared.HandlerRegistration;
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.place.PlaceChangeEventFormatter;
012 import com.google.gwt.maps.client.events.place.PlaceChangeMapHandler;
013 import com.google.gwt.maps.client.mvc.MVCObject;
014
015 /**
016 * A service to provide Place predictions based on a user's text input. It attaches to an input element of type text, and listens for text entry in that field. The list of predictions is presented as a drop-down list, and is updated as text is entered. This class extends MVCObject.
017 * <br><br>
018 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#Autocomplete">Autocomplete API Doc</a>
019 */
020 public class Autocomplete extends MVCObject<Autocomplete> {
021
022 private static final native JavaScriptObject createJso(Element inputField, AutocompleteOptions options) /*-{
023 return new $wnd.google.maps.places.Autocomplete(inputField, options);
024 }-*/;
025
026 /**
027 * Creates a new instance of Autocomplete that attaches to the specified input text field with the given options.
028 * @param inputField
029 * @param options
030 */
031 public static final Autocomplete newInstance(Element inputField, AutocompleteOptions options) {
032 return createJso(inputField, options).cast();
033 }
034
035 /**
036 * use newInstance();
037 */
038 protected Autocomplete() {}
039
040 /**
041 * This event is fired when a PlaceResult is made available for a Place the user has selected. If the user enters the name of a Place that was not suggested by the control and presses the Enter key, a place_changed event will be fired that contains the user input in the name property, with no other properties defined.
042 * @param handler
043 */
044 public final HandlerRegistration addPlaceChangeHandler(PlaceChangeMapHandler handler) {
045 return MapHandlerRegistration.addHandler(this, MapEventType.PLACE_CHANGED, handler, new PlaceChangeEventFormatter());
046 }
047
048 /**
049 * Returns the bounds to which predictions are biased.
050 */
051 public final native LatLngBounds getBounds() /*-{
052 return this.getBounds();
053 }-*/;
054
055 /**
056 * Returns the details of the Place selected by the user, or null if no Place has been selected yet.
057 */
058 public final native PlaceResult getPlace() /*-{
059 return this.getPlace();
060 }-*/;
061
062 /**
063 * Sets the preferred area within which to return Place results. Results are biased towards, but not restricted to, this area.
064 * @param bounds
065 */
066 public final native void setBounds(LatLngBounds bounds) /*-{
067 this.setBounds(bounds);
068 }-*/;
069
070 /**
071 * Sets the types of predictions to be returned. Supported types are 'establishment' for businesses and 'geocode' for addresses. If no type is specified, both types will be returned.
072 * @param types
073 */
074 public final void setTypes(AutocompleteType... types) {
075 if (types == null) {
076 return;
077 }
078 String[] stypes = new String[types.length];
079 for (int i=0; i < types.length; i++) {
080 stypes[i] = types[i].value();
081 }
082 JsArrayString a = ArrayHelper.toJsArrayString(stypes);
083 setTypesImpl(a);
084 }
085
086 private final native void setTypesImpl(JsArrayString types) /*-{
087 this.setTypes(types);
088 }-*/;
089
090 }