<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:graphics="com.cynergysystems.graphics.*" 
    xmlns="*" layout="absolute"
    creationComplete="onCreationComplete()" frameRate="1"
    paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"
    >
    
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.utils.ObjectUtil;
            import mx.core.UIComponent;
            import mx.controls.Alert; 
            
            
            private var timer : Timer;
            private var timerInterval : Number = 300;

            private function onCreationComplete() : void
            {
                timer = new Timer(timerInterval);
                timer.addEventListener( TimerEvent.TIMER , onTimerEvent );
                timer.start();
            }
            
            public static function toByteArray( bd : BitmapData ) : ByteArray
            {
                var pixels : ByteArray = new ByteArray();
                
                for( var i:uint=0; i<bd.width ; i++ )
                {
                  for( var j:uint=0; j<bd.height; j++ )
                  {
                    pixels.writeUnsignedInt( bd.getPixel( i, j ) );
                  }
                }

                return pixels;
            }

            private function onTimerEvent( event : Event ):void
            {
                var so:SharedObject = SharedObject.getLocal("sharedDesktop", "/", false);
                var bd : BitmapData = getUIComponentBitmapData( sourceContainer );
                
                so.data.width = bd.width;
                so.data.height = bd.height;
                so.data.bitmapByteArray = toByteArray( bd );
                
                var flushStatus:String = null;
                try {
                    flushStatus = so.flush(10000);
                } catch (error:Error) {
                    trace("Error...Could not write SharedObject to disk");
                }
            }
            
            private function getUIComponentBitmapData( target : UIComponent ) : BitmapData
            { 
                var bd : BitmapData = new BitmapData( target.width, target.height );
                var m : Matrix = new Matrix();
                bd.draw( target, m );
                return bd;  
            }
            
        ]]>
    </mx:Script>
    
    <mx:XMLList id="treeData">
        <node label="Mail Box">
            <node label="Inbox">
                <node label="Marketing"/>
                <node label="Product Management"/>
                <node label="Personal"/>
            </node>
            <node label="Outbox">
                <node label="Professional"/>
                <node label="Personal"/>
            </node>
            <node label="Spam"/>
            <node label="Sent"/>
        </node>    
    </mx:XMLList>

    <mx:Panel   
        title="Broadcaster"
        id="sourceContainerPanel">
        
        <mx:Canvas id="sourceContainer" width="250" height="300" >            
             <mx:Tree id="myTree" width="100%" height="100%" labelField="@label"
            showRoot="false" dataProvider="{treeData}" />
        </mx:Canvas>
        
    </mx:Panel>
    
    
</mx:Application>