com.neolao.controls.BroadcastMessages

Permet de dispatcher des événements

Classes recquises:

Exemples

BroadcastMessages.addToList(a_mc);
BroadcastMessages.addToList(b_mc);
BroadcastMessages.send("bouh");
// Cela va exécuter la fonction bouh sur a_mc et b_mc
// Equivalent à :
// a_mc.bouh();
// b_mc.bouh();

Méthodes

Visibilité Return Nom Param 1 Param 2 Description
static public Number addToList pListener:Object Ajoute un objet à broadcaster à la liste générale
static public Boolean remove pListener:Object pMute:Boolean Supprime un objet de la liste générale
static public Void send pMessage:String pParam1:Object Envoi un message à tous les objets de la liste générale
public Number addListener pListener:Object Ajoute un objet à broadcaster à la liste
public Boolean removeListener pListener:Object pMute:Boolean Supprime un objet de la liste
public Void sendMessage pMessage:String pParam1:Object Envoi un message à tous les objets de la liste

Change log

[10/05/2004]

Gestion d'événements globaux

[15/09/2004] Version 1.3

  • Modification de addListener et removeListener
  • Pour les logs, le nom de l'objet n'est pas forcément dans le _name ou le className, donc la dernière alternative est l'objet lui meme

[14/03/2005] Version 1.4

Modification des logs

[20/09/2005] Version 1.4

Déplacement de la class dans le package controls

Source

import com.neolao.LogManager;
/**
 * Permet de dispatcher des événements
 * @author 		neolao <neo@neolao.com>
 * @version 		1.4 (20/09/2004)
 * @link		http://resources.neolao.com/flash/classes/controls/broadcastmessages
 * @license		http://creativecommons.org/licenses/by-sa/2.0/	
 */
class com.neolao.controls.BroadcastMessages {
	public var className:String = "BroadcastMessages";
	public var version:String = "1.4";
 
	// ----------------------------- CONSTANTES --------------------------------
 
	// ----------------------------- VARIABLES ---------------------------------
	/**
	 * La liste des écouteurs d'une instance
	 */
	private var _listenersInst:Array;
	/**
	 * Le gestionnaire des logs
	 */
	private var _log:LogManager;
	/**
	 * La liste des écouteurs
	 */
	private static var _listeners:Array = new Array();
	// ----------------------------- EVENEMENTS --------------------------------
 
	/*============================= CONSTRUCTEUR =============================*/
	/*========================================================================*/
	/**
	 * Création d'une instance de BroadcastMessages
	 * @param pName Identifiant qui sert pour les logs [option]
	 */
	function BroadcastMessages(pName:String){
		_listenersInst = new Array();
		_log = new LogManager();
		_log.name = "BroadcastMessages " + pName;
	}
	/*======================= FIN = CONSTRUCTEUR = FIN =======================*/
	/*========================================================================*/
 
	/*=========================== METHODES PRIVEES ===========================*/
	/*========================================================================*/
	/**
	 * Retire un objet d'une liste (générale ou locale)
	 * @param pListener La référence de l'objet à retirer
	 * @param pArray La liste
	 * @return true si l'opération a bien été effectuée 
	 */
	private static function _remove(pListener:Object, pArray:Array):Boolean {
		var vLength:Number = pArray.length;
 
		while (vLength--) {
			if (pArray[vLength] == pListener) {
				pArray.splice (vLength, 1);
 
				return true;
			}
		}
		return false
	}
	/*===================== FIN = METHODES PRIVEES = FIN =====================*/
	/*========================================================================*/
 
	/*============================ GETTER  SETTER ============================*/
	/*========================================================================*/
 
	/*====================== FIN = GETTER  SETTER = FIN ======================*/
	/*========================================================================*/
 
