/*---------------- FILE HEADER --------------------------------------- This file is part of Geoide. Copyright (C) 2005-2006 by: IDgis B.V. http://www.idgis.nl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Herman Assink IDgis bv P.O. Box 15 7450 AA Holten The Netherlands E-Mail: herman.assink@idgis.nl * @version 1.4.0 * @author IDgis team * ------------------------------------------------------------------------*/ import nl.idgis.giclient.gis.ActiveLayerListener; import nl.idgis.giclient.gis.ActiveMapListener; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.gis.LandMarksListener; import nl.idgis.giclient.gis.MapMouseMoveListener; import nl.idgis.giclient.gis.PopUpInfoFeatureListener; import nl.idgis.giclient.gis.ShuffleListener; import nl.idgis.giclient.gis.ZoomListener; import nl.idgis.giclient.gis.TimeZoomListener; import nl.idgis.giclient.gis.SRSChangeListener; class nl.idgis.giclient.gis.GISEventDispatcher { private var activeMapListeners:Array = null; private var activeLayerListeners:Array = null; private var shuffleListeners:Array = null; private var zoomListeners:Array = null; private var timeZoomListeners:Array = null; private var mapMouseMoveListeners:Array = null; private var landMarksListeners:Array = null; private var popUpInfoFeatureListeners:Array = null; private var srsChangeListeners:Array = null; function GISEventDispatcher() { activeMapListeners = new Array(); activeLayerListeners = new Array(); shuffleListeners = new Array(); zoomListeners = new Array(); timeZoomListeners = new Array(); mapMouseMoveListeners = new Array(); landMarksListeners = new Array(); popUpInfoFeatureListeners = new Array(); srsChangeListeners = new Array(); } function addSRSChangeListener(srsChangeListener:SRSChangeListener):Void { srsChangeListeners.push(srsChangeListener); } function removeSRSChangeListener(srsChangeListener:SRSChangeListener):Void { for(var i:Number = 0; i < srsChangeListeners.length; i++) { if(srsChangeListener == srsChangeListeners[i]) { srsChangeListeners.splice(i, 1); } } } function addActiveMapListener(activeMapListener:ActiveMapListener):Void { activeMapListeners.push(activeMapListener); } function removeActiveMapListener(activeMapListener:ActiveMapListener):Void { for (var i:Number = 0; i < activeMapListeners.length; i++) { if (activeMapListener == activeMapListeners[i]) { activeMapListeners.splice(i, 1); } } } function addActiveLayerListener(activeLayerListener:ActiveLayerListener):Void { activeLayerListeners.push(activeLayerListener); } function removeActiveLayerListener(activeLayerListener:ActiveLayerListener):Void { for (var i:Number = 0; i < activeLayerListeners.length; i++) { if (activeLayerListener == activeLayerListeners[i]) { activeLayerListeners.splice(i, 1); } } } function addShuffleListener(shuffleListener:ShuffleListener):Void { shuffleListeners.push(shuffleListener); } function removeShuffleListener(shuffleListener:ShuffleListener):Void { for (var i = 0; i < shuffleListeners.length; i++) { if(shuffleListener == shuffleListeners[i]){ shuffleListeners.splice(i, 1); } } } function addZoomListener(zoomListener:ZoomListener):Void { zoomListeners.push(zoomListener); } function removeZoomListener(zoomListener:ZoomListener):Void { for (var i = 0; i < zoomListeners.length; i++) { if(zoomListener == zoomListeners[i]) { zoomListeners.splice(i, 1); } } } function addTimeZoomListener(timeZoomListener:TimeZoomListener):Void { timeZoomListeners.push(timeZoomListener); } function removeTimeZoomListener(timeZoomListener:TimeZoomListener):Void { for (var i = 0; i < timeZoomListeners.length; i++) { if(timeZoomListener == timeZoomListeners[i]) { timeZoomListeners.splice(i, 1); } } } function addMapMouseMoveListener(mapMouseMoveListener:MapMouseMoveListener):Void { mapMouseMoveListeners.push(mapMouseMoveListener); } function removeMapMouseMoveListener(mapMouseMoveListener:MapMouseMoveListener):Void { for (var i = 0; i < mapMouseMoveListeners.length; i++) { if(mapMouseMoveListener == mapMouseMoveListeners[i]){ mapMouseMoveListeners.splice(i, 1); } } } function addLandMarksListener(landMarksListener:LandMarksListener):Void { landMarksListeners.push(landMarksListener); } function removeLandMarksListener(landMarksListener:LandMarksListener):Void { for (var i:Number = 0; i < landMarksListeners.length; i++) { if (landMarksListener == landMarksListeners[i]) { landMarksListeners.splice(i, 1); } } } function addPopUpInfoFeatureListener(popUpInfoFeatureListener:PopUpInfoFeatureListener):Void { popUpInfoFeatureListeners.push(popUpInfoFeatureListener); } function removePopUpInfoFeatureListener(popUpInfoFeatureListener:PopUpInfoFeatureListener):Void { for (var i:Number = 0; i < popUpInfoFeatureListeners.length; i++) { if (popUpInfoFeatureListener == popUpInfoFeatureListeners[i]) { popUpInfoFeatureListeners.splice(i, 1); } } } function beforeChangeActiveMap():Void { updateListeners(activeMapListeners); for (var i:Number = 0; i < activeMapListeners.length; i++) { activeMapListeners[i].beforeChangeActiveMap(); } } function afterChangeActiveMap():Void { updateListeners(activeMapListeners); for (var i:Number = 0; i < activeMapListeners.length; i++) { activeMapListeners[i].afterChangeActiveMap(); } } function changeActiveLayer():Void { updateListeners(activeLayerListeners); for (var i:Number = 0; i < activeLayerListeners.length; i++) { activeLayerListeners[i].onChangeActiveLayer(); } } function shuffle(Void):Void { updateListeners(shuffleListeners); for (var i:Number = 0; i < shuffleListeners.length; i++) { shuffleListeners[i].onShuffle(); } } function changeSRS(Void):Void { updateListeners(srsChangeListeners); for(var i:Number = 0; i < srsChangeListeners.length; i++) { srsChangeListeners[i].onSRSChange(); } } function zoom(Void):Void { updateListeners(zoomListeners); for (var i:Number = 0; i < zoomListeners.length; i++) { zoomListeners[i].onZoom(); } } function timeZoom(Void):Void { updateListeners(timeZoomListeners); for (var i:Number = 0; i < timeZoomListeners.length; i++) { timeZoomListeners[i].onTimeZoom(); } } function mapMouseMove(x:Number, y:Number):Void { updateListeners(mapMouseMoveListeners); for (var i:Number = 0; i < mapMouseMoveListeners.length; i++) { mapMouseMoveListeners[i].onMapMouseMove(x, y); } } function changeLandMarks():Void { updateListeners(landMarksListeners); for (var i:Number = 0; i < landMarksListeners.length; i++) { landMarksListeners[i].onChangeLandMarks(); } } function changePopUpInfoFeature(feature:Feature, dateTime:Date):Void { updateListeners(popUpInfoFeatureListeners); for (var i:Number = 0; i < popUpInfoFeatureListeners.length; i++) { popUpInfoFeatureListeners[i].onChangePopUpInfoFeature(feature, dateTime); } } private function updateListeners(listeners:Array):Void { for (var i:Number = 0; i < listeners.length; i++) { if (listeners[i].toString() == null) { // toString() is necessary as movieclips will never become null. listeners.splice(i--, 1); // i-- because the array that is being looped is also being spliced. } else { for (var j:Number = 0; j < listeners.length; j++) { if ((listeners[i] == listeners[j]) && (i != j)) { listeners.splice(j--, 1); // j-- because the array that is being looped is also being spliced. i is not affected because j is always greater than i here. } } } } } }