<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:components="com.san.components.*"
    xmlns:degrafa="http://www.degrafa.com/2007"
    layout="absolute" 
    addedToStage="addedToStageHandler()"
    preinitialize="preinit()"
    preloader="com.san.preloader.PreloadProgressBar" viewSourceURL="srcview/index.html">
    
    
    <mx:Style source="theme/styles.css" />
    
    
    
    <mx:Script>
        <![CDATA[
            import mx.automation.codec.KeyCodePropertyCodec;
            import com.san.forms.ErrorForm;
            import com.mh.globals.GlobalsManager;
            
            private var _globalsLoaded:Boolean = false;
            private var _readyToInitialize:Boolean = true;
            
            
            private function preinit():void
            {
                GlobalsManager.globals.loadGlobals( "globals.xml", loadGlobalsCallback );
            }
            
            
            private function loadGlobalsCallback( success:Boolean, message:String ):void
            {
                trace( "globals loaded", success, message, _readyToInitialize );
                
                if( success )
                {
                    _globalsLoaded = true;
                    if( _readyToInitialize )
                    {
                        super.initialized = true;
                    }
                }
                else
                {
                    super.initialized = true;
                    ErrorForm.fatal( message );
                    
                }
            }            
            

            public override function set initialized(value:Boolean):void
            {
                trace( "set initialized", value, _globalsLoaded  );
                
                   if( _globalsLoaded )
                    initialized = value;
                else if( !value )
                    super.initialized = value;
                else
                    _readyToInitialize = true;
            }
            
            
            private function addedToStageHandler():void
            {
                stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownEventHandler );
            }


            private function keyDownEventHandler(event:KeyboardEvent):void
            {
                super.keyDownHandler(event);
                
                switch( event.keyCode )
                {
                    case Keyboard.DELETE:
                        page.remove();
                        break;
                        
                    case Keyboard.RIGHT:
                        if( page.selectedComponent )
                            page.selectedComponent.x++;
                        break;
                    case Keyboard.LEFT:
                        if( page.selectedComponent )
                            page.selectedComponent.x--;
                        break;
                    case Keyboard.UP:
                        if( page.selectedComponent )
                            page.selectedComponent.y--;
                        break;
                    case Keyboard.DOWN:
                        if( page.selectedComponent )
                            page.selectedComponent.y++;
                        break;
                }
                
                switch( event.charCode )
                {
                    case 67: // C
                    case 99: // c
                        if( event.ctrlKey )
                            page.copy();
                        break;
                        
                    case 88: // X
                    case 120: // x
                        if( event.ctrlKey )
                            page.cut();
                        break;
                        
                    case 86: // V
                    case 118: // v
                        if( event.ctrlKey )
                            page.paste();
                        break;
                }
                
                trace( event.charCode );
                
            }
        ]]>
    </mx:Script>
    
    
    
    
    
    

    <!--
     * Page holder
     -->
    <mx:Canvas top="110" bottom="0" right="0" left="200" >    
    
        
        <mx:Canvas id="pageWrapper" width="500" height="333" horizontalCenter="0" verticalCenter="0" >
            <components:PageBackground id="page_background" page="{page}" width="500" height="333" />
                
            <components:Page id="page" width="500" height="333" />
            
            <mx:Image horizontalCenter="-150" verticalCenter="150" source="@Embed('theme/logo_small.png')"/>
        </mx:Canvas>
        
    
    </mx:Canvas>
    
    


    <!--
     * Library
     -->
    <components:Library top="80" bottom="0" left="0"/>



    
    
    <!--
     * Toolbar
     -->
    <components:Toolbar target="{page}" wrapper="{pageWrapper}" left="200" right="0" top="80" />


    <components:Properties target="{page}" left="200" right="0" bottom="0" height="120"/>
    
    
    
    
    <!--
     * Branding
     -->
    <mx:Canvas id="branding" height="82" left="0" right="0" top="0">
        <degrafa:Surface>
            <degrafa:GeometryGroup>
                <degrafa:fills>
                    <degrafa:LinearGradientFill id="bgFill" angle="90" >
                        <degrafa:GradientStop color="#E5E5E5" ratio="0" />
                        <degrafa:GradientStop color="#D0D0D0" ratio="0.3" />
                        <degrafa:GradientStop color="#D0D0D0" ratio="1" />
                    </degrafa:LinearGradientFill>
                </degrafa:fills>
                
                
                <degrafa:RoundedRectangle width="{branding.width}" height="{branding.height}" cornerRadius="10" fill="{bgFill}" />
                
                <degrafa:filters>
                    <mx:BevelFilter distance="2" />
                </degrafa:filters>
            </degrafa:GeometryGroup>
        </degrafa:Surface>
        
        <mx:Image source="@Embed('theme/logo.png')" />
        
    </mx:Canvas>
    
</mx:Application>