Return-Path: X-Original-To: apmail-flex-commits-archive@www.apache.org Delivered-To: apmail-flex-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id AADE1181E9 for ; Wed, 3 Feb 2016 17:41:13 +0000 (UTC) Received: (qmail 12474 invoked by uid 500); 3 Feb 2016 17:41:05 -0000 Delivered-To: apmail-flex-commits-archive@flex.apache.org Received: (qmail 12393 invoked by uid 500); 3 Feb 2016 17:41:05 -0000 Mailing-List: contact commits-help@flex.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flex.apache.org Delivered-To: mailing list commits@flex.apache.org Received: (qmail 11307 invoked by uid 99); 3 Feb 2016 17:41:05 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Feb 2016 17:41:05 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 14F60E0A3A; Wed, 3 Feb 2016 17:41:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aharui@apache.org To: commits@flex.apache.org Date: Wed, 03 Feb 2016 17:41:24 -0000 Message-Id: <14a1641272434194b5d7bd4870e83050@git.apache.org> In-Reply-To: <6e9d35def6014bd6af487c07575acd8f@git.apache.org> References: <6e9d35def6014bd6af487c07575acd8f@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [21/51] [abbrv] git commit: [flex-asjs] [refs/heads/mavenfolders] - new folders for GoogleMaps http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/GoogleMapView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/GoogleMapView.as b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/GoogleMapView.as new file mode 100644 index 0000000..d366bc3 --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/GoogleMapView.as @@ -0,0 +1,899 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.flex.maps.google.beads +{ + COMPILE::AS3 { + import flash.events.Event; + import flash.net.URLRequest; + + import org.apache.flex.utils.HTMLLoader; + } + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.maps.google.GoogleMap; + import org.apache.flex.maps.google.models.MapModel; + + COMPILE::JS { + import goog.bind; + } + + import google.maps.event; + import google.maps.Geocoder; + import google.maps.GeocoderResult; + import google.maps.GeocoderStatus; + import google.maps.LatLng; + import google.maps.Map; + import google.maps.Marker; + import google.maps.places.PlaceResult; + import google.maps.places.PlacesService; + import google.maps.places.PlacesServiceStatus; + + /** + * The MapView bead class displays a Google Map using HTMLLoader. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + COMPILE::JS + public class GoogleMapView extends BeadViewBase implements IBeadView + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function GoogleMapView() + { + super(); + } + + private var realMap:Map; + private var geocoder:Geocoder; + private var initialized:Boolean = false; + private var markers:Array; + private var searchResults:Array; + private var service:PlacesService; + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + _strand = value; + + var token:String = (_strand as GoogleMap).token; + var src:String = 'https://maps.googleapis.com/maps/api/js?v=3.exp'; + if (token) + src += '&key=' + token; + src += '&libraries=geometry,places&callback=mapInit'; + + var script:HTMLScriptElement = document.createElement('script') as HTMLScriptElement; + script.type = 'text/javascript'; + script.src = src; + + window['mapView'] = this; + window['mapInit'] = function():void { + (this['mapView'] as GoogleMapView).finishInitialization(); + } + + document.head.appendChild(script); + } + + /** + * Adjusts the map to the given coordinate and zoom level. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function mapit( centerLat:Number, centerLng:Number, zoom:Number ):void + { + if (!initialized) { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.currentCenter = new LatLng(centerLat, centerLng); + model.zoom = zoom; + var mapOptions:Object = new Object(); + mapOptions['center'] = model.currentCenter; + mapOptions['zoom'] = zoom; + + realMap = new Map((_strand as UIBase).element, mapOptions); + geocoder = null; + + model.addEventListener("zoomChanged", handleModelChange); + + google.maps.event.addListener(realMap, 'center_changed', goog.bind(centerChangeHandler, this)); + google.maps.event.addListener(realMap, 'bounds_changed', goog.bind(boundsChangeHandler, this)); + google.maps.event.addListener(realMap, 'zoom_changed', goog.bind(zoomChangeHandler, this)); + } + } + + /** + * @private + */ + private function finishInitialization():void + { + mapit(37.333, -121.900, 12); + initialized = true; + dispatchEvent(new Event('ready')); + } + + /** + * Centers the map on the address given. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function centerOnAddress(value:String):void + { + if (geocoder == null) geocoder = new Geocoder(); + geocoder.geocode({address:value}, positionHandler); + } + + /** + * Sets the center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function setCenter(location:LatLng):void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.currentCenter = new LatLng(location.lat(), location.lng()); + realMap.setCenter(model.currentCenter); + } + + /** + * Marks the current center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function markCurrentLocation():void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + createMarker(model.currentCenter as LatLng); + } + + /** + * Finds the given address and places a marker on it. This function may be dropped + * since centerOnAddress + markCurrentLocation does the same thing. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function markAddress(address:String):void + { + if (initialized) { + if (geocoder == null) geocoder = new Geocoder(); + geocoder.geocode({address:address}, geocodeHandler); + } + } + + /** + * Creates a marker for placement on the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + * @flexjsignorecoercion google.maps.Marker + */ + public function createMarker(location:LatLng):Marker + { + var marker:Marker = new Marker({map:realMap, position:location}); + // google.maps.event.addListener(marker, 'click', goog.bind(markerClicked, this)); + marker.addListener('click', markerClicked); + + return marker; + } + + /** + * Performs a search near the center of map. The result is a set of + * markers displayed on the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function nearbySearch(placeName:String):void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + + if (markers == null) markers = []; + service = new PlacesService(realMap); + service.nearbySearch({location:model.currentCenter, radius:5000, name:placeName}, searchResultsHandler); + } + + /** + * Clears the previous search results. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function clearSearchResults():void + { + if (markers) { + for(var i:int=0; i < markers.length; i++) { + var m:Marker = markers[i] as Marker; + m.setMap(null); + } + markers = null; + } + } + + // Callbacks + + /** + * @private + */ + public function centerChangeHandler() : void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.currentCenter = realMap.getCenter(); + + var newEvent:Event = new Event('centered'); + (_strand as IEventDispatcher).dispatchEvent(newEvent); + } + + /** + * @private + */ + public function boundsChangeHandler():void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.currentCenter = realMap.getCenter(); + + var newEvent:Event = new Event('boundsChanged'); + (_strand as IEventDispatcher).dispatchEvent(newEvent); + } + + /** + * @private + */ + public function zoomChangeHandler():void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.currentCenter = realMap.getCenter(); + + var newEvent:Event = new Event('zoomChanged'); + (_strand as IEventDispatcher).dispatchEvent(newEvent); + } + + /** + * @private + */ + public function positionHandler(results:Array, status:String):void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + if (status == GeocoderStatus.OK) { + model.currentCenter = results[0].geometry.location; + realMap.setCenter(model.currentCenter); + + // dispatch an event to indicate the map has been centered + } + } + + /** + * @flexjsignorecoercion google.maps.Marker + * @flexjsignorecoercion google.maps.LatLng + */ + public function geocodeHandler(results:Array, status:String):void + { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + if (status == GeocoderStatus.OK) { + model.currentCenter = results[0].geometry.location; + realMap.setCenter(model.currentCenter); + + var marker:Marker = new Marker({map:realMap, position:model.currentCenter}); + } + } + + /** + * @private + */ + public function searchResultsHandler(results:Array, status:String):void + { + searchResults = []; + if (status == PlacesServiceStatus.OK) { + for(var i:int=0; i < results.length; i++) { + /*var place:PlaceResult = new PlaceResult(); + place.geometry.location = new LatLng(results[i].geometry.location.lat(), results[i].geometry.location.lng()); + place.icon = results[i].icon; + place.id = results[i].id; + place.name = results[i].name; + place.reference = results[i].reference; + place.vicinity = results[i].vicinity;*/ + var place:Object = results[i]; + searchResults.push(place); + + var marker:Marker = createMarker(place.geometry.location); + marker.setTitle(place.name); + + markers.push(marker); + } + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.searchResults = searchResults; + } + } + + // Event handlers + + /** + * Handles changes to properties of the MapModel. When this value is + * changed, the map itself has its zoom changed. This will trigger an + * event on the map that will be handled by functions above. + */ + public function handleModelChange(event:Event):void + { + if (event.type == "zoomChanged") { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + realMap.setZoom(model.zoom); + } + } + + /** + * @flexjsignorecoercion google.maps.Marker + * @flexjsignorecoercion google.maps.LatLng + */ + public function markerClicked(marker:Marker):void + { + var newMarker:Marker = new Marker({ + position: marker["latLng"], + title: marker["title"], + map: realMap + }); + + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.selectedMarker = newMarker; + + var newEvent:Event = new Event('markerClicked'); + IEventDispatcher(_strand).dispatchEvent(newEvent); + } + + } // end ::JS + + + + /** + * The AS3 version of GoogleMapView is geared toward its use with HTMLLoader + * for AIR. + */ + COMPILE::AS3 + public class GoogleMapView extends BeadViewBase implements IBeadView + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function GoogleMapView() + { + super(); + } + + private var _loader:HTMLLoader; + private var page:String; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + + _loader = new HTMLLoader(); + _loader.x = 0; + _loader.y = 0; + _loader.width = UIBase(value).width; + _loader.height = UIBase(value).height; + _loader.placeLoadStringContentInApplicationSandbox = false; + + IEventDispatcher(_strand).addEventListener("widthChanged",handleSizeChange); + IEventDispatcher(_strand).addEventListener("heightChanged",handleSizeChange); + + var model:IBeadModel = _strand.getBeadByType(IBeadModel) as IBeadModel; + model.addEventListener("zoomChanged", handleZoomChange); + model.addEventListener("currentLocationChanged", handleCurrentLocationChange); + + (_strand as UIBase).addChild(_loader); + + var token:String = GoogleMap(_strand).token; + if (token) + page = pageTemplateStart + "&key=" + token + pageTemplateEnd; + else + page = pageTemplateStart + pageTemplateEnd; + + if (page) { + _loader.loadString(page); + //trace(page); + //_loader.load(new URLRequest("https://google-developers.appspot.com/maps/documentation/javascript/examples/full/map-simple")); + _loader.addEventListener(flash.events.Event.COMPLETE, completeHandler); + } + } + + private function completeHandler(event:flash.events.Event):void + { + trace("htmlLoader complete"); + + if (_loader && page) { +/* _loader.window.map.center_changed = onMapCentered; + _loader.window.map.bounds_changed = onMapBoundsChanged; + _loader.window.map.zoom_changed = onMapZoomChanged; + _loader.window.map.dragend = onMapDragEnd; + _loader.window.map.draggable = true; + + // custom event handlers + _loader.window.addEventListener("searchResults",onSearchResults); + _loader.window.addEventListener("markerClicked",onMarkerClicked);*/ + } + + IEventDispatcher(_strand).dispatchEvent(new org.apache.flex.events.Event("ready")); + } + + private function handleZoomChange(event:org.apache.flex.events.Event):void + { + if (_loader && page) { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + setZoom(model.zoom); + } + } + + private function handleCurrentLocationChange(event:org.apache.flex.events.Event):void + { + if (_loader && page) { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + setCenter(model.currentCenter); + } + } + + /** + * @private + */ + private function handleSizeChange(event:org.apache.flex.events.Event):void + { + _loader.width = UIBase(_strand).width; + _loader.height = UIBase(_strand).height; + } + + /** + * @private + */ + private function onMapCentered():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("centered") ); + //_loader.window.recenter(); + } + + /** + * @private + */ + private function onMapBoundsChanged():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("boundsChanged") ); + //_loader.window.recenter(); + } + + /** + * @private + */ + private function onMapZoomChanged():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("zoomChanged") ); + } + + /** + * @private + */ + private function onMapDragEnd():void + { + trace("GMV: drag-end"); + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("dragEnd") ); + } + + /** + * @private + */ + private function onSearchResults(event:*):void + { + var results:Array = []; + for(var i:int=0; i < event.results.length; i++) { + /*var result:Place = new Place(); + result.geometry.location.lat = event.results[i].geometry.location.lat(); + result.geometry.location.lng = event.results[i].geometry.location.lng(); + result.icon = event.results[i].icon; + result.id = event.results[i].id; + result.name = event.results[i].name; + result.reference = event.results[i].reference; + result.vicinity = event.results[i].vicinity; + results.push(result);*/ + var place:Object = event.results[i]; + results.push(place); + } + + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.searchResults = results; + } + + /** + * @private + */ + private function onMarkerClicked(event:*):void + { + trace("GMV: onMarkerClicked"); + var marker:Marker = new Marker({ + position: event.marker.getPosition(), + title: event.marker.getTitle(), + map: event.marker.getMap() + }); + + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.selectedMarker = marker; + + trace("GMV: dispatching event"); + IEventDispatcher(_strand).dispatchEvent(new org.apache.flex.events.Event("markerClicked")); + } + + /** + * Adjusts the map to the given coordinate and zoom level. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function mapit(lat:Number, lng:Number, zoomLevel:Number):void + { + if (_loader && page) { + _loader.window.mapit(lat, lng, zoomLevel); + } + } + + /** + * Finds the given address and places a marker on it. This function may be dropped + * since centerOnAddress + markCurrentLocation does the same thing. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function markAddress(address:String):void + { + if (_loader && page) { + _loader.window.codeaddress(address); + } + } + + /** + * Centers the map on the address given. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function centerOnAddress(address:String):void + { + if (_loader && page) { + _loader.window.centeronaddress(address); + } + } + + /** + * Marks the current center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function markCurrentLocation():void + { + if (_loader && page) { + _loader.window.markcurrentlocation(); + } + } + + /** + * Performs a search near the center of map. The result is a set of + * markers displayed on the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function nearbySearch(placeName:String):void + { + if (_loader && page) { + _loader.window.nearbysearch(placeName); + } + } + + /** + * Creates a marker for placement on the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function createMarker(location:LatLng):Marker + { + return null; + } + + /** + * Removes all of the markers from the map + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function removeAllMarkers():void + { + if (_loader && page) { + _loader.window.clearmarkers(); + } + } + + /** + * Sets the zoom factor of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function setZoom(zoom:Number):void + { + if (_loader && page) { + _loader.window.map.setZoom(zoom); + } + } + + /** + * Sets the center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function setCenter( location:LatLng ):void + { + if (_loader && page) { + _loader.window.setCenter(location.lat, location.lng); + } + } + + /** + * Clears the previous search results. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function clearSearchResults():void + { + // not implemented + } + + /** + * @private + * This page definition is used with HTMLLoader to bring in the Google Maps + * API (a Google APP token is required). + */ + private static var pageTemplateStart:String = '\n'+ + '\n'+ + ' \n'+ + ' \n'+ + ' \n'+ + ' \n'+ + ' \n'+ + ' \n'+ + '
\n'+ + ' \n'+ + '\n'; + + private static var pageTemplateEndOLD:String = '&libraries=places">'+ + ' \n'+ + ' \n'+ + ' \n'+ + ' \n'+ + '
\n'+ + ' \n'+ + ''; + } // end ::AS3 + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/MapView_original.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/MapView_original.as b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/MapView_original.as new file mode 100644 index 0000000..d21314e --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/beads/MapView_original.as @@ -0,0 +1,515 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// + +/** + * NOTE + * + * THIS IS THE OLD MapView. The new one is GoogleMapView. This code exists to preserve + * the AS/HTMLLoader version for use with AIR. Someday we will come back to this and make + * it work again. + */ +package org.apache.flex.maps.google.beads +{ + COMPILE::AS3 { + import flash.events.Event; + import flash.html.HTMLLoader; + import flash.net.URLRequest; + } + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.maps.google.GoogleMap; + import org.apache.flex.maps.google.models.MapModel; + + /** + * The MapView bead class displays a Google Map using HTMLLoader. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + COMPILE::JS + public class MapView_original extends BeadViewBase implements IBeadView + { + public function MapView_original() + { + super(); + } + + private var _strand:IStrand; + + override public function set strand(value:IStrand):void + { + super.strand = value; + _strand = value; + + var token:String = (_strand as GoogleMap).token; + var src:String = 'https://maps.googleapis.com/maps/api/js?v=3.exp'; + if (token) + src += '&key=' + token; + src += '&libraries=places&sensor=false&callback=mapInit'; + + var script:HTMLScriptElement = document.createElement('script') as HTMLScriptElement; + script.type = 'text/javascript'; + script.src = src; + +/** window.mapView = this; + window['mapInit'] = function() { + (this.mapView._strand as GoogleMap).finishInitialization(); + } +**/ + document.head.appendChild(script); + } + } + + COMPILE::AS3 + public class MapView_original extends BeadViewBase implements IBeadView + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function MapView_original() + { + } + + private var _loader:HTMLLoader; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + + _loader = new HTMLLoader(); + _loader.x = 0; + _loader.y = 0; + _loader.width = UIBase(value).width; + _loader.height = UIBase(value).height; + + IEventDispatcher(_strand).addEventListener("widthChanged",handleSizeChange); + IEventDispatcher(_strand).addEventListener("heightChanged",handleSizeChange); + + var model:IBeadModel = _strand.getBeadByType(IBeadModel) as IBeadModel; + model.addEventListener("zoomChanged", handleZoomChange); + model.addEventListener("currentLocationChanged", handleCurrentLocationChange); + + (_strand as UIBase).addChild(_loader); + + var token:String = Map(_strand).token; + if (token) + page = pageTemplateStart + "&key=" + token + pageTemplateEnd; + else + page = pageTemplateStart + pageTemplateEnd; + + if (page) { + _loader.loadString(page); + _loader.addEventListener(flash.events.Event.COMPLETE, completeHandler); + } + } + + private function completeHandler(event:flash.events.Event):void + { + trace("htmlLoader complete"); + + if (_loader && page) { + _loader.window.map.center_changed = onMapCentered; + _loader.window.map.bounds_changed = onMapBoundsChanged; + _loader.window.map.zoom_changed = onMapZoomChanged; + _loader.window.map.dragend = onMapDragEnd; + + // custom event handlers + _loader.window.addEventListener("searchResults",onSearchResults); + _loader.window.addEventListener("markerClicked",onMarkerClicked); + } + + IEventDispatcher(_strand).dispatchEvent(new org.apache.flex.events.Event("ready")); + } + + private function handleZoomChange(event:org.apache.flex.events.Event):void + { + if (_loader && page) { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + setZoom(model.zoom); + } + } + + private function handleCurrentLocationChange(event:org.apache.flex.events.Event):void + { + if (_loader && page) { + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + setCenter(model.currentLocation.location); + } + } + + private var page:String; + + /** + * Adjusts the map to the given coordinate and zoom level. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function mapit(lat:Number, lng:Number, zoomLevel:Number):void + { + if (_loader && page) { + _loader.window.mapit(lat,lng,zoomLevel); + } + } + + /** + * Finds the given address and places a marker on it. This function may be dropped + * since centerOnAddress + markCurrentLocation does the same thing. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function geoCodeAndMarkAddress(address:String):void + { + if (_loader && page) { + _loader.window.codeaddress(address); + } + } + + /** + * Centers the map on the address given. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function centerOnAddress(address:String):void + { + if (_loader && page) { + _loader.window.centeronaddress(address); + } + } + + /** + * Marks the current center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function markCurrentLocation():void + { + if (_loader && page) { + _loader.window.markcurrentlocation(); + } + } + + /** + * Performs a search near the center of map. The result is a set of + * markers displayed on the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function nearbySearch(placeName:String):void + { + if (_loader && page) { + _loader.window.nearbysearch(placeName); + } + } + + /** + * Removes all of the markers from the map + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function removeAllMarkers():void + { + if (_loader && page) { + _loader.window.clearmarkers(); + } + } + + /** + * Sets the zoom factor of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function setZoom(zoom:Number):void + { + if (_loader && page) { + _loader.window.map.setZoom(zoom); + } + } + + /** + * Sets the center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function setCenter( location:LatLng ):void + { + if (_loader && page) { + _loader.window.setCenter(location.lat, location.lng); + } + } + + /** + * @private + */ + private function handleSizeChange(event:org.apache.flex.events.Event):void + { + _loader.width = UIBase(_strand).width; + _loader.height = UIBase(_strand).height; + } + + /** + * @private + */ + private function onMapCentered():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("centered") ); + } + + /** + * @private + */ + private function onMapBoundsChanged():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("boundsChanged") ); + } + + /** + * @private + */ + private function onMapZoomChanged():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("zoomChanged") ); + } + + /** + * @private + */ + private function onMapDragEnd():void + { + IEventDispatcher(_strand).dispatchEvent( new org.apache.flex.events.Event("dragEnd") ); + } + + /** + * @private + */ + private function onSearchResults(event:*):void + { + var results:Array = []; + for(var i:int=0; i < event.results.length; i++) { + var result:Place = new Place(); + result.geometry.location.lat = event.results[i].geometry.location.lat(); + result.geometry.location.lng = event.results[i].geometry.location.lng(); + result.icon = event.results[i].icon; + result.id = event.results[i].id; + result.name = event.results[i].name; + result.reference = event.results[i].reference; + result.vicinity = event.results[i].vicinity; + results.push(result); + } + + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.searchResults = results; + } + + /** + * @private + */ + private function onMarkerClicked(event:*):void + { + var marker:Marker = new Marker(); + marker.position.lat = event.marker.position.lat(); + marker.position.lng = event.marker.position.lng(); + marker.title = event.marker.title; + marker.map = Map(_strand); + + var model:MapModel = _strand.getBeadByType(IBeadModel) as MapModel; + model.selectedMarker = marker; + + IEventDispatcher(_strand).dispatchEvent(new org.apache.flex.events.Event("markerClicked")); + } + + /** + * @private + * This page definition is used with HTMLLoader to bring in the Google Maps + * API (a Google APP token is required). + */ + private static var pageTemplateStart:String = ''+ + ''+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + '
'+ + ' '+ + ''; + } + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/models/MapModel.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/models/MapModel.as b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/models/MapModel.as new file mode 100644 index 0000000..6184143 --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/flex/org/apache/flex/maps/google/models/MapModel.as @@ -0,0 +1,165 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.flex.maps.google.models +{ + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.EventDispatcher; + + import google.maps.LatLng; + import google.maps.Marker; + + /** + * The data model for the Map class, this holds the maps current center + * location, its current zoom level, the last marker selected, and any + * search results. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class MapModel extends EventDispatcher implements IBeadModel + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function MapModel() + { + super(); + } + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function set strand(value:IStrand):void + { + _strand = value; + } + + private var _token:String; + + public function get token():String + { + return _token; + } + public function set token(value:String):void + { + _token = value; + dispatchEvent(new Event("tokenChanged")); + } + + private var _currentCenter:LatLng; + + /** + * The current center of the map. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get currentCenter():LatLng + { + return _currentCenter; + } + + public function set currentCenter(value:LatLng):void + { + _currentCenter = value; + dispatchEvent( new Event("currentCenterChanged") ); + } + + private var _selectedMarker:Marker; + + /** + * The last marker selected, if any. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get selectedMarker():Marker + { + return _selectedMarker; + } + + public function set selectedMarker(value:Marker):void + { + _selectedMarker = value; + dispatchEvent( new Event("selectedMarkerChanged") ); + } + + private var _zoom:Number; + + /** + * The current zoom level. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get zoom():Number + { + return _zoom; + } + public function set zoom(value:Number):void + { + if (value != _zoom) { + _zoom = value; + dispatchEvent( new Event("zoomChanged") ); + } + } + + private var _searchResults:Array; + + /** + * Results from the last search. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get searchResults():Array + { + return _searchResults; + } + public function set searchResults(value:Array):void + { + _searchResults = value; + dispatchEvent( new Event("searchResultsChanged") ); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/resources/compile-asjs-config.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/resources/compile-asjs-config.xml b/frameworks/projects/GoogleMaps/src/main/resources/compile-asjs-config.xml new file mode 100644 index 0000000..52a9e48 --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/resources/compile-asjs-config.xml @@ -0,0 +1,75 @@ + + + + + false + + + + true + + org.apache.flex.events.ValueChangeEvent + org.apache.flex.events.ValueChangeEvent + valueChange + + + Bindable + Managed + ChangeEvent + NonCommittingChangeEvent + Transient + + + + + + + ../../externs/Core.swc + + + + + library://ns.apache.org/flexjs/google + google-manifest.xml + + + + + as/src + + + false + + + + GoogleStubClasses + GoogleMapsClasses + + + + library://ns.apache.org/flexjs/google + + + ${playerglobal.version} + + + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/resources/compile-config.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/resources/compile-config.xml b/frameworks/projects/GoogleMaps/src/main/resources/compile-config.xml new file mode 100644 index 0000000..7a80279 --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/resources/compile-config.xml @@ -0,0 +1,83 @@ + + + + + false + + + ${env.AIR_HOME}/frameworks/libs/air/airglobal.swc + ../../libs/Core.swc + + + + true + + org.apache.flex.events.ValueChangeEvent + org.apache.flex.events.ValueChangeEvent + valueChange + + + Bindable + Managed + ChangeEvent + NonCommittingChangeEvent + Transient + + + + + + + + + library://ns.apache.org/flexjs/google + google-manifest.xml + + + + + as/src + + + false + + + + defaults.css + as/defaults.css + + + js/out/* + js/out/* + + + + GoogleStubClasses + GoogleMapsClasses + + + + library://ns.apache.org/flexjs/google + + + ${playerglobal.version} + + + http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/resources/defaults.css b/frameworks/projects/GoogleMaps/src/main/resources/defaults.css new file mode 100644 index 0000000..214e84f --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/resources/defaults.css @@ -0,0 +1,29 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +@namespace g "library://ns.apache.org/flexjs/google"; + +g|Map +{ + IBeadView: ClassReference("org.apache.flex.maps.google.beads.GoogleMapView"); + IBeadModel: ClassReference("org.apache.flex.maps.google.models.MapModel"); +} + + +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/69cacfc4/frameworks/projects/GoogleMaps/src/main/resources/google-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/GoogleMaps/src/main/resources/google-manifest.xml b/frameworks/projects/GoogleMaps/src/main/resources/google-manifest.xml new file mode 100644 index 0000000..f843c0c --- /dev/null +++ b/frameworks/projects/GoogleMaps/src/main/resources/google-manifest.xml @@ -0,0 +1,24 @@ + + + + + + +