<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical" 
    horizontalAlign="center" verticalAlign="middle"
    applicationComplete="onAppComplete();"
    invoke="onAppInvoke(event);" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import mx.binding.utils.ChangeWatcher;
            import mx.binding.utils.BindingUtils;
            import mx.events.FlexEvent;
            
            private var _invokedFile:File;
            private var _fileWindow:FileDisplayWindow;
            private var _filesBinding:ChangeWatcher;
            
            private function onAppComplete():void
            {
                _filesBinding = BindingUtils.bindSetter( invalidateFiles, this, 'invokedFile', true );
            }
            
            private function onAppInvoke( evt:InvokeEvent ):void
            {
                var items:Array = evt.arguments;
                if( items.length > 0 )
                {
                    invokedFile = new File( evt.arguments[0] );
                }    
            }
            
            private function openFileWindow():void
            {
                _fileWindow = new FileDisplayWindow();
                _fileWindow.addEventListener( FlexEvent.CREATION_COMPLETE, applyFileToWindow );
                _fileWindow.open();
            }
            
            private function applyFileToWindow( evt:FlexEvent = null ):void
            {
                _fileWindow.file = _invokedFile;
            }
            
            private function invalidateFiles( arg:* = null ):void
            {
                if( _invokedFile == null ) return;
                if( _fileWindow == null || _fileWindow.closed ) openFileWindow();
                else applyFileToWindow();
            }
            
            [Bindable]
            public function get invokedFile():File
            {
                return _invokedFile;
            }
            public function set invokedFile( arr:File ):void
            {
                _invokedFile = arr;
            }
            
        ]]>
    </mx:Script>
    <mx:Label text="Welcome" />
</mx:WindowedApplication>