SWC 2 SWF

by zahir
なんとなく
♥0 | Line 186 | Modified 2011-06-10 00:39:58 | MIT License
play

ActionScript3 source code

/**
 * Copyright zahir ( http://wonderfl.net/user/zahir )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3quH
 */

package {
    import flash.net.FileReference;
    import flash.events.MouseEvent;
    import flash.utils.ByteArray;
    import flash.text.TextField;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        private var load:SWFLoadButton;
        private var save:ButtonBase;
        private var saveFlag:Boolean = false;
        private var t:TextField;
        
        private var bytes:ByteArray;
        private var fr:FileReference;
        private var fileName:String;
        
        public function FlashTest() {
            // write as3 code here..
            addChild( load = new SWFLoadButton() );
            addChild( save = new ButtonBase( "save" ) );
            
            load.x = load.y = save.y = 8;
            save.x = load.x + load.width + 8;
            
            addChild( t = new TextField() );
            t.autoSize = "left";
            t.x = 8;
            t.y = load.y + load.height + 8;
            
            bytes = new ByteArray();
            
            load.addEventListener( SWFLoadEvent.COMPLETE, complete );
            save.addEventListener( MouseEvent.CLICK, onSave );
        }
        
        private function complete( event:SWFLoadEvent ):void
        {
            fileName = event.name;
            var ba:ByteArray = event.bytes;
            var check:String = ba.readUTFBytes(1);
            ba.position = 0;
            if( check == "C" )
            {
                saveFlag = true;
                t.appendText( "format " + ba.readUTFBytes(3) + "\n");
                
                var ver:int = ba.readByte();
                t.appendText( "ver." + ver + "\n");
                
                var len:uint = ba.readUnsignedInt();
                t.appendText( "length " + len + " byte\n" );
                
                var zip:ByteArray = new ByteArray();
                ba.readBytes( zip );
                zip.uncompress();
                zip.position = 0;
                
                bytes.length = 0;
                bytes.writeUTFBytes("FWS");
                bytes.writeByte( ver );
                bytes.writeUnsignedInt( len );
                bytes.writeBytes( zip );
            }else
            {
                saveFlag = false;
            }

        }
        
        private function onSave( event:MouseEvent ):void
        {
            if( !saveFlag ) return;
            fr = fr || new FileReference();
            fr.save( bytes, fileName + "(unzip).swf" );
        }


    }
}
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Graphics;
import flash.text.TextField;
import flash.display.Sprite;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.utils.IDataInput;
import flash.utils.ByteArray;
import flash.net.URLLoader;

class ButtonBase extends Sprite
{
    private var t:TextField;
    private var w:int;
    private var h:int;
    private var g:Graphics;
    private var overFlg:Boolean = false;
    
    public function ButtonBase( txt:String )
    {
        addChild( t = new TextField() );
        t.autoSize = "left";
        t.mouseEnabled = false;
        buttonMode = true;
        
        text = txt;
        g = graphics;
        draw( 0xFFFFFF, 0x666666 );
        
        addEventListener( MouseEvent.MOUSE_OVER, onOver );
        addEventListener( MouseEvent.MOUSE_DOWN, onDown );
    }
    
    private function onOver( mouseEvent:MouseEvent ):void
    {
        stage.addEventListener( MouseEvent.MOUSE_OUT, onOut );
        overFlg = true;
        draw( 0xCCCCCC, 0x666666 );
    }
    
    private function onOut( mouseEvent:MouseEvent ):void
    {
        stage.removeEventListener( MouseEvent.MOUSE_OUT, onOut );
        overFlg = false;
        draw( 0xFFFFFF, 0x666666 );
    }
    
    private function onDown( mouseEvent:MouseEvent ):void
    {
        stage.addEventListener( MouseEvent.MOUSE_UP, onUp );
        draw( 0xFFFFFF, 0x0099FF );
    }
    
    private function onUp( mouseEvent:MouseEvent ):void
    {
        stage.removeEventListener( MouseEvent.MOUSE_UP, onUp );
        
        if( overFlg )
        {
            draw( 0xCCCCCC, 0x666666 );
        }else{
            draw( 0xFFFFFF, 0x666666 );
        }
    }
    
    public function get text():String
    {
        return t.text;
    }
    public function set text( txt:String ):void
    {
        t.text = txt;
        w = t.width + 16;
        h = t.height + 5;
        t.x = 8;
        t.y = 2.5;
    }
    
    public function draw( color:uint, stroke:uint):void
    {
        g.clear();
        g.lineStyle( 1, stroke);
        g.beginFill( color );
        g.drawRect( 0,0, w,h );
        g.endFill();
    }
}

class SWFLoadButton extends ButtonBase
{
    private const FILTER:Array = [ new FileFilter("load swf", "*.swf;*.swc") ];
    private var fr:FileReference;
    private var l:URLLoader;
    public function SWFLoadButton()
    {
        super("load swf || swc");
        fr = new FileReference();
        l = new URLLoader();
        addEventListener(MouseEvent.CLICK, onClick);
    }
    private function onClick( event:MouseEvent ):void
    {
        fr.addEventListener(Event.SELECT, onSelect);
        fr.browse( FILTER );
    }
    private function onSelect( event:Event ):void
    {
        fr.removeEventListener(Event.SELECT, onSelect);
        fr.addEventListener(Event.COMPLETE, onLoaded );
        fr.load();
    }
    
    private function onLoaded( event:Event ):void
    {
        fr.removeEventListener(Event.COMPLETE, onLoaded );
        this.dispatchEvent( new SWFLoadEvent(SWFLoadEvent.COMPLETE, fr.data, fr.name) );
    }
}

class SWFLoadEvent extends Event
{
    public static const COMPLETE:String = "swf_load_complete";
    protected var _bytes:ByteArray;
    public function get bytes():ByteArray
    {
        return _bytes;
    }
    public var name:String = "";

    public function SWFLoadEvent( type:String, inputData:IDataInput, name:String, bubbles:Boolean = false, cancelable:Boolean = false )
    {
        super( type, bubbles, cancelable );
        _bytes = new ByteArray();
        inputData.readBytes( _bytes );
        this.name = name;
    }

}

Forked