All pastes #392542 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-03-12 22:14 UTC
rendered paste body
import mx.transitions.Tween;

/** Classe Rubrique permettant de gérer le menu "accordéon"
  * @author Dhaya Benmessaoud
  * @version 1.5 (09-03-2007)
  * @param DEBUG Affiche les informations de debug
  * @param LENGTH Nombre de Rubriques
  * @param LIST Liste des instances de Rubrique
  * @param MENU MovieClip du menu
  * @param RUBRIQUE_WIDTH Longueur de la poignée
  * @param RUBRIQUE_HEIGHT Hauteur de la Rubrique
  * @param RUBRIQUE_SPACER Espace requis entre les Rubriques
  * @param DEPLACE_OK Peut se déplacer ou pas
  * @param VITESSE Vitesse de mouvement
  * @param VITMAX Vitesse maximum à la limite de la zone
  * @param nom Nom de l'instance
  * @param etat 1: Ouvert / 0: Fermé
  * @param clip MovieClip de la poignée
  * @param xml Chemin des données XML
  * @param css Chemin de la feuille CSS
  * @param t Tableau de données pour les Etiquettes
  * @param vignette Sous-menu correspondant à la Rubrique
  * @param banniere Identificateur de bannière
  */
class Rubrique
{
	public static var DEBUG:Number = 0;			// Affiche les informations de debug
	public static var LENGTH:Number = 0;		// Nombre de Rubriques
	public static var LIST:Array = new Array();	// Liste des instances de Rubrique
	public static var MENU:MovieClip;			// MovieClip du menu
	
	/* Paramètres de la poignée et de l'inter-rubrique */
	public static var RUBRIQUE_WIDTH:Number = 30;
	public static var RUBRIQUE_HEIGHT:Number = 350;
	public static var RUBRIQUE_SPACER:Number = 5;
	
	/* Paramètres de dynamique de déplacement */
	public static var DEPLACE_OK:Number = 1;
	public static var VITESSE:Number = 0;
	public static var VITMAX:Number = 20;
	
	/* Paramètres d'instance */
	private var nom:String;
	private var etat:Number;
	private var clip:MovieClip;
	private var xml:String;
	private var css:String;
	private var t:Array;
	private var banniere:Number;
	private var vignette:Vignette;
	
	/** Constructeur de la classe
	  * @author Dhaya Benmessaoud
	  * @version 2.0 (08-03-2007)
	  * @param nom Nom de l'instance
	  * @param xml Chemin des données XML
	  * @param css Chemin de la feuille CSS
	  * @param t Tableau des données pour les Etiquettes
	  * @param poignee_mc Chemin du MovieClip externe pour la poignée
	  * @param banniere Identificateur de bannière
	  */
	function Rubrique(nom:String, xml:String, css:String, t:Array, poignee_mc:String, banniere:Number)
	{
		this.nom = nom;
		this.etat = 0;
		
		var c:MovieClip = MENU.createEmptyMovieClip(nom+"_mc",MENU.getNextHighestDepth());
		c.POSITION = LENGTH;
		var cp:MovieClip = c.createEmptyMovieClip("poignee_mc",c.getNextHighestDepth());
		var cp_mcl:MovieClipLoader = new MovieClipLoader();
		var cp_mcli:Object = new Object();
		cp_mcli.onLoadInit = function(mc:MovieClip):Void {
			cp.onRelease = function() {
				LIST[c.POSITION].clic();
			}
		}
		
		cp_mcl.addListener(cp_mcli);
		cp_mcl.loadClip(poignee_mc,cp);
		
		this.clip = c;
		c._x = LENGTH * (RUBRIQUE_WIDTH+RUBRIQUE_SPACER);
		
		this.xml = xml;
		this.css = css;
		this.t = t;
		this.banniere = banniere;
		LENGTH++;
		LIST.push(this);
		
		creerVignette(nom,xml,t,this);
		
		if (DEBUG == 1) trace("- Création RUBRIQUE "+nom+" / XML "+xml+" / BANNIERE "+banniere);
	}
	public function getEtat():Number
	{
		return this.etat;
	}
	public function setEtat(etat:Number):Void
	{
		this.etat = etat;
	}
	
	
	/** Fonction de création de vignette
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (08-03-2007)
	  * @param nom Nom de la vignette
	  * @param xml Chemin des données XML
	  * @param t Tableau de données pour les Etiquettes
	  * @param classe Instance de la classe courante
	  */
	 public function creerVignette(nom:String,xml:String,t:Array,classe:Rubrique)
	 {
		 /*var docXML:XML = new XML();
		 docXML.ignoreWhite = true;
		 docXML.load(xml);
		 docXML.onLoad = function (success) {
			if (success) {
				var attr:Object = new Object();
				attr.nom = nom;
				attr.longueur = t[1];
				attr.hauteur = t[2];
				attr.rubriques = new Array();
				for (var i:Number = 0; i< docXML.firstChild.childNodes.length; i++) {
					attr.rubriques[i] = new Array(docXML.firstChild.childNodes[i].childNodes.length,docXML.firstChild.childNodes[i].attributes.couleur,docXML.firstChild.childNodes[i].attributes.id);
				}
				var v:Vignette = new Vignette(classe, attr);
				classe.vignette = v;
			}
		 }
	 */
	 }
	 
