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 ====================*/ /*========================================================================*/ }