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

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.

-->

<!--- The default skin class for the Spark FormItem component.  

@see spark.components.FormItem

@langversion 3.0
@playerversion Flash 10
@playerversion AIR 1.5
@productversion Flex 4.5
-->
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.apache.org/royale/spark" 
        alpha.disabledStates=".5" creationComplete="init()">  
    
    <!-- host component -->
    <fx:Metadata>
        <![CDATA[ 
        /** 
        * @copy spark.skins.spark.ApplicationSkin#hostComponent
        */
        [HostComponent("spark.components.FormItem")]
        ]]>
    </fx:Metadata>
    
    <fx:Script>
        <![CDATA[			
			public function init():void {
				requiredToolTip = resourceManager.getString("components","formItemRequired");
			}
			
			private var _requiredToolTip:String;
			/**
			 *  The tooltip of the label showing when the component is required but nothing has been entered.
			 *  Subclasses can set or override this property to customize the selected label.
			 *  
			 *  @langversion 3.0
			 *  @playerversion AIR 3
			 *  @productversion Flex 4.11
			 */
			[Bindable]
			protected function get requiredToolTip():String 
			{
				return _requiredToolTip;
			}
			
			protected function set requiredToolTip(value:String):void
			{
				_requiredToolTip = value;
			}
			
            /**
             *  @private
             */
            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
            {
                // Push backgroundColor and backgroundAlpha directly.
                // Handle undefined backgroundColor by hiding the background object.
                if (isNaN(getStyle("backgroundColor")))
                {
                    background.visible = false;
                }
                else
                {
                    background.visible = true;
                    bgFill.color = getStyle("backgroundColor");
                    bgFill.alpha = getStyle("backgroundAlpha");
                }
                
                var indicatorSource:Object;
                if (currentState == "error" || currentState == "requiredAndError")
                    indicatorSource = getStyle("errorIndicatorSource");
                else if (currentState == "required" || "requiredAndDisabled")
                    indicatorSource = getStyle("requiredIndicatorSource");
                
                if (indicatorSource && indicatorDisplay)
                {
                    indicatorDisplay.source = indicatorSource;
                }
                
                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }
            
            /**
             *  @private
             */
            override public function setCurrentState(stateName:String, playTransition:Boolean=true):void
            {
                super.setCurrentState(stateName, playTransition);
                invalidateDisplayList();
            }
        ]]>        
    </fx:Script>
    
    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" stateGroups="disabledStates"/> 
        <s:State name="error" stateGroups="errorStates"/>   
        <s:State name="required" stateGroups="requiredStates"/> 
        <s:State name="requiredAndDisabled" stateGroups="requiredStates, disabledStates"/>
        <s:State name="requiredAndError" stateGroups="requiredStates, errorStates"/>    
    </s:states>
    
    <s:layout>
        <s:FormItemLayout>
            <s:constraintColumns>
                <!--- The column containing the sequence label. -->
                <s:ConstraintColumn id="sequenceCol" />
                <!--- The column containing the FormItem's label. -->
                <s:ConstraintColumn id="labelCol" />
                <!--- The column containing the FormItem's content. -->
                <s:ConstraintColumn id="contentCol" width="100%"/>
                <!--- The column containing the FormItem's help content. -->
                <s:ConstraintColumn id="helpCol" maxWidth="200"/>
            </s:constraintColumns>         
            <s:constraintRows>
                <!--- @private -->
                <s:ConstraintRow id="row1" baseline="maxAscent:10" height="100%"/>
            </s:constraintRows>  
        </s:FormItemLayout>
    </s:layout>
            
    <!--- Defines the appearance of the FormItem's background. -->
    <s:Rect id="background" left="0" right="0" top="0" bottom="0">
        <s:fill>
            <!--- @private -->
            <s:SolidColor id="bgFill" color="#FFFFFF"/>
        </s:fill>
    </s:Rect>
    
    <!--- @copy spark.components.FormItem#sequenceLabelDisplay -->
    <s:Label id="sequenceLabelDisplay" 
             fontWeight="bold"
             left="sequenceCol:10" right="sequenceCol:5"
             bottom="row1:10" baseline="row1:0"/>
    <!--- @copy spark.components.FormItem#labelDisplay -->
    <s:Label id="labelDisplay"
             fontWeight="bold"
             left="labelCol:0" right="labelCol:5" 
             bottom="row1:10" baseline="row1:0"/>  
    <!--- @copy spark.components.SkinnableContainer#contentGroup -->
    <!-- Don't show the error tip on the content elements -->
    <s:Group id="contentGroup" showErrorTip="false" showErrorSkin="true"
             left="contentCol:0" right="contentCol:1" 
             baseline="row1:0" bottom="row1:10">
        <s:layout>
            <s:VerticalLayout/>
        </s:layout>
    </s:Group>
    <!-- Don't include the indicator in layout since we position it ourselves -->
    <s:Group x="{contentGroup.x + contentGroup.contentWidth + 4}" y="{contentGroup.y}"
             height="{Math.max(indicatorDisplay.height, contentGroup.contentHeight)}" includeInLayout="false">
        <!--- @private -->
        <s:Image id="indicatorDisplay" verticalCenter="0"
                       toolTip="{requiredToolTip}" toolTip.errorStates=""
                       includeIn="requiredStates,errorStates"/>
    </s:Group>
        
    <!--- @copy spark.components.FormItem#helpContentGroup -->
    <s:Group id="helpContentGroup" excludeFrom="errorStates"
             fontStyle="italic" fontWeight="normal" color="0x666666"
             left="helpCol:27" right="helpCol:10"
             bottom="row1:10" baseline="row1:0"/>
    <!--- @copy spark.components.FormItem#errorTextDisplay -->
    <s:RichText id="errorTextDisplay" includeIn="errorStates"
                fontStyle="italic" fontWeight="normal" color="0xFE0000"
                left="helpCol:27" right="helpCol:10"
                bottom="row1:10" baseline="row1:0" 
                maxDisplayedLines="-1"/>    
 </s:Skin>