<?xml version="1.0" encoding="utf-8"?>
<!--

////////////////////////////////////////////////////////////////////////////////
//
//    Copyright 2014 Ardisia Labs LLC. All Rights Reserved.
//
//    This file is licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////

-->
<s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx"
          xmlns:containers="containers.*"
          xmlns:data="containers.data.*"
          xmlns:separators="ardisia.components.separators.*"
          frameRate="60"
          width="100%" height="100%"
          removedFromStage="removedFromStageHandler(event)">
    
    <!-- scripts -->
    <fx:Script>
        <![CDATA[
            import ardisia.filters.BlackWhiteOutlineFilter;
            import ardisia.filters.BloatFilter;
            import ardisia.filters.BrightnessFilter;
            import ardisia.filters.BrownFilter;
            import ardisia.filters.BubblegumFilter;
            import ardisia.filters.ContrastFilter;
            import ardisia.filters.CoolFilter;
            import ardisia.filters.EdgeDetectFilter;
            import ardisia.filters.EmbossFilter;
            import ardisia.filters.GrayscaleFilter;
            import ardisia.filters.HueFilter;
            import ardisia.filters.InvertFilter;
            import ardisia.filters.PinchFilter;
            import ardisia.filters.SaturationFilter;
            import ardisia.filters.SepiaFilter;
            import ardisia.filters.SharpenFilter;
            import ardisia.filters.SoftWarmFilter;
            import ardisia.filters.WarmFilter;
            
            //--------------------------------------
            //  variables
            //--------------------------------------
            
            protected var filter:*;
            
            //--------------------------------------
            //  methods
            //--------------------------------------
            
            public function creationComplete():void
            {
                
            }
            
            //--------------------------------------
            //  event handlers
            //--------------------------------------
            
            protected function strengthSelect_changeHandler(event:Event):void
            {
                if (filter.hasOwnProperty("strength"))
                    filter.strength = strengthSelect.value;
            }
            
            protected function radioGroupChangeHandler(event:Event):void
            {
                strengthFormItem.enabled = true;
                
                strengthSelect.value = 50;
                strengthSelect.minimum = 0; strengthSelect.maximum = 100;
                strengthSelect.snapInterval = 1;
                
                switch (event.currentTarget)
                {
                    case noFilterSelect:
                        strengthFormItem.enabled = false;
                        img.filters = null;
                        
                        break;
                    
                    case sharpenSelect:
                        filter = new SharpenFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case embossSelect:
                        filter = new EmbossFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case pinchSelect:
                        filter = new PinchFilter();
                        filter.mapBitmapSource = img.bitmapData;
                        img.filters = [filter];
                        
                        break;
                    
                    case bloatSelect:
                        filter = new BloatFilter();
                        filter.mapBitmapSource = img.bitmapData;
                        img.filters = [filter];
                        
                        break;
                    
                    case bwOutlineSelect:
                        filter = new BlackWhiteOutlineFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case grayscaleSelect:
                        filter = new GrayscaleFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case edgeDetectSelect:
                        filter = new EdgeDetectFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case brightnessSelect:
                        filter = new BrightnessFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case hueSelect:
                        filter = new HueFilter();
                        strengthSelect.value = 0;
                        strengthSelect.minimum = -180; strengthSelect.maximum = 180;
                        strengthSelect.snapInterval = 1;
                        filter.strength = strengthSelect.value;
                        img.filters = [filter];
                        
                        break;
                    
                    case invertSelect:
                        filter = new InvertFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case saturationSelect:
                        filter = new SaturationFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case contrastSelect:
                        filter = new ContrastFilter();
                        img.filters = [filter];
                        
                        break;
                    
                    case sepiaSelect:
                        filter = new SepiaFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case brownishSelect:
                        filter = new BrownFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case warmSelect:
                        filter = new WarmFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case softWarmSelect:
                        filter = new SoftWarmFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case bubblegumSelect:
                        filter = new BubblegumFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                    case coolSelect:
                        filter = new CoolFilter();
                        strengthFormItem.enabled = false;
                        img.filters = [filter];
                        
                        break;
                    
                }
            }
            
            protected function removedFromStageHandler(event:Event):void
            {
                
            }
            
        ]]>
    </fx:Script>
    
    <!-- declarations -->
    <fx:Declarations>
        
    </fx:Declarations>
    
    <!-- states -->
    <s:states>
        <s:State name="stockholm" />
        <s:State name="london" />
        <s:State name="spark" />
    </s:states>
    
    <!-- application -->
    <containers:DemoApplicationWrapper id="demoAppWrapper" 
                                       width="100%" height="100%"
                                       westRegionTitle="Filters Description"
                                       description="Additional Spark filters.  All of them extend BaseFilter and can be applied generally to DisplayObjects.&#13;&#13;Some filters have a 'strength' property that can be adjusted via the slider below.  Other filters are simply applied or not.&#13;&#13;If the slider is disabled, the selected filter can not be adjusted via a 'strength' property."
                                       currentState.stockholm="stockholm" currentState.london="london" currentState.spark="spark">
        
        <containers:expandingContainerContent>
            
            <!--- expanding container #1 -->
            <data:ExpandingContainerData>
                <data:label>API</data:label>
                <data:content>
                    <s:FormHeading label="Filter Strength"/>
                    <s:FormItem id="strengthFormItem" 
                                label="Strength:"
                                enabled="false" >
                        <s:HSlider id="strengthSelect" 
                                   width="100"
                                   change="strengthSelect_changeHandler(event)"/>
                    </s:FormItem>
                    
                    <separators:HSeparator width="100%" />
                    <s:FormHeading label="Applied Filter"/>
                    <s:FormItem label="No Filter:">
                        <s:RadioButton id="noFilterSelect"
                                       selected="true"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Sharpen:">
                        <s:RadioButton id="sharpenSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="B and W Outline:">
                        <s:RadioButton id="bwOutlineSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Pinch:">
                        <s:RadioButton id="pinchSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Bloat:">
                        <s:RadioButton id="bloatSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Edge Detect:">
                        <s:RadioButton id="edgeDetectSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Brightness:">
                        <s:RadioButton id="brightnessSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Hue:">
                        <s:RadioButton id="hueSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Saturation:">
                        <s:RadioButton id="saturationSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Contrast:">
                        <s:RadioButton id="contrastSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Emboss:">
                        <s:RadioButton id="embossSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Grayscale:">
                        <s:RadioButton id="grayscaleSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Invert:">
                        <s:RadioButton id="invertSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Sepia:">
                        <s:RadioButton id="sepiaSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Brown:">
                        <s:RadioButton id="brownishSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Warm:">
                        <s:RadioButton id="warmSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Soft Warm:">
                        <s:RadioButton id="softWarmSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Bubblegum:">
                        <s:RadioButton id="bubblegumSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    <s:FormItem label="Cool:">
                        <s:RadioButton id="coolSelect"
                                       groupName="filterGroup"
                                       change="radioGroupChangeHandler(event)"/>
                    </s:FormItem>
                    
                </data:content>
            </data:ExpandingContainerData>
            
        </containers:expandingContainerContent>
        
        <containers:centerContent>
            
            <!--- example #1 -->
            <data:PrimaryContentData>
                <data:tabLabel>Example</data:tabLabel>
                <data:exampleDescription>Laika as a puppy.</data:exampleDescription>
                <data:primaryContent>
                    <s:Image id="img" 
                             horizontalCenter="0" verticalCenter="0"
                             source="@Embed(source='images/crazy-eyes.jpg')"/>
                </data:primaryContent>
            </data:PrimaryContentData>
            
        </containers:centerContent>
        
    </containers:DemoApplicationWrapper>
    
</s:Module>