/*---------------- 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.util.CustomListener; import nl.idgis.giclient.gis.EditListener; import nl.idgis.giclient.gui.mapviewer.MapViewer; import nl.idgis.giclient.gui.mapviewer.MapViewerLoadListener; class nl.idgis.giclient.RulerEventDispatcher { private var mapViewerLoadListeners:Array = null; private var customListeners:Array = null; private var editListeners:Array = null; function RulerEventDispatcher() { mapViewerLoadListeners = new Array(); customListeners = new Array(); editListeners = new Array(); } function addMapViewerLoadListener(mapViewerLoadListener:MapViewerLoadListener):Void { mapViewerLoadListeners.push(mapViewerLoadListener); } function removeMapViewerLoadListener(mapViewerLoadListener:MapViewerLoadListener):Void { for (var i = 0; i < mapViewerLoadListeners.length; i++) { if (mapViewerLoadListener == mapViewerLoadListeners[i]){ mapViewerLoadListeners.splice(i, 1); } } } function addCustomListener(customListener:CustomListener):Void { customListeners.push(customListener); } function removeCustomListener(customListener:CustomListener):Void { for (var i:Number = 0; i < customListeners.length; i++) { if (customListener == customListeners[i]) { customListeners.splice(i, 1); } } } function addEditListener(editListener:EditListener):Void { editListeners.push(editListener); } function removeEditListener(editListener:EditListener):Void { for (var i:Number = 0; i < editListeners.length; i++) { if (editListener == editListeners[i]) { editListeners.splice(i, 1); } } } function mapViewerBusy(mapViewer:MapViewer) { updateListeners(mapViewerLoadListeners); for (var i:Number = 0; i < mapViewerLoadListeners.length;i++) { mapViewerLoadListeners[i].onMapViewerBusy(mapViewer); } } function mapViewerLoad(mapViewer:MapViewer, numBytesLoaded:Number, numBytesTotal:Number) { updateListeners(mapViewerLoadListeners); for (var i:Number = 0; i < mapViewerLoadListeners.length;i++) { mapViewerLoadListeners[i].onMapViewerLoad(mapViewer, numBytesLoaded, numBytesTotal); } } function mapViewerReady(mapViewer:MapViewer) { updateListeners(mapViewerLoadListeners); for (var i:Number = 0; i < mapViewerLoadListeners.length;i++) { mapViewerLoadListeners[i].onMapViewerReady(mapViewer); } } function custom(eventObject:Object):Void { updateListeners(customListeners); for (var i:Number = 0; i < customListeners.length; i++) { customListeners[i].onCustom(eventObject); } } function changeEditing():Void { updateListeners(editListeners); for (var i:Number = 0; i < editListeners.length; i++) { editListeners[i].onChangeEditing(); } } 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. } } } } } }