/*---------------- 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.event.*; class nl.idgis.giclient.event.StateEventDispatcher { private var eventListeners:Object = null; // Associative array; function StateEventDispatcher() { eventListeners = new Object(); } function addEventListener(stateEventListener:StateEventListener, sourceClassName:String, actionType:Number, propertyName:String):Void { var key:String = sourceClassName.toUpperCase() + "_" + actionType + "_" + propertyName.toUpperCase(); if (eventListeners[key] == null) { eventListeners[key] = new Array(); } else { for (var i:String in eventListeners[key]) { if (eventListeners[key][i] == stateEventListener) { // EXCEPTION return; } } } eventListeners[key].push(stateEventListener); } function removeEventListener(stateEventListener:StateEventListener, sourceClassName:String, actionType:Number, propertyName:String):Void { var key:String = sourceClassName.toUpperCase() + "_" + actionType + "_" + propertyName.toUpperCase(); if (eventListeners[key] == null) { // EXCEPTION return; } for (var i:String in eventListeners[key]) { if (eventListeners[key][i] == stateEventListener) { delete eventListeners[key][i]; return; } } // EXCEPTION return; } function dispatchEvent(stateEvent:StateEvent):Void { var sourceClassName:String = stateEvent.getSourceClassName(); var actionType:Number = stateEvent.getActionType(); var propertyName:String = stateEvent.getPropertyName(); var key:String = sourceClassName.toUpperCase() + "_" + actionType + "_" + propertyName.toUpperCase(); if (eventListeners[key] == null) { return; } for (var i:Number = 0; i < eventListeners[key].length; i++) { // Dispatches the event in the same order as in which the listeners were added. StateEventListener(eventListeners[key][i]).onStateEvent(stateEvent); } } }