<?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 CheckBox 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.controls.Alert;         
         
           // This event handler adds and deletes items from the shopping cart.
           private function modifyCart():void 
           {
                cartItems.text = "";
	    	
    	    	if(milkCB.selected == true) {	    	  
    	    	    cartItems.text += "milk" + '\n' ;
	    	    }
	   	
	   	        if(eggsCB.selected == true) {
    	    	    cartItems.text += "eggs" + '\n';
	    	    }
	    	
	    	    if(breadCB.selected == true) { 
    	    	    cartItems.text +="bread" + '\n';
	    	    }
      	    }
      	   
           // This event handler opens the Alert control.
	       private function sendMessage():void 
	       {
                if(couponCB.selected == true) {
		          Alert.show('You will receive coupons.');
		        }
		        else {
		            Alert.show('You will not receive any coupons.');
		        }
	       }    
        ]]>
    </fx:Script>

    <mx:Panel title="CheckBox Control Example" layout="horizontal"
				paddingBottom="10" paddingTop="10" paddingLeft="10" paddingRight="10"
				height="100%" width="100%">

        <mx:VBox>
            <mx:CheckBox id="milkCB" label="milk" click="modifyCart()"/>
            <mx:CheckBox id="eggsCB" label="eggs" click="modifyCart()"/>
            <mx:CheckBox id="breadCB" label="bread" click="modifyCart()"/>
        </mx:VBox>

        <mx:VBox>
            <mx:Label text="Items in my cart "/>
            <mx:TextArea id="cartItems" width="300" height="50" verticalScrollPolicy="off"/>
            <!-- Event handler sendMessages() is used to handle event click -->
            <mx:CheckBox id="couponCB" label="Send me coupons for items in my cart"
                click="sendMessage()" selected="true"/>
        </mx:VBox>
    </mx:Panel>
</mx:Module>
