<?xml version="1.0"?>
<!--
  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.
  -->

<!-- Simple example to demonstrate the PlotChart control. -->
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
				paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
				height="100%" width="100%">

     <fx:Script>
        <![CDATA[
        import mx.collections.ArrayCollection;

        [Bindable]
        private var expensesAC:ArrayCollection = new ArrayCollection( [
            { Month: "Jan", Profit: 2000, Expenses: 1500, Amount: 450 },
            { Month: "Feb", Profit: 1000, Expenses: 200, Amount: 600 },
            { Month: "Mar", Profit: 1500, Expenses: 500, Amount: 300 } ]);
        ]]>
    </fx:Script>

	<fx:Declarations>
	    <!-- Define custom colors for use as plot point fills. -->
	    <mx:SolidColor id="sc1" alpha=".3"/>
	    <mx:SolidColor id="sc2" color="red" alpha=".3"/>
	    <mx:SolidColor id="sc3" color="green" alpha=".3"/>
	
	    <!-- Define custom Strokes. -->
	    <mx:SolidColorStroke id="s1" weight="1"/>
	    <mx:SolidColorStroke id="s2" color="red" weight="1"/>
	    <mx:SolidColorStroke id="s3" color="green" weight="1"/>
	</fx:Declarations>

    <mx:Panel title="PlotChart Control Example"
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">
        <mx:PlotChart id="plot" 
            height="100%" 
            width="100%"
            paddingLeft="5" 
            paddingRight="5" 
            showDataTips="true" 
            dataProvider="{expensesAC}">                
            <mx:series>
                <mx:PlotSeries
                    xField="Expenses"
                    yField="Profit"
                    displayName="Plot 1"
                    fill="{sc1}"
                    stroke="{s1}" />
                <mx:PlotSeries
                    xField="Amount"
                    yField="Expenses"
                    displayName="Plot 2"
                    fill="{sc2}"
                    stroke="{s2}" />
                <mx:PlotSeries
                    xField="Profit"
                    yField="Amount"
                    displayName="Plot 3"
                    fill="{sc3}"
                    stroke="{s3}" />
            </mx:series>
        </mx:PlotChart>
        <mx:Legend dataProvider="{plot}"/>
    </mx:Panel>
</mx:Module>
