import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.event.StateEventListener; import nl.idgis.giclient.event.StateEvent; import nl.idgis.giclient.gui.mapviewer.GeometryLayer; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.util.Pixel; import nl.idgis.giclient.gui.mapviewer.MapGeometry; import nl.idgis.giclient.gis.ZoomListener; import nl.idgis.giclient.gis.GIS; /** * @author copierrj */ class nl.idgis.giclient.gui.mapviewer.MapIcon extends MovieClip implements StateEventListener, ZoomListener { private var feature:Feature; private var geometryLayer:GeometryLayer; private var gism:GIS = null; private var mapGeometry:MapGeometry; private var url:String = null; private var lastIconCount:Number; function onLoad() { feature.addEventListener(this, "Feature", StateEvent.CHANGE, "iconUrl"); gism.gisEventDispatcher.addZoomListener(this); url = feature.getIconUrl(); draw(); } private function positionIcons():Void { //TODO: support for multiple geometries var centerPoint:Point = mapGeometry.getGeometry().getCenterPoint(); var centerPixel:Pixel = this.geometryLayer.getMapViewer().point2Pixel( centerPoint.getX(), centerPoint.getY()); this["icons"]["icon" + 0]._x = centerPixel.getX() - this["icons"]["icon" + 0]._width / 2; this["icons"]["icon" + 0]._y = centerPixel.getY() - this["icons"]["icon" + 0]._height / 2; } function draw():Void { if(this["icons"]) { MovieClip(this["icons"]).removeMovieClip(); } if(url != null) { var handler:Object = new Object(); handler.feature = feature; handler.mapIcon = this; handler.onLoadInit = function(target_mc:MovieClip) { this.mapIcon.positionIcons(); }; var icons:MovieClip = createEmptyMovieClip("icons", getNextHighestDepth()); var first:MovieClip = icons.createEmptyMovieClip("icon0", icons.getNextHighestDepth()); lastIconCount = 1; var clipLoader:MovieClipLoader = new MovieClipLoader(); clipLoader.addListener(handler); clipLoader.loadClip(url, first); } } function onStateEvent(stateEvent : StateEvent) : Void { url = feature.getIconUrl(); draw(); } function onZoom() : Void { this.positionIcons(); } function onChangeGeometry():Void { this.positionIcons(); } }