All pastes #976012 Raw Edit

Unbenannt

public text v1 · immutable
·published 2008-04-07 21:43 UTC
rendered paste body
class Gallery{
	
	//////////////////////
	// member variablen //
	//////////////////////
	
	/**
		Der Ordner aus dem die Galerie geladen
		werden soll relativ zur swf.
	**/
	public var galerienOrdner:String = "Bilder";
	/**
		speichert den aktuellen Standort im	Verzeichnissbaum
	**/
	public var history : Array = new Array(galerienOrdner);
	/**
		thumbnail breite ( u hoehe )
	**/
	public var thumbBreite : Number = 80;
//	public var thumbHoehe : Number = 80;
	
	/**
		bildgröße
	**/ 
	public var jpegbreite : Number = 400;
	public var jpeghoehe : Number = 300;
	
	/**

		thumbnail Abstand vertical / horizontal
	**/
	public var thumbAbstVert : Number = 10;
//	public var thumbAbstHoriz : Number = 10;
	/**
		Die Breite des Rahmens um die Bilder
		Die Farbe des Rahmens wird über das mc
		border festgelegt
	**/
	public var thumbRahmenBreite : Number = 4;
	/*
		Die position der grossen Bilder, wobei
		centerX u CenterY den Mittelpunkt der grossen
		Bilder beschreiben.
	*/
	public var centerX : Number;
	public var centerY : Number;
	/*
		Hintergrundfarbe des Ladebildschirms
	*/
	public var loadingScCol : Number = 0xCCCCCC;
	/*
		LoadVarObject in dem die Daten aus den
		PHP-Dateien gespeichert werden bzw. mit dem
		die Daten aus der swf verschickt werden.
	*/
	public var daten : XML;
	/*
		Das Array das die Ordnernamen enthält
	*/
	public var ordnerArray : Array = new Array();
	/*
		Leg fest ob sich in dem Ordner nur Bilder befinden
		oder ob es auch noch andere (Sub)Ordner gibt die einen
		weiteren "Ast" im Verzeichnissbaum darstellen.
	*/
	public var picsOnly : Boolean = false;
	/*
		Zählt mit wieviele thumbnail Bilder schon geladen wurden
	*/
	public var thumbsloaded : Number = 0;
	/*
		Die X- und Y-Position der ThumbNails
	*/
	public var thumbsX : Number = 0;
	public var thumbsY : Number = 0;
	
	/*
	Anzahl der Sekunden nach denen abgebrochen werden soll,
	falls ein Bild nicht erfolgreich geladen werden konnte
	*/
	public var maxConnectionTime : Number = 15;
	
	/*
	Sollen die Bilder automatisch angezeigt werden ?
	*/
	public var autoSwitch : Boolean = false;
	
	/*
	Anzahl der Sekunden die die Bilder angezeit werden sollen
	*/
	public var autoSwitchDelay : Number = 2;
	
	/*
	Der Interval fuer die autoSwitch funktion
	*/
	private var autoSwitchInterval : Number;
	
	/*
	Speichert den Index des zuletzt gezeigt Bildes
	*/
	private var currentPic : Number = 0;
	
	
	
	//////////////
	// Methoden //
	//////////////
	
