/*---------------- 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.Feature; import nl.idgis.giclient.gis.FeatureGeometryListener; class nl.idgis.giclient.gis.FeatureEventDispatcher { private var featureGeometryListeners:Array = null; function FeatureEventDispatcher() { featureGeometryListeners = new Array(); } function addFeatureGeometryListener(featureGeometryListener:FeatureGeometryListener):Void { featureGeometryListeners.push(featureGeometryListener); } function removeFeatureGeometryListener(featureGeometryListener:FeatureGeometryListener):Void { for (var i:Number = 0; i < featureGeometryListeners.length; i++) { if (featureGeometryListener == featureGeometryListeners[i]){ featureGeometryListeners.splice(i, 1); } } } function changeFeatureGeometry(feature:Feature):Void { updateListeners(featureGeometryListeners); var listeners:Array = featureGeometryListeners.concat(); for (var i:Number = 0; i < listeners.length; i++) { listeners[i].onChangeFeatureGeometry(feature); } } 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 = i + 1; j < listeners.length; j++) { if (listeners[i] == listeners[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. } } } } } }