<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
        xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:text_effect="net.sakri.text_effect.*"
        layout="vertical"
        creationComplete="init();"
        >
    <!--
        width="1300"
        height="700"
    
        ********IMPORTANT*************
        The source code you are looking at was written for multi-mania.be event,
        just a few days prior to my session there... I don't have the time or 
        energy to clean up this code, so instead, I'm opting for the cheapskate
        solution of a source code disclaimer ;) This code is crap and I know it,
        but consider it "proof of concept" code....
        
        In any case, I Hope you find this useful!  Sakri
        ********/IMPORTANT************* 
    
    -->        
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            
            [Bindable]
            public var intro_panel_text:String="Hi There!</br></br>Welcome to this AWESOME tool!  When I say 'AWESOME', I mean TOTALLY SWEET!!11</br></br>Wether you wish to monetize on innocent communities or steal money from clueless investors, THIS is THE tool to create your Web2.0 startup LOGO!!! (in Flex that is), I fully realize this app *could* save the damn logo as a .jpg or a .png, however, this is more or less a joke, and meant for demonstrative purposes, so, feel free to grab the sourcecode (right click 'view source') and build that functionality yourself.";
            
            public function init():void{
                var tf:TextFormat=logo.getTextFormat();
                var cur_font:String=tf.font;
                for(var i:uint=0;i<fonts_list.dataProvider.length;i++){
                    if(fonts_list.dataProvider[i].fontName==cur_font){
                        fonts_list.selectedIndex=i;
                        break;
                    }
                }
                
                bold_text_cb.selected=tf.bold;
                italic_text_cb.selected=tf.italic;
                updateTextStyles();
            }
            
            //The first time this is called, logo.getStyle returns no values, so the logo is rendered 4 times?! after that it's accurate.
            private function updateLogoControls():void{
                if(logo.text!=logo_title.text)logo.text=logo_title.text;
                if(logo.getStyle("reflectionYOffset")!=reflection_y_offset_ns.value){
                    logo.setStyle("reflectionYOffset",reflection_y_offset_ns.value);
                }
                if(logo.getStyle("wavePeaks")!=wave_peaks_ns.value){
                    logo.setStyle("wavePeaks",wave_peaks_ns.value);
                }
                if(logo.getStyle("minWavePeak")!=wave_min_peak_ns.value){
                    logo.setStyle("minWavePeak",wave_min_peak_ns.value);
                }
                if(logo.getStyle("waveCenter")!=wave_center_ns.value){
                    logo.setStyle("waveCenter",wave_center_ns.value);
                }
                if(logo.getStyle("maxWavePeak")!=wave_max_peak_ns.value){
                    logo.setStyle("maxWavePeak",wave_max_peak_ns.value);
                }

            }
            
            private function updateTextStyles():void{
                if(logo.getStyle("useGradient")!=use_gradient_fill.selectedValue){
                    logo.setStyle("useGradient",use_gradient_fill.selectedValue);
                }
                if(logo.getStyle("fillColor")!=logo_color.selectedColor){
                    logo.setStyle("fillColor",logo_color.selectedColor);
                }
                var colors:Array=logo.getStyle("gradientColors");
                var new_colors:Array=new Array(gradient_top_color.selectedColor,gradient_bottom_color.selectedColor);
                var gc_change:Boolean=false;
                if(colors==null){
                    gc_change=true;
                }else{
                    if(colors[0]!=new_colors[1])gc_change=true;
                    if(colors[0]!=new_colors[1])gc_change=true;    
                }
                if(gc_change)logo.setStyle("gradientColors",new_colors);
                //mx.controls.Alert.show(use_gradient_fill.selectedValue+"");
                
                var tf:TextFormat=logo.getTextFormat();
                var update_tf:Boolean=false;
                if(use_embedded_font.selected){
                    if(tf.font!=embedded_fonts_list.selectedLabel){
                        tf.font=embedded_fonts_list.selectedLabel;
                        update_tf=true;
                    }
                }else{
                    if(tf.font!=fonts_list.selectedLabel){
                        tf.font=fonts_list.selectedLabel;
                        update_tf=true;
                    }                
                }
                if(tf.bold!=this.bold_text_cb.selected){
                    tf.bold=this.bold_text_cb.selected;
                    update_tf=true;
                }
                if(tf.italic!=this.italic_text_cb.selected){
                    tf.italic=italic_text_cb.selected;
                    update_tf=true;
                }
                if(update_tf)logo.setTextFormat(tf,use_embedded_font.selected);
            }
            
            [Embed(systemFont="Garamond", fontName="garamond", fontWeight="bold", mimeType="application/x-font")]
            private var _garamondClass:Class;
            
            [Embed(systemFont="Arial", fontName="arial", fontWeight="bold",  mimeType="application/x-font")]
            private var _arialClass:Class;
            
        ]]>
    </mx:Script>
            
    <mx:Style>
    