	/** Fonction déclenchée lors du clic sur la poignée d'une Rubrique
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (05-03-2007)
	  */
	public function clic():Void {
		if (DEBUG == 1) trace("+ CLIC sur "+this.nom+" / ETAT "+getEtat());
		if (getEtat() == 0) {
			this.ouvrir();
			if (this.vignette.getEtat() == 0) this.vignette.clic();
		} else {
			this.fermer();
			if (this.vignette.getEtat() == 1) this.vignette.clic();
		}
	}
	
	/** Création du conteneur de données XML
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (05-03-2007)
	  */
	public function ouvrir(Void):Void
	{
		this.setEtat(1);
		var clipOuvert:MovieClip = this.clip.createEmptyMovieClip(this.nom+"_ouvert_mc",this.clip.getNextHighestDepth());
		clipOuvert._x = RUBRIQUE_WIDTH;
		this.chargementXML(this, clipOuvert);
	}
	
	/** Destruction du conteneur de données XML
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (05-03-2007)
	  */
	public function fermer(Void):Void
	{
		this.setEtat(0);
		var clipOuvert:MovieClip = eval("this.clip."+this.nom+"_ouvert_mc");
		clipOuvert.removeMovieClip();
		redimensionner();
	}
	
	/** Chargement des données XML
	  * @author Cathy Carvalho
	  * @version 1.0 (05-03-2007)
	  * @param classe Instance de la classe courante
	  * @param clipOuvert MovieClip du conteneur
	  */
	function chargementXML(classe:Rubrique, clipOuvert:MovieClip):Void
	{
		if (DEBUG == 1) trace(" + Chargement XML "+this.xml);
		var docXML:XML = new XML();
		docXML.ignoreWhite = true;
		docXML.load(this.xml);
		docXML.onLoad = function (success:Boolean):Void
		{
			if (success) {
				classe.chargementCSS(classe, docXML, clipOuvert, classe.t);
			}
		};
	}
	