	// Laden //
	///////////
	public function loadData(path:MovieClip):Void{
		
		var me:Object = this; // <- Referenz auf Instanz
		
		me.clearAutoSwitchInterval(path);
		
		// loading screen
		var loadMc:MovieClip = path.createEmptyMovieClip( "loader", 10, {_x:0, _y:0} );
		with( loadMc ){
			Stage.scaleMode = "noBorder";
			beginFill(me.loadingScCol, 40);
				lineTo(0, Stage.height);
				lineTo(Stage.width, Stage.height);
				lineTo(Stage.width, 0);
				lineTo(0, 0);
			endFill();
			attachMovie("loadingData","at_loadingData",10, {_x:Stage.width/2, _y:Stage.height/2} );
		}
		// ..ende loading screen
		
		// laden der daten
		me.daten = new XML();
		me.daten.ignoreWhite = true;
		me.daten.onLoad = function(success){
			if(success){
				loadMc.removeMovieClip();
				me.ordnerArray = new Array();
				// speichern der daten in arrays
				for(var i:String in me.daten.firstChild.childNodes){
					me.ordnerArray.push(me.daten.firstChild.childNodes[i].firstChild.nodeValue);
				}
				me.ordnerArray.reverse();
				me.picsOnly = Boolean( int(me.daten.firstChild.attributes["picsOnly"]));
				//
				if(me.picsOnly){
					path.gotoAndStop(path._currentframe+2);	
				} else {
					path.gotoAndStop(path._currentframe+1);
				}
			}
		}

		me.daten.load("datenXML.php?dir=" + me.galerienOrdner);
		// ..ende laden der daten
	}
	
	
	// Verzeichnisbaum //
	/////////////////////
	public function paintTree(path:MovieClip):Void{
		var me:Object = this; // <- Referenz auf Instanz
		
		me.clearAutoSwitchInterval(path);
		me.currentPic = 0;
		
		// damit der rahmen im Vordergrund bleibt !
		path.rahmen.swapDepths(20);
		// back button
		path.back.onPress = function(){
			//path.rahmen.removeMovieClip(); // nicht unbedingt notwendig
			path.gotoAndStop(path._currentframe - 1);
			me.galerienOrdner = me.history[me.history.length-1];
			me.history.pop();
			// mc für die Ordner-Buttons entfernen
			galerienMc.removeMovieClip();
		}
		// ..ende back buttton
		
		//mc für die Ordner-Buttons erstellen
		var galerienMc:MovieClip = path.createEmptyMovieClip("gMC",1);
		with( galerienMc ){
			_x = 30;
			_y = 30;
			for(i=0; i<this.ordnerArray.length; i++){
				// Ordner-Buttons attachen
				var ordner:MovieClip = attachMovie( "ordner", "ordner_"+i, i , {_x:0,_y:i*30} );
				ordner.gal_name.text = me.ordnerArray[i]; // Namen zuweisen
				
				ordner.onRollOver = function(){
					//over
					with( this ){
						var wabMc_Size:Number = wabbel_ordner_mc._xscale;
						var i:Number = 0;
						// anfangs groesse bestimmen
						wabbel_ordner_mc.onEnterFrame = function(){
							(i>=360) ? i = 1 : i += 0.5;
							// immer wieder von 0 is 360
							this._xscale = this._yscale = wabMc_Size-5 + 2*Math.sin(i);
							// x und x scale abhhängig vom sinus von i => Schwingung
						}
					}
				}
				
				ordner.onRollOut = function(){
					//out
					with( this ){
						delete wabbel_ordner_mc.onEnterFrame;
						wabbel_ordner_mc._xscale = wabbel_ordner_mc._yscale = 100;
					}
				}
				
				ordner.onRelease = function(){
					path.prevFrame();
					me.history.push(me.galerienOrdner);
					me.galerienOrdner += "/" + this.gal_name.text;
					// mc für die Ordner-Buttons entfernen
					galerienMc.removeMovieClip();
				}
			}// ..end for
		} // ..end with
	}

	
	// Thumbnails //
	////////////////
	public function paintThumbnails(path:MovieClip):Void{
		
		var me:Object = this; // <- Referenz auf Instanz
		
		// zeigt an wieviele thumbnails schon geladen wurden und
		// dient später auch als index für die thumbnails
		me.thumbsloaded = 0;
		
		// back button
		path.back.onPress = function(){
			path.gotoAndStop(path._currentframe - 2);
			me.galerienOrdner = me.history[me.history.length-1];
			me.history.pop();
			path.containerJPG.removeMovieClip();
			path.thumbBilder.removeMovieClip();
		}
		// ..ende back buttton

		//////////////////////////////////////////////////////////////////
		// thumbnail mc erstellen und füllen                            //
		//////////////////////////////////////////////////////////////////
		var thumbs:MovieClip;
		// thumbBilder mc erstellen (conatiner für alle thumbnails)
		thumbs = path.createEmptyMovieClip("thumbBilder",10);
		thumbs._x = me.thumbsX + me.thumbRahmenBreite;
		thumbs._y = me.thumbsY + me.thumbRahmenBreite;
		// die thumbnails in thumbBilder loaden
		me.addThumbNail(thumbs);
		//////////////////////////////////////////////////////////////////
				
		//////////////////////////////////////////////////////////////////
		//       container mc und loaderscreen der grossen Bilder       //
		//////////////////////////////////////////////////////////////////
		path.createEmptyMovieClip("containerJPG",-1);
		path.createEmptyMovieClip("geladenPruefer",11);
		path.geladenPruefer.startTime = getTimer();
		path.geladenPruefer.onEnterFrame = function(){
			if( this._parent.containerJPG.getBytesTotal() > 512  &&  this._parent.containerJPG.getBytesLoaded() >= this._parent.containerJPG.getBytesTotal() ){
				//positionierung des containers in der Mitte
				this._parent.containerJPG._x = me.centerX - this._parent.containerJPG._width / 2;
				this._parent.containerJPG._y = me.centerY - this._parent.containerJPG._height / 2;
				this._parent.at_loadingData.removeMovieClip();
				// entfernen des loadingData mc
			}
			if(getTimer() - this.startTime > me.maxConnectionTime*1000){
				this._parent.at_loadingData.removeMovieClip();
				// entfernen des loadingData mc
			}
		}
		//////////////////////////////////////////////////////////////////
		
		/// auto Switch starten wenn benoetigt
		if(me.autoSwitch) me.startAutoSwitch(path);
		
	}
	
	
	
