All pastes #480878 Raw Edit

Untitled

public text v1 · immutable
·published 2007-05-10 14:03 UTC
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;					
				}
			}
		}
	}
}