Codice PHP:
package {
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.events.*;
import flash.net.*;
import flash.xml.*;
import flash.display.MovieClip;
import flash.display.Loader;
import Prec;
import Suc;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class Main extends MovieClip {
//numero di colonne
var columns:Number;
var my_x:Number;
var my_y:Number;
//array temporaneo di anteprime
var thumbs:Array=new Array ();
var my_thumb_width:Number;
var my_thumb_height:Number;
var my_images:XMLList;
//numero totale di immagini
var my_total:Number;
//indice immagine corrente visualizzata
var img_count:Number;
var container_mc:MovieClip;
var preloaders_mc:MovieClip;
var full_mc:MovieClip;
var prec:Prec;
var suc:Suc;
var x_counter:Number=0;
var y_counter:Number=0;
var temp_my_loader:Loader;
var my_tweens:Array=[];
var container_mc_tween:Tween;
var full_tween:Tween;
var error:Error;
var myXMLLoader:URLLoader = new URLLoader();
public function Main() {
prec= new Prec();
suc= new Suc();
myXMLLoader.load(new URLRequest("gallery.xml"));
myXMLLoader.addEventListener(Event.COMPLETE, processXML);
}
function processXML(e:Event):void {
var myXML:XML=new XML(e.target.data);
columns=myXML.@COLUMNS;
my_x=myXML.@XPOSITION;
my_y=myXML.@YPOSITION;
my_thumb_width=myXML.@WIDTH;
my_thumb_height=myXML.@HEIGHT;
my_images=myXML.IMAGE;
my_total=my_images.length();
createContainer();
callThumbs();
myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
myXMLLoader=null;
}
//prepara il container e il movieclip per le anteprime
function createContainer():void {
container_mc = new MovieClip();
container_mc.x=my_x;
container_mc.y=my_y;
addChild(container_mc);
container_mc.addEventListener(MouseEvent.CLICK, callFull);
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc.buttonMode=true;
preloaders_mc = new MovieClip();
preloaders_mc.x=container_mc.x;
preloaders_mc.y=container_mc.y;
addChild(preloaders_mc);
}
//carica le anteprime nel for, e una volta che ogni anteprima è stata caricata
//lancia l'evento che chiama thumbLoaded che si occupa di visualizzarle
function callThumbs():void {
for (var i:Number = 0; i < my_total; i++) {
var thumb_url=my_images[i].@THUMB;
var thumb_loader = new Loader();
thumb_loader.load(new URLRequest(thumb_url));
thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
thumb_loader.name=i;
//dispone i thumbnail con un padding di 10px
thumb_loader.x = (my_thumb_width+10)*x_counter;
thumb_loader.y = (my_thumb_height+10)*y_counter;
thumbs.push(thumb_loader);
if (x_counter+1<columns) {
x_counter++;
} else {
x_counter=0;
y_counter++;
}
}
}
//visualizza le thumbs con un effetto dissolvenza
function thumbLoaded(e:Event):void {
for (var i:Number = 0 ; i <= 1000000; i++) {}
var my_thumb:Loader=Loader(e.target.loader);
container_mc.addChild(my_thumb);
my_tweens[Number(my_thumb.name)]=new Tween(my_thumb,"alpha",Strong.easeIn,0,1,0.5,true);
my_thumb.contentLoaderInfo.removeEventListener(Event.COMPLETE, thumbLoaded);
}
//si occupa di caricare l'immagine ad alta risoluzione
//solo nel momento in cui un'anteprima viene cliccata, in modo da risparmiare risorse
function callFull(e:MouseEvent):void {
var full_loader:Loader = new Loader();
var full_url=my_images[e.target.name].@FULL;
img_count=e.target.name;
trace("image_count " + img_count);
full_loader.load(new URLRequest(full_url));
full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded);
//rimuovo gli eventi sulla galleria in background
container_mc.removeEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=false;
container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeIn,1,0.5,0.5,true);
trace("image_count " + img_count);
//visualizzo i pulsanti precedente e successiva, tenendo conto della
//diapositiva in cui ci trova (differenza prima ed ultima)
if (e.target.name==0) {
addChild(suc);
}
if (e.target.name==my_total-1) {
addChild(prec);
}
if (e.target.name!=0&&e.target.name!=my_total-1) {
addChild(prec);
addChild(suc);
}
prec.buttonMode=true;
suc.buttonMode=true;
prec.x=50;
prec.y=590;
suc.x=550;
suc.y=590;
prec.addEventListener(MouseEvent.CLICK, callPrec);
suc.addEventListener(MouseEvent.CLICK, callSuc);
}
//completato il caricamento dell'immagine ad alta risoluzione
//fullLoaded la visualizza ed aggiunge gli eventi per poterla rimuovere
function fullLoaded(e:Event):void {
full_mc = new MovieClip();
full_mc.buttonMode=true;
addChild(full_mc);
var my_loader:Loader=Loader(e.target.loader);
temp_my_loader=my_loader;
full_mc.addChild(my_loader);
full_tween=new Tween(my_loader,"alpha",Strong.easeIn,0,1,0.5,true);
my_loader.x = (stage.stageWidth - my_loader.width)/2;
my_loader.y = (stage.stageHeight - my_loader.height)/2;
my_loader.addEventListener(MouseEvent.CLICK,removeFull);
my_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fullLoaded);
}
//Aggiunge il tween per la scoparsa dell'immagine
function removeFull(e:MouseEvent):void {
var my_loader:Loader=Loader(e.currentTarget);
full_tween=new Tween(my_loader,"alpha",Strong.easeOut,1,0,0.5,true);
full_tween.addEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeOut,0.5,1,0.5,true);
trace("image_count " + img_count);
if (img_count==0) {
removeChild(suc);
}
if (img_count==my_total-1) {
removeChild(prec);
}
if (img_count!=0&&img_count!=my_total-1) {
removeChild(prec);
removeChild(suc);
}
}
//rimuove l'immagine ad alta risoluzione e ripristina lo stato della galleria
function tweenFinished(e:TweenEvent):void {
var my_loader:Loader=Loader(e.target.obj);
my_loader.unload();
//try {
full_mc.removeChild(my_loader);// This line was removeChid(my_loader), just add full_mc before it.
removeChild(full_mc);
//} catch (error:Error) {}
full_mc=null;
container_mc.addEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=true;
container_mc.addEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.addEventListener(MouseEvent.MOUSE_OUT, onOut);
var my_tween:Tween=Tween(e.target);
my_tween.removeEventListener(TweenEvent.MOTION_FINISH, tweenFinished);
}
//Enfasi sulle thumbnails
function onOver(e:MouseEvent):void {
var my_thumb:Loader=Loader(e.target);
my_thumb.alpha=0.5;
}
function onOut(e:MouseEvent):void {
var my_thumb:Loader=Loader(e.target);
my_thumb.alpha=1;
}
//passa all'immagine successiva
function callSuc(e:MouseEvent):void {
trace("image_count " + img_count);
//rimuove quella ad alta risoluzione simulando un evento
temp_my_loader.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false));
img_count=img_count+1;
//carica l'immagine successiva
var full_loader:Loader = new Loader();
var full_url=my_images[img_count].@FULL;
trace("image_count " + img_count);
full_loader.load(new URLRequest(full_url));
full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoadedButton);
container_mc.removeEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=false;
container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeIn,1,0.5,0.5,true);
trace("image_count " + img_count);
}
//idem a callSuc ma carica la precedente
function callPrec(e:MouseEvent):void {
container_mc.removeEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=false;
container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
temp_my_loader.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false));
img_count=img_count-1;
var full_loader:Loader = new Loader();
var full_url=my_images[img_count].@FULL;
trace("image_count " + img_count);
full_loader.load(new URLRequest(full_url));
full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoadedButton);
container_mc.removeEventListener(MouseEvent.CLICK, callFull);
container_mc.buttonMode=false;
container_mc.removeEventListener(MouseEvent.MOUSE_OVER, onOver);
container_mc.removeEventListener(MouseEvent.MOUSE_OUT, onOut);
container_mc_tween=new Tween(container_mc,"alpha",Strong.easeIn,1,0.5,0.5,true);
trace("image_count " + img_count);
}
//variante di fullLoaded per visualizzare l'immagine ad alta risoluzione
//viene utilizzato dalle funzioni degli eventi dei pulsanti precedente e successiva
function fullLoadedButton(e:Event):void {
full_mc = new MovieClip();
full_mc.buttonMode=true;
addChild(full_mc);
var my_loader:Loader=Loader(e.target.loader);
temp_my_loader=my_loader;
full_mc.addChild(my_loader);
full_tween=new Tween(my_loader,"alpha",Strong.easeIn,0,1,0.5,true);
my_loader.x = (stage.stageWidth - my_loader.width)/2;
my_loader.y = (stage.stageHeight - my_loader.height)/2;
my_loader.addEventListener(MouseEvent.CLICK,removeFull);
my_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fullLoaded);
if (img_count==0) {
addChild(suc);
}
if (img_count==my_total-1) {
addChild(prec);
}
if (img_count!=0&&img_count!=my_total-1) {
addChild(prec);
addChild(suc);
}
prec.buttonMode=true;
suc.buttonMode=true;
prec.x=50;
prec.y=590;
suc.x=550;
suc.y=590;
prec.addEventListener(MouseEvent.CLICK, callPrec);
suc.addEventListener(MouseEvent.CLICK, callSuc);
}
}
}