rendered paste body/**
* (c) JPH-DEV.NET 2007
*
*/
package {
// import
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.net.LocalConnection;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.text.TextField;
import flash.events.MouseEvent;
// import
import Thumb;
// import
import de.alex_uhlmann.animationpackage.*;
import de.alex_uhlmann.animationpackage.animation.*;
import de.alex_uhlmann.animationpackage.drawing.*;
import de.alex_uhlmann.animationpackage.utility.*;
import com.robertpenner.easing.*;
/**
* Document Class.
* Dokument Klasse der Applikation.
*
* @author Jean-Pascal Hövel <contact@jph-dev.net>
*
*/
public dynamic class Main extends MovieClip
{
/**************************************************************************
PUBLIC-VARS
***************************************************************************/
/**
* Ladebalken der in der
* imageviewer.fla definiert wurde und dort
* angepasst werden kann.
*
*/
public var progressBar:MovieClip;
/**
* TextField das in der
* imageviewer.fla definiert wurde und dort
* angepasst werden kann.
*
*/
public var statusField:TextField;
/**
* TextField das in der
* imageviewer.fla definiert wurde und dort
* angepasst werden kann.
*
*/
public var percentField:TextField;
/**
* Clip der in der
* imageviewer.fla definiert wurde und dort
* angepasst werden kann.
*
*/
public var blend:Sprite;
/**
* Clip der in der
* imageviewer_full.fla definiert wurde und dort
* angepasst werden kann.
*
*/
public var box:Sprite;
/**************************************************************************
PRIVATE-VARS
***************************************************************************/
/**
* Speichert die geladenen
* Bilder.
*
*/
private var images:Array = [];
/**
* Speichert die aktiven
* Bilder.
*
*/
private var pool:Array = [];
/**
* Halter für Bilder.
*
*/
private var imageHolder:Sprite;
/**
* Speichert den Index des Momentan
* ladenden Bildes.
*
*/
private var currentImage:int = 0;
/**
* Speichert den Loader.
*
*/
private var loader:Loader;
/**
* Pausiert die Bilder.
*
*/
private var pause:Boolean;
/**************************************************************************
CONTRUCTOR
***************************************************************************/
/**
* Konstruktor.
*
*/
public function Main(){
// progressBar resetten
progressBar.gotoAndStop(0);
// blend verstecken
blend.alpha = 0;
// blend ausrichten
blend.width = parent.stage.stageWidth;
blend.height = parent.stage.stageHeight;
// imageHolder erzeugen
imageHolder = new Sprite();
// listener anmelden
imageHolder.addEventListener(MouseEvent.ROLL_OVER, function(){ pause = true; });
imageHolder.addEventListener(MouseEvent.ROLL_OUT , function(){ pause = false; });
}
/**************************************************************************
PUBLIC-METHODS
***************************************************************************/
public function run():void {
status = 'Fordere Bilder-Liste an...';
// bildlisten request
var request:URLRequest = new URLRequest('iv.php');
request.data = 'command=list&random=' + new Date().time;
request.method = URLRequestMethod.POST;
// loader
var loader:URLLoader = new URLLoader();
// listener
loader.addEventListener(Event.COMPLETE , handleImageList);
loader.addEventListener(IOErrorEvent.IO_ERROR, handleConnectionError);
// senden
loader.load(request);
}
/**************************************************************************
PRIVATE-METHODS
***************************************************************************/
/**
* Läd Bild für Bild.
*
*/
private function loadThumbs(event:Event = null):void
{
// wenn kein folge bild von vorne beginnen...
if(event === null)
{
currentImage = 0;
}
else
{
// listener vom momentanen löschen
images[currentImage].clip.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadThumbs);
images[currentImage].clip.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, handleImageProgress);
// clip umwandeln
images[currentImage].clip = (images[currentImage].clip.contentLoaderInfo.content);
// wenn noch bilder vohanden...
if(currentImage + 1 < images.length)
{
currentImage++;
}
else {
// loader resetten
status = 'Laden beendet, initialisiere...';
percent = 0;
// geladene bilder durchlaufen
for(var i:int = 0; i < images.length; i++)
{
// referenz holen
var current:DisplayObject = images[i].clip;
// sprite erzeugen
images[i].clip = new Sprite();
// sprite übernehmen
images[i].clip.addChild(current);
// thumb erzeugen
images[i].thumb = new Thumb(images[i].name, images[i].clip);
// prozent berechnen
percent = Math.round((i / (images.length - 1)) * 100);
}
// main adden
imageHolder = addChild(imageHolder);
// benachrichtigen
status = 'Fertig!';
// loader ausblenden
new Alpha(blend, 1, 1000).animate(0, 100);
// erstes bild in den pool aufnehmen
var first:Object = images.shift();
var clip:Sprite = imageHolder.addChild(first.clip);
clip.x = (clip.width + 1) * -1;
first.clip = clip;
pool.push(first);
// bewegung einleiten..
addEventListener(Event.ENTER_FRAME, handleEnterFrame);
// beenden
return;
}
}
var r:URLRequest = new URLRequest('iv.php');
r.data = 'command=thumb&image=' + (images[currentImage].name) + '&random=' + new Date().time;
r.method = URLRequestMethod.POST;
images[currentImage].clip = new Loader();
images[currentImage].clip.contentLoaderInfo.addEventListener(Event.COMPLETE, loadThumbs);
images[currentImage].clip.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, handleImageProgress);
images[currentImage].clip.load(r);
status = 'Lade Thumb "' + images[currentImage].name + '" (' + (currentImage + 1) + '/' + images.length + ')';
}
/**************************************************************************
PRIVATE-SETTER
***************************************************************************/
/**
* Legt den Statustext fest.
*
* @param message
*
*/
private function set status(message:String):void
{
statusField.text = message;
}
/**
* Legt die Prozentanzeige fest.
*
* @param message
*
*/
private function set percent(value:Number):void
{
// feld updaten
percentField.text = value.toString() + '%';
// bar updaten
progressBar.gotoAndStop(Math.round((progressBar.totalFrames / 100) * value));
}
/**************************************************************************
EVENT-HANDLER
***************************************************************************/
/**
* Behandelt empfangene
* Antworten.
*
* @param event
*
*/
private function handleImageList(event:Event):void
{
var data:String = event.target.data;
// wenn daten empfangen...
if(data is String)
{
try
{
// xml erzeugen
var listXML:XML = new XML(data);
listXML.ignoreWhitespace = true;
if(listXML.elements('image') is XMLList)
{
// liste holen
var list:XMLList = listXML.elements('image');
// wenn einträge vorhanden...
if(list.length() > 0)
{
// bilder durchlaufen...
for(var i:int = 0; i < list.length(); i++)
{
if(list[i].@file is XMLList)
{
// mitteilen
status = 'Lese Bild: ' + list[i].@file;
// bild informationen speichern
images.push({name:list[i].@file, clip:null});
}
else
{
status = 'Fehler: Keine gueltige Liste erhalten.';
break;
}
}
// bilder laden
loadThumbs();
}
else status = 'Fehler: Bild-Liste ist leer';
}
else status = 'Fehler: Keine gueltige Liste erhalten.';
}
catch(error:Error)
{
status = 'Fehler: Keine gueltige Liste erhalten.';
}
}
else status = 'Fehler: Keine gueltige Liste erhalten.';
}
/**
* Zeigt den Ladestatus des aktuellen Bildes
* an.
*
* @param event ProgressEvent
*/
private function handleImageProgress(event:ProgressEvent):void
{
percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100);
}
/**
* Behandlet Fehler bei Anfragen.
*
* @param event
*
*/
private function handleConnectionError(event:IOErrorEvent):void
{
status = 'Fehler: Keine Verbindung.';
}
/**
* Bewegt die Bilder von links nach rechts
* in einer Endlosschleife.
*
* @param event
*
*/
private function handleEnterFrame(event:Event):void
{
// wenn nicht pausiert..
if(!pause)
{
// pool durchlaufen..
for(var i:Number = 0; i < pool.length; i++)
{
// wenn letzes element...
if(i == pool.length - 1 || pool.length == 1)
{
if(pool[i].clip.x >= 0)
{
// nächstes holen
var next:Object = images.shift();
// adden
var clip:Sprite = imageHolder.addChild(next.clip);
// positionieren
clip.x = (clip.width + 1) * -1;
// clip ersetzen
next.clip = clip;
// pool anhängen
pool.push(next);
}
}
// wenn erstes element...
else if(i == 0)
{
// wenn ausserhalb der bühne...
if(pool[i].clip.x >= parent.stage.stageWidth)
{
// löschen
imageHolder.removeChild(pool[i].clip);
// images wieder anhängen
images.push(pool.shift());
// beenden
break;
}
}
// bewegen
pool[i].clip.x += 2;
}
}
}
}
}