tmp - describeType stuff

by yonatan
♥0 | Line 61 | Modified 2009-05-05 06:49:48 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
    <mx:Script>
        <![CDATA[
    import flash.utils.*;
    import mx.containers.*;
    import mx.controls.*;
    import mx.core.*;

    private function fullScreen():void{
        stage.displayState = ( stage.displayState == "normal" ? "fullScreen" : "normal" );
    }

    private function init():void {
        addChild( explorer( this ) );
    }
    
    private function defaultObjectView( obj:Object ):UIComponent {
        var ret:HBox = new HBox;
        var btn:Button = new Button();
        var label:Label = new Label;
        
        label.percentWidth = ret.percentWidth = 100;
        btn.label = "Explore";
        label.text = String(obj);
        ret.addChild( btn );
        ret.addChild( label );
        return ret;
    }

    private function explorer( obj:Object ):UIComponent {
        var ret:Panel = new Panel;
        var desc:XML = describeType( obj );
        var acc:Accordion = new Accordion;
        acc.percentWidth = 100;
        var cvs:UIComponent;
        
        var accContent:Object = new Object;
        for each( var el:XML in desc.* ) {
            if( !accContent[el.localName()] ) {
                accContent[el.localName()] = [];
            }
            accContent[el.localName()].push( el );
        }
        
        for( var tab:String in accContent ) {
            cvs = new VBox;
            cvs.percentWidth = 100;
            //cvs.label = tab;
            var l:Label;
            accContent[tab].forEach( function( item:Object, ...rest ):void {
                if( tab=="variable" ) {
                    cvs.addChild( defaultObjectView( obj[String(item.@name)] ) );
                } 
                l = new Label;
                l.text = item.toXMLString();
                cvs.addChild( l );
            } );
            acc.addChild( cvs );
        }

        ret.addChild( acc );
        //ret.percentHeight = ret.percentWidth = 100;

        ret.title = String(desc.@name);
        return ret;
    }
    
        ]]>
    </mx:Script>

    <mx:Button right="20" label="fullscreen" 
      click="fullScreen()" />

</mx:Application>