package {
    import flash.desktop.*;
    import flash.display.*;
    import flash.events.*;
    import flash.filesystem.*;
    import flash.text.*;

    [SWF(width="240", height="240", backgroundColor="#FFFFFF", frameRate="30")]

    public class DragDropTextFile extends Sprite
    {
        private var base:Sprite;            ///< ベース    
        private var textField:TextField;    ///< テキストフィールド

        static public const
            WND_WIDTH:uint = 240,       ///< ウインドウの幅
            WND_HEIGHT:uint = 240;      ///< ウインドウの高さ

        public function DragDropTextFile()
        {
            //ベースの生成
            base = new Sprite();
            base.graphics.beginFill(0xffffff);
            base.graphics.drawRect(0,0,WND_WIDTH,WND_HEIGHT);
            base.graphics.endFill();
            addChild(base);

            //テキストフィールドの生成
            textField = new TextField();
            textField.text = "テキストファイルをこのウインドウにドラッグしてみて下さい。";
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.wordWrap = true;
            textField.width = WND_WIDTH;
            textField.height = WND_HEIGHT;
            base.addChild(textField);

            //イベントの追加
            base.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragEnter);
            base.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDragDrop);
        }

        //ドラッグインイベントの処理
        public function onDragEnter(evt:NativeDragEvent):void {
            //クリップボードの取得
            var cb:Clipboard = evt.clipboard;

            //ドラッグ可能かどうかのチェック
            if (cb.hasFormat(ClipboardFormats.URL_FORMAT)){
                //ドロップの許可
                NativeDragManager.acceptDragDrop(base);
            }
        }

        //ドロップイベントの処理
        public function onDragDrop(evt:NativeDragEvent):void {

            var result:String = "onDragDrop\n\n";
            //クリップボードの取得
            var cb:Clipboard = evt.clipboard;

            //URLのドロップ
            if (cb.hasFormat(ClipboardFormats.URL_FORMAT)) {
                var url:String = String(cb.getData(ClipboardFormats.URL_FORMAT));
                result += "URL:"+url+"\n\n"+"<<- テキストファイルの内容 ->>\n\n";

                // ファイルから読み込み
                var file:File = new File(url);
                var fsr:FileStream = new FileStream();
                fsr.open(file,FileMode.READ);
                result += fsr.readMultiByte(file.size,"utf-8");
                fsr.close();
            }

            textField.text = result;
        }
    }
}