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; }
}
}
}
}