Application {
   backgroundColor: #ffffff;
   backgroundGradientColors: #ffffff, #7fbce8;
   themeColor: #7fbce8;
}

.introText{
    paddingLeft:10px;
    paddingRight:10px;
    paddingTop:10px;
    fontSize:14px;
    fontWeight:bold;
    color:#666666;
}
    </mx:Style>
    
    <mx:VBox width="100%" height="100%" horizontalGap="10">
        <text_effect:Web2pointOLogo id="logo" width="100%" text="Web2.OMG WTF ROTFLOL!!11" horizontalCenter="0"
                                     reflectionYOffset="-40" fillColor="0xFF0084" 
                                    />
                                    
                                    
        <mx:HBox id="explorer_interface" horizontalGap="10" height="100%" width="100%">
            <mx:Panel title="The UberDopeTastic Web2.0 logo machine" width="100%" height="100%">
                <mx:TextArea id="intro_text" width="100%" height="100%" borderThickness="0" styleName="introText" htmlText="{intro_panel_text}" />
            </mx:Panel>
            <mx:Panel title="Logo Controls" width="100%" height="100%" layout="vertical">
                <mx:Form>
                    <mx:FormItem label="enter web2.0 logo title:">
                        <mx:TextInput id="logo_title" text="Web2.OMG WTF ROTFLOL!!11" />
                    </mx:FormItem>
                    <mx:FormItem label="change reflection y offset:">
                        <mx:NumericStepper id="reflection_y_offset_ns" minimum="-100" maximum="100" 
                                               stepSize="1" value="-40" width="65" />
                    </mx:FormItem>
                    <mx:FormItem label="wave peaks:">
                        <mx:NumericStepper id="wave_peaks_ns" minimum="1" maximum="15" 
                                               stepSize="1" value="1" width="65" />
                    </mx:FormItem>
                    <mx:FormItem label="wave min peak:">
                        <mx:NumericStepper id="wave_min_peak_ns" minimum="0" maximum="{wave_center_ns.value}" 
                                               stepSize=".05" value="0" width="65" />
                    </mx:FormItem>
                    <mx:FormItem label="wave center:">
                        <mx:NumericStepper id="wave_center_ns" minimum="{wave_min_peak_ns.value}" maximum="{wave_max_peak_ns.value}" 
                                               stepSize=".05" value=".5" width="65" />
                    </mx:FormItem>
                    <mx:FormItem label="wave max peak:">
                        <mx:NumericStepper id="wave_max_peak_ns" minimum="{wave_center_ns.value}" maximum="1" 
                                               stepSize=".05" value="1" width="65" />
                    </mx:FormItem>
                    <mx:Button click="updateLogoControls();" label="update Sweet Web2.0 Logo!" />
                </mx:Form>
            </mx:Panel>
            <mx:Panel title="Text Format Controls" width="100%" height="100%" layout="vertical">
                <mx:Form>
                    <mx:FormItem label="choose font color:">
                        <mx:HBox>
                            <mx:ColorPicker id="logo_color" selectedColor="0x055699" />
                        </mx:HBox>
                    </mx:FormItem>
                    <mx:FormItem label="use gradient fill:">
                        <mx:RadioButtonGroup id="use_gradient_fill" />
                        <mx:HBox>
                            <mx:RadioButton groupName="use_gradient_fill" value="false" label="no"  />
                            <mx:RadioButton groupName="use_gradient_fill" value="true" label="yes"  selected="true" />                            
                        </mx:HBox>
                    </mx:FormItem>
                    <mx:FormItem label="choose gradient colors:">
                        <mx:HBox>
                            <mx:Label text="bottom:"/>
                            <mx:ColorPicker id="gradient_bottom_color" selectedColor="0x055699" />
                            <mx:Label text="top:"/>
                            <mx:ColorPicker id="gradient_top_color" selectedColor="0x7FBCE8" />                        
                        </mx:HBox>
                    </mx:FormItem>
                    <mx:FormItem label="bold:">
                        <mx:CheckBox id="bold_text_cb" />
                    </mx:FormItem>
                    <mx:FormItem label="italic:">
                        <mx:CheckBox id="italic_text_cb" />
                    </mx:FormItem>
                    <mx:HRule />
                    <mx:FormItem label="use embedded font:">
                        <mx:CheckBox id="use_embedded_font" />
                    </mx:FormItem>
                    <mx:FormItem label="choose font:">
                        <mx:ComboBox id="fonts_list" dataProvider="{flash.text.Font.enumerateFonts(true)}" labelField="fontName" />
                    </mx:FormItem>
                    <mx:FormItem label="choose Embedded font:">
                        <mx:ComboBox id="embedded_fonts_list" dataProvider="{flash.text.Font.enumerateFonts()}" labelField="fontName" />
                    </mx:FormItem>    
                    <mx:Button click="updateTextStyles();" label="update Sweet Web2.0 Logo!" />
                </mx:Form>
            </mx:Panel>
        </mx:HBox>
    </mx:VBox>
    
</mx:Application>