How to tell Flash that an image stills loading? If something stills loading. If

Hey,

I’m building an AS3 multi-photo gallery. In this project I have several buttons that take me to each respective gallery, each gallery shows the images side by side, each one loading sequentially from an array. If the first image is completely loaded, the loading process starts to the second image, then the third etc.

It works well but this failure: if the user clicks any gallery button while another gallery stills loading it gets crazy, mixing images from different galleries or shuffling the order of the images.

So when I click a button, I need a function that tells to flash that something stills loading or not. If there is something loading, it closes the active loading process, remove the listeners and then starts a new loading process.

So someone knows how to do it? I’ve tryed several methods, with no sucess.

That’s my code until now, the code that refers to the loading process is highlighted in green:

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, whenLoaded);

xmlLoader.load(new URLRequest("XML/roiaXML.xml"));

var xml:XML;

function whenLoaded(evt:Event):void {
	xml=new XML(evt.target.data);
	var mySetsList:XMLList=xml.children();

	//// MENU BUTTONS ////

	// POSITIONING BUTTONS INSIDE MENU CONTAINER//

	var rowMaxWidth:Number=780;
	var startX:Number=0;
	var startY:Number=0;
	var space:Number=10;
	var leading:Number=10;

	var currentX:Number=startX;
	var currentY:Number=startY;


	// CREATE BUTTONS //

	for (var i:int=0; i< mySetsList.length(); i++) {
		var newSetButtonMC:setButtonMC=new setButtonMC();

		newSetButtonMC.setButtonText.text=mySetsList.attribute("setTitle")*;
		newSetButtonMC.setButtonText.autoSize=TextFieldAutoSize.LEFT;

		// CREATE BACKGROUND //

		var buttonBackground:MovieClip = new MovieClip();
		newSetButtonMC.addChild(buttonBackground);
		newSetButtonMC.setChildIndex(buttonBackground,0);// set depth
		buttonBackground.graphics.beginFill(0x0000FF);
		buttonBackground.graphics.drawRoundRect(-4,-5,newSetButtonMC.width+10,newSetButtonMC.height+10,12);
		buttonBackground.graphics.endFill();

		// CREATE FRONT OBJECT TO ALLOW buttonMode TO WORK PROPERLY//

		var buttonFront:Sprite = new Sprite();
		newSetButtonMC.addChild(buttonFront);
		buttonFront.graphics.beginFill(0xFFFF00);
		buttonFront.graphics.drawRoundRect(-4,-5,buttonBackground.width,buttonBackground.height,12);
		buttonFront.alpha=0;
		buttonFront.graphics.endFill();

		//

		newSetButtonMC.buttonMode=true;

		//

		if (newSetButtonMC.width+currentX<rowMaxWidth) {
			newSetButtonMC.x=currentX;
			newSetButtonMC.y=currentY;
			currentX+=newSetButtonMC.width+space;
		} else {
			currentX=startX;
			currentY+=newSetButtonMC.height+leading;
			newSetButtonMC.x=currentX;
			newSetButtonMC.y=currentY;
			currentX+=newSetButtonMC.width+space;
		}


		// POPULATE IMAGE ARRAY //

		imageLoadArray=new Array();
		for (var j:int=0; j<mySetsList*.IMAGE.length(); j++) {
			imageLoadArray[imageLoadArray.length]=mySetsList*.IMAGE[j].attribute("smallURL");
		}
		newSetButtonMC.imageArray=imageLoadArray;

		//

		newSetButtonMC.addEventListener(MouseEvent.CLICK, onClickButton);

		menuContainer.addChild(newSetButtonMC);
	}


	//// MENU BUTTONS ACTIONS ////

	function onClickButton(mevt:MouseEvent):void {

		// LOAD GALLERY IMAGES //

		currentImageX=0;
		nextItem=0;

		var targetButton:setButtonMC=setButtonMC(mevt.currentTarget);

		if (imagesContainer.numChildren>0) {// to remove previous loaded images
			while (imagesContainer.numChildren>0) {
				imagesContainer.removeChildAt(0);
			}
		}

		\
               [COLOR="YellowGreen"]**function initiateLoading():void {
			if (targetButton.imageArray.length>0) {
				imagesLoader = new Loader();
				imagesLoader.load(new URLRequest(targetButton.imageArray[nextItem]));

				imagesLoader.contentLoaderInfo.addEventListener(Event.OPEN, showPreloader);
				imagesLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, showProgress);
				imagesLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedImage);
			}

		}
                initiateLoading();//to load the first image**[/COLOR]

		//

		function showPreloader(evt:Event):void {
			imagesContainer.addChild(preloader);
			preloader.percentText.text="0%";
			preloader.percentText.autoSize=TextFieldAutoSize.CENTER;
			preloader.x=currentImageX+30;
			preloader.y=10;
		}

		//

		function showProgress(evt:ProgressEvent):void {
			var percent:Number=evt.target.bytesLoaded/evt.target.bytesTotal;
			preloader.percentText.text=Math.round(percent*100)+"%";
		}

		//

		[COLOR="YellowGreen"]**function loadedImage(evt:Event):void {
			imageWidth=evt.target.loader.width;
			evt.target.loader.x=currentImageX;
			currentImageX+=imageWidth+10;

			imagesContainer.addChild(evt.target.loader);

			if (nextItem!=(targetButton.imageArray.length-1)) {
				nextItem++;
				initiateLoading();
			}
			imagesContainer.removeChild(preloader);
		}**[/COLOR]

		//
	}
}

Thanks everybody,

Abstrato