001    package com.google.gwt.maps.client.streetview;
002    
003    import com.google.gwt.core.client.JsArray;
004    import com.google.gwt.dom.client.Element;
005    import com.google.gwt.event.shared.HandlerRegistration;
006    import com.google.gwt.maps.client.base.LatLng;
007    import com.google.gwt.maps.client.events.closeclick.CloseClickMapHandler;
008    import com.google.gwt.maps.client.events.links.LinksChangeMapHandler;
009    import com.google.gwt.maps.client.events.pano.PanoChangeMapHandler;
010    import com.google.gwt.maps.client.events.position.PositionChangeMapHandler;
011    import com.google.gwt.maps.client.events.pov.PovChangeMapHandler;
012    import com.google.gwt.maps.client.events.resize.ResizeMapHandler;
013    import com.google.gwt.maps.client.events.visible.VisibleChangeMapHandler;
014    import com.google.gwt.maps.client.mvc.MVCArray;
015    import com.google.gwt.maps.client.mvc.MVCObjectWidget;
016    import com.google.gwt.user.client.DOM;
017    
018    /**
019     * Displays the panorama for a given LatLng or panorama ID. A StreetViewPanorama object provides a Street View "viewer" which can be stand-alone within a separate <code>&lt;div&gt;</code> or bound to a Map. This class extends MVCObject.
020     * <br><br>
021     * See <a href="https://developers.google.com/maps/documentation/javascript/reference#StreetViewPanorama">StreetViewPanorama API Doc</a>
022     */
023    public class StreetViewPanoramaWidget extends MVCObjectWidget<StreetViewPanoramaImpl> {
024      
025      private StreetViewPanoramaImpl impl;
026    
027      /**
028       * create widget from a previous jso implementation
029       * @param impl
030       */
031      public static StreetViewPanoramaWidget newInstance(StreetViewPanoramaImpl impl) {
032        return new StreetViewPanoramaWidget(impl);
033      }
034      
035      /**
036       * Displays the panorama for a given LatLng or panorama ID. A StreetViewPanorama object provides a Street View "viewer" which can be stand-alone within a separate <code>&lt;div&gt;</code> or bound to a Map. This class extends MVCObject.
037       */
038      public StreetViewPanoramaWidget(StreetViewPanoramaOptions options) {
039        Element div = DOM.createDiv();
040        setElement(div);
041        impl = StreetViewPanoramaImpl.newInstance(div, options);
042        setStyleName("gwt-map-StreetViewPanoramaWidget-div");
043      }
044      
045      /**
046       * create a widget from a previous jso implementation
047       * @param impl
048       */
049      private StreetViewPanoramaWidget(StreetViewPanoramaImpl impl) {
050        this.impl = impl;
051        Element div = DOM.createDiv(); // setup a new div only option.
052        setElement(div);
053        setStyleName("gwt-map-StreetViewPanoramaWidget-div");
054      }
055      
056      /**
057       * get the JavaScriptObject overlay
058       */
059      public StreetViewPanoramaImpl getJso() {
060        return impl;
061      };
062    
063      /**
064       * Returns the set of navigation links for the Street View panorama.
065       */
066      public JsArray<StreetViewLink> getLinks() {
067        return impl.getLinks();
068      };
069      
070      /**
071       * Returns the current panorama ID for the Street View panorama. This id is stable within the browser's current session only.
072       */
073      public String getPano() {
074        return impl.getPano();
075      };
076      
077      /**
078       * Returns the current LatLng position for the Street View panorama.
079       */
080      public LatLng getPosition() {
081        return impl.getPosition();
082      };
083      
084      /**
085       * Returns the current point of view for the Street View panorama.
086       */
087      public StreetViewPov getPov() {
088        return impl.getPov();
089      };
090      
091      /**
092       * Returns true if the panorama is visible. It does not specify whether Street View imagery is available at the specified position.
093       */
094      public boolean getVisible() {
095        return impl.getVisible();
096      };
097      
098      /**
099       * Set the custom panorama provider called on pano change to load custom panoramas.
100       * @param provider
101       */
102      public void registerPanoProvider(StreetViewPanoramaProvider provider) {
103        impl.registerPanoProvider(provider);
104      };
105      
106      /**
107       * Sets the current panorama ID for the Street View panorama.
108       * @param pano
109       */
110      public void setPano(String pano) {
111        impl.setPano(pano);
112      };
113      
114      /**
115       * Sets the current LatLng position for the Street View panorama.
116       * @param latlng
117       */
118      public void setPosition(LatLng latlng) {
119        impl.setPosition(latlng);
120      };
121      
122      /**
123       * Sets the point of view for the Street View panorama.
124       * @param pov
125       */
126      public void setPov(StreetViewPov pov) {
127        impl.setPov(pov);
128      };
129      
130      /**
131       * Sets to true to make the panorama visible. If set to false, the panorama will be hidden whether it is embedded in the map or in its own <code>&lt;div&gt;</code>.
132       * @param visible
133       */
134      public void setVisible(boolean visible) {
135        impl.setVisible(visible);
136      };
137      
138      
139      
140      
141      /**
142       * TODO
143       * Additional controls to attach to the panorama. To add a control to the panorama, add the control's <code>&lt;div&gt;</code> to the MVCArray corresponding to the ControlPosition where it should be rendered.
144       * @param controls
145       */
146      public void setControls(MVCArray<Element> controls) { 
147        //    impl.controls = controls; //TODO
148      }
149    
150    
151    
152    
153    
154      /**
155       * This event is fired when the close button is clicked.
156       * @param handler
157       */
158      public HandlerRegistration addCloseClickHandler(CloseClickMapHandler handler) {
159        return impl.addCloseClickHandler(handler);
160      }
161      
162      /**
163       * This event is fired when the panorama's links change. The links change asynchronously following a pano id change.
164       * @param handler
165       */
166      public HandlerRegistration addLinksChangeHandler(LinksChangeMapHandler handler) {
167        return impl.addLinksChangeHandler(handler);
168      }
169     
170      /**
171       * This event is fired when the panorama's pano id changes. The pano may change as the user navigates through the panorama or the position is manually set. Note that not all position changes trigger a pano_changed.
172       * @param handler
173       */
174      public HandlerRegistration addPanoChangeHandler(PanoChangeMapHandler handler) {
175        return impl.addPanoChangeHandler(handler);
176      }
177      
178      /**
179       * This event is fired when the panorama's position changes. The position changes as the user navigates through the panorama or the position is set manually.
180       * @param handler
181       */
182      public HandlerRegistration addPositionChangeHandler(PositionChangeMapHandler handler) {
183        return impl.addPositionChangeHandler(handler);
184      }
185      
186      /**
187       * This event is fired when the panorama's point-of-view changes. The point of view changes as the pitch, zoom, or heading changes.
188       * @param handler
189       */
190      public HandlerRegistration addPovChangeHandler(PovChangeMapHandler handler) {
191        return impl.addPovChangeHandler(handler);
192      }
193      
194      /**
195       * Developers should trigger this event on the panorama when its div changes size: google.maps.event.trigger(panorama, 'resize').
196       * @param handler
197       */
198      public HandlerRegistration addResizeHandler(ResizeMapHandler handler) {
199        return impl.addResizeHandler(handler);
200      }
201      
202      /**
203       * This event is fired when the panorama's visibility changes. The visibility is changed when the Pegman id dragged onto the map, the close button is clicked, or setVisible() is called.
204       * @param handler
205       */
206      public HandlerRegistration addVisibleChangeHandler(VisibleChangeMapHandler handler) {
207        return impl.addVisibleChangeHandler(handler);
208      }
209    }