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