	// addThumbNail //
	//////////////////
	public function addThumbNail(path:MovieClip):Void{

		var me:Object = this; // <- Referenz auf Instanz
		var pic:MovieClip;
		
		// mc einbinden / erzeugen
		with(path){
			
			var pic:MovieClip = createEmptyMovieClip("bild_" + (me.thumbsloaded + me.thumbsloaded));
			
			//bild laden
			with( pic ){
				
				var thumb_jpg:MovieClip = createEmptyMovieClip("thumb_jpg", getNextHighestDepth());
				
				var i:Number = me.thumbsloaded;
				var pfad:String = me.galerienOrdner + "/" + me.ordnerArray[me.thumbsloaded];
				var thumbLoader:MovieClipLoader = new MovieClipLoader();
				var thumbListener:Object = new Object();
							
				
				// wenn das Bild fertig geladen ist
				thumbListener.onLoadInit = function(thumb_jpg:MovieClip):Void{
					// Wenn das thumbnail Bild fertig geladen ist,
					// positionieren Rahmen anfügen und weiter zum nächsten Bild
					with(thumb_jpg._parent){
						//---------------------------- Positionieren der Bilder --------------------------------
						// Abstand der thumbnails vom linken Rand
						_x = 0;
						// alle Bilder anhand ihrer gröss positioniern außer dem ersten Bild
						if(me.thumbsloaded > 0) { // <- alle anderen Bilder
							_y =  _parent["bild_" + (i-1)]._y + _parent["bild_" + (i-1)]._height + me.thumbAbstVert;
						} else { // <- erstes Bild
							// Abstand der Thumbnails vom oberen Rand
							_y = 0;
						}
		
						//---------------------------- Anfügen des Rahmens --------------------------------
						attachMovie("border","thumb_border", -1);
						thumb_border.onEnterFrame = function(){
								this._width = this._parent._width + me.thumbRahmenBreite * 2;
								this._height = this._parent._height + me.thumbRahmenBreite * 2;
								this._x = - me.thumbRahmenBreite;
								this._y = - me.thumbRahmenBreite;
								if( this._width >= 15)
									delete this.onEnterFrame;
						}
	
						//---------------------------- Die Button funktion --------------------------------
						onPress = function():Void{
						// die grossen Bilder werden in den container geladen
							this._parent._parent.containerJPG.loadMovie("create.php?quelle="+pfad+"&breite="+me.jpegbreite+"&hoehe="+me.jpeghoehe);
							// loading mc wird attacht
							this._parent._parent.attachMovie("loadingData","at_loadingData",9, {_x:me.centerX, _y:me.centerY} );
							this._parent._parent.at_loadingData._x -= this._parent._parent.at_loadingData.width;
							this._parent._parent.at_loadingData._y -= this._parent._parent.at_loadingData.height;
							me.currentPic = i;
						}
		
						//---------------------------- zum naechsten Bild --------------------------------
						// weiterzählen
						me.thumbsloaded = me.thumbsloaded+1;
						// die Funktion falls nötig erneut aufrufen damit das nächste kleine Bild geladen wird
						if(me.ordnerArray.length > me.thumbsloaded){
							me.addThumbNail(path);
						}
					}//.. end with thumb_jpg._parent
				}//..end thumbLoader.onLoadComplete
				
				thumbLoader.addListener(thumbListener);
				thumbLoader.loadClip("createThumb.php?quelle="+pfad+"&breite="+me.thumbBreite+"&hoehe="+me.thumbHoehe, thumb_jpg);

			}//..end with pic
		}//..end with path
	}
	
