<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    initialize="init();" viewSourceURL="srcview/index.html">

<mx:Script>
<![CDATA[
    import flash.utils.getQualifiedClassName;

    import bitmaps.*;
    import mx.controls.Button;

    private var bitmapClasses:Array = [ B0, B1, B2 ];
    private var index:int = 0;
    
    private function init():void
    {
        addSample();
        addSample();
    }
    
    private function addSample():void
    {
        if (container.numChildren == bitmapClasses.length)
            container.removeChildAt(0);
        
        var button:Button = new Button();
        button.label = "Button with icon using cache class B" + index; 
        button.setStyle("icon", getNextBitmapClass(getRandomBitmapData()));
        container.addChild(button); 
    }
    
    private function getNextBitmapClass(bitmapData:BitmapData):Class
    {
        var bitmapClass:Class = bitmapClasses[index];
        index = (index + 1) % bitmapClasses.length;
        RuntimeBitmapAsset.bitmapDatas[getQualifiedClassName(new bitmapClass())] = bitmapData;
        return bitmapClass;
    }
    
    private function getRandomBitmapData():BitmapData
    {
        var bitmapData:BitmapData = new BitmapData(16, 16, true, 0);
        var seed:Number = Math.floor(Math.random() * 10);
        var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE;
        bitmapData.perlinNoise(100 * Math.random(), 100 * Math.random(), 10 * Math.random(), 
            seed, false, true, channels, false, null);
        return bitmapData;
    }
    
]]>
</mx:Script>

    <mx:ApplicationControlBar horizontalCenter="0" top="10">
        
        <mx:Button label="Add Sample" click="addSample()"/>
        
    </mx:ApplicationControlBar>

    <mx:VBox id="container" horizontalCenter="0" verticalCenter="0"/>
    
</mx:Application>