	/** Chargement des données CSS et Tween d'ouverture
	  * @author Cathy Carvalho
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (05-03-2007)
	  * @param classe Instance de la classe courante
	  * @param docXML Données XML
	  * @param clipOuvert MovieClip du conteneur
	  * @param t Tableau des données pour les Etiquettes
	  */
	public function chargementCSS(classe:Rubrique, docXML:XML, clipOuvert:MovieClip, t:Array):Void
	{
		if (DEBUG == 1) trace("  + Chargement CSS "+this.css);
		var styles:TextField.StyleSheet = new TextField.StyleSheet();
		styles.onLoad = function (success:Boolean):Void
		{
			if (success)
			{
				if (DEBUG == 1) trace("   - MenuDoc sur "+clipOuvert);
				var document:MenuDoc = new MenuDoc(docXML, styles, clipOuvert, t);
				
				/* Animation graduée d'ouverture de l'accordéon */
				var w:Number = clipOuvert._width + RUBRIQUE_SPACER;
				var cache:MovieClip = clipOuvert._parent.createEmptyMovieClip("dummy",clipOuvert._parent.getNextHighestDepth());
				cache._x = RUBRIQUE_WIDTH;
				cache.beginFill(0x000000);
				cache.lineTo(0,0);
				cache.lineTo(w,0);
				cache.lineTo(w,RUBRIQUE_HEIGHT);
				cache.lineTo(0,RUBRIQUE_HEIGHT);
				cache.lineTo(0,0);
				cache.endFill();
				var tween_lst:Object = new Object();
				var tween:Tween = new Tween(clipOuvert,"_width",mx.transitions.easing.Regular.easeOut,0,w,0.5,true);
				tween.addListener(tween_lst);
				tween_lst.onMotionChanged = function(tw:Tween, pos:Number):Void {
					cache._width = pos;
					classe.redimensionner();
				}
				tween_lst.onMotionFinished = function(tw:Tween):Void {
					var tween2_lst:Object = new Object();
					var tween2:Tween = new Tween(cache,"_alpha", mx.transitions.easing.Regular.easeOut,100,0,0.2,true);
					tween2.addListener(tween2_lst);
					tween2_lst.onMotionFinished = function(tw:Tween):Void {
						cache.removeMovieClip();
					}
					
				}
			}
		}
		styles.load(this.css);
	}
	
	/** Redimensionnement des Rubriques
	  * @author Dhaya Benmessaoud
	  * @version 1.0 (05-03-2007)
	  */
	public function redimensionner(Void):Void
	{
		if (LIST.length > 1)
		{
			for (var i:Number=1; i<LIST.length; i++)
			{
				LIST[i].clip._x = LIST[i-1].clip._x + LIST[i-1].clip._width + RUBRIQUE_SPACER;
			}
		}
	}
	
	/** Déplacement du menu
	  * @author Dhaya Benmessaoud
	  * @author Bertrand Ventadour
	  * @version 2.0 (09-03-2007)
	  */
	public static function deplacer(Void):Void
	{
		if (MENU._width > Stage.width && DEPLACE_OK == 1 && MENU._parent._ymouse < MENU._y + MENU._height) {
			var zone:Number = Stage.width/8;
			
			if (MENU._parent._xmouse < zone) {
				var p:Number = (MENU._parent._xmouse - zone) / 100;
				VITESSE = -p * VITMAX;
				if (MENU._x < -VITESSE) {
					MENU._x += VITESSE;
					MENU._parent.ban_mc.ban.deplacePlans(-VITESSE);
					
				} else { MENU._x = 0; }
			} else if (MENU._parent._xmouse > Stage.width - zone) {
				var p:Number = (MENU._parent._xmouse - (Stage.width - zone)) / 100;
				VITESSE = -p * VITMAX;
				if (MENU._x > Stage.width  - MENU._width - VITESSE) {
					MENU._x += VITESSE;
					MENU._parent.ban_mc.ban.deplacePlans(-VITESSE);
					
				} else { MENU._x = Stage.width - MENU._width; }
			} else if (VITESSE > 1) {
				VITESSE -= VITESSE/10;
				if (MENU._x < -VITESSE) {
					MENU._x += VITESSE;
					MENU._parent.ban_mc.ban.deplacePlans(-VITESSE);
					
				} else { MENU._x = 0; }
			} else if (VITESSE < -1) {
				VITESSE -= VITESSE/10;
				if (MENU._x > Stage.width - MENU._width - VITESSE) {
					MENU._x += VITESSE;
					MENU._parent.ban_mc.ban.deplacePlans(-VITESSE);
					
				} else { MENU._x = Stage.width - MENU._width; }
			}
			
		}
	}
}