	/*========================== METHODES PUBLIQUES ==========================*/
	/*========================================================================*/
	/**
	 * Ajoute un objet à broadcaster à la liste
	 * @param pListener La référence de l'objet à ajouter à la liste
	 * @return La taille de la liste
	 */
	public function addListener(pListener:Object):Number {
		var vName:String;
 
		if(pListener._name != undefined){
			vName = pListener._name;
		}else if(pListener.className != undefined){
			vName = pListener.className;
		}else{
			vName = String(pListener);
		}
 
		removeListener(pListener, true);
		_log.setAction("Ajoute " + vName + " dans sa liste.", 3);
 
		return _listenersInst.push(pListener);
	}
	/**
	 * Supprime un objet de la liste
	 * @param pListener La référence de l'objet à supprimer
	 * @param pMute Indique S'il ne faut pas ajouter l'action dans les logs [option = false]
	 * @return true si l'opération a bien été effectuée 
	 */
	public function removeListener(pListener:Object, pMute:Boolean):Boolean {
		var vArray:Array = _listenersInst;	
		var vAction = _remove(pListener, vArray);
		var vName:String;
 
		if(pListener._name != undefined){
			vName = pListener._name;
		}else if(pListener.className != undefined){
			vName = pListener.className;
		}else{
			vName = String(pListener);
		}
 
		if(!pMute){
			if(vAction){
				_log.setAction("Retire " + vName + " de sa liste.", 3);
			}else{
				_log.setError("N'a pas pu retirer " + vName + " de sa liste.", 3);
			}
		}
		return vAction;
	}
	/**
	 * Envoi un message à tous les objets de la liste
	 * @param pMessage La fonction à exécuter sur chaque objet
	 * @param pParam1 Premier paramètre de la fonction (vous pouvez ajouter autant de paramètre que vous voulez)[option]
	 */
	public function sendMessage(pMessage:String, pParam1:Object):Void {
		var vMessage:String = String(arguments.shift());
		var vArray:Array = _listenersInst;
		var vLength:Number = vArray.length;
 
		//Je supprime ce commentaire, sur un onEnterFrame, ca fait trop de log
		//_log.action = "Envoi du message " + vMessage + " à sa liste.";
		for (var i=0; i<vLength; i++){
			vArray[i][vMessage].apply(vArray[i], arguments);
		} 
	}
	/**
	 * Les logs de l'instance. ReadOnly
	 */
	public function get log():LogManager {
		return _log;
	}
	// STATIQUES
	/**
	 * Ajoute un objet à broadcaster à la liste générale
	 * @param pListener La référence de l'objet à ajouter à la liste générale
	 * @returns La taille de la liste générale
	 */
	public static function addToList(pListener:Object):Number {
		var vName:String = (pListener._name != undefined)?pListener._name:pListener.className;
		remove(pListener, true);
		LogManager.setGeneralAction("BroadcastMessages ajoute " + vName + " dans sa liste.", 3);
 
		return _listeners.push(pListener);
	}
	/**
	 * Supprime un objet de la liste générale
	 * @param pListener La référence de l'objet à supprimer de la liste générale
	 * @param pMute Indique S'il ne faut pas ajouter l'action dans les logs [option = false]
	 * @returns true si l'opération a bien été effectuée 
	 */
	public static function remove(pListener:Object, pMute:Boolean):Boolean {
		var vArray:Array = _listeners;	
		var vAction = _remove(pListener, vArray);
		var vName:String = (pListener._name != undefined)?pListener._name:pListener.className;
 
		if(!pMute){
			if(vAction){
				LogManager.setGeneralAction("BroadcastMessages retire " + vName + " de sa liste.", 3);
			}else{
				LogManager.setGeneralError("BroadcastMessages n'a pas pu retirer " + vName + " de sa liste.", 3);
			}
		}
		return vAction;
	}
	/**
	 * Envoi un message à tous les objets de la liste générale
	 * @param pMessage La fonction à exécuter sur chaque objet de la liste générale
	 * @param pParam1 Premier paramètre de la fonction (vous pouvez ajouter autant de paramètre que vous voulez)[option]
	 */
	public static function send(pMessage:String, pParam1:Object):Void {
		var vMessage:String = String(arguments.shift());
		var vArray:Array = _listeners;
		var vLength:Number = vArray.length;
 
		//Je supprime ce commentaire, sur un onEnterFrame, ca fait trop de log
		//LogManager.generalAction = "BroadcastMessages : STRmessage";
		for (var i=0; i<vLength; i++){
			vArray[i][vMessage].apply(vArray[i], arguments);
		} 
	}
	/*==================== FIN = METHODES PUBLIQUES = FIN ====================*/
	/*========================================================================*/
}