	// nextPic //
	/////////////
	public function nextPic(path:MovieClip):Void
	{
		
		var me:Object = this; // <- Referenz auf Instanz
		
		
		me.currentPic += (me.currentPic < me.ordnerArray.length-1 ) ? 1 :  -me.currentPic ; 
		var pfad:String = me.galerienOrdner + "/" + me.ordnerArray[ me.currentPic ];
		
		
		// die grossen Bilder werden in den container geladen
		path.containerJPG.loadMovie("create.php?quelle="+pfad+"&breite="+me.jpegbreite+"&hoehe="+me.jpeghoehe);
		
		// loading mc wird attacht
		path.attachMovie("loadingData","at_loadingData",9, {_x:me.centerX, _y:me.centerY} );
		path.at_loadingData._x -= path.at_loadingData.width;
		path.at_loadingData._y -= path.at_loadingData.height;

	}

	// prevPic //
	/////////////
	public function prevPic(path:MovieClip):Void{

		var me:Object = this; // <- Referenz auf Instanz
		
		me.currentPic += (me.currentPic > 0) ? -1 : (me.ordnerArray.length-1); 
		var pfad:String = me.galerienOrdner + "/" + me.ordnerArray[ me.currentPic ];
		
		// die grossen Bilder werden in den container geladen
		path.containerJPG.loadMovie("create.php?quelle="+pfad+"&breite="+me.jpegbreite+"&hoehe="+me.jpeghoehe);
		
		
		// loading mc wird attacht
		path.attachMovie("loadingData","at_loadingData",9, {_x:me.centerX, _y:me.centerY} );
		path.at_loadingData._x -= path.at_loadingData.width;
		path.at_loadingData._y -= path.at_loadingData.height;
		
	}
	
	
	// startAutoSwitch //
	/////////////////////
	public function startAutoSwitch(path:MovieClip):Void{
		
		var me:Object = this; // <- Referenz auf Instanz
		
		//erstes Bild sofort anzeigen
		me.nextPic(path);
		
		me.autoSwitchInterval = setInterval(
											function():Void{
												me.nextPic(path);
											}
											, me.autoSwitchDelay*1000, path);
		me.autoSwitch = true;
	}
	
	// stopAutoSwitch //
	///////////////////
	public function stopAutoSwitch(path:MovieClip):Void{
		var me:Object = this; // <- Referenz auf Instanz
		me.clearAutoSwitchInterval(path);
		me.autoSwitch = false;
	}
	
	// clearAutoSwitchInterval //
	/////////////////////////////
	public function clearAutoSwitchInterval(path:MovieClip):Void{
		var me:Object = this; // <- Referenz auf Instanz
		clearInterval( me.autoSwitchInterval );
	}
	
	
} // ..end Class Gallery