<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark"  
         xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" 
         xmlns:nestedtreedatagrid="com.flexicious.nestedtreedatagrid.*" 
         xmlns:controls="com.flexicious.controls.*"
         xmlns:functional="com.flexicious.example.view.functional.*"
         creationComplete="application1_creationCompleteHandler(event)" >
    
    <fx:Script>
        <![CDATA[
            import com.flexicious.controls.TriStateCheckBox;
            import com.flexicious.example.view.functional.MyDataGrid;
            import com.flexicious.example.view.support.customprint.MyCustomPager;
            import com.flexicious.nestedtreedatagrid.FlexDataGridColumn;
            import com.flexicious.nestedtreedatagrid.FlexDataGridColumnLevel;
            import com.flexicious.nestedtreedatagrid.events.FlexDataGridEvent;
            import com.flexicious.nestedtreedatagrid.interfaces.IFlexDataGridCell;
            import com.flexicious.utils.UIUtils;
            
            import mock.FlexiciousMockGenerator;
            
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            import mx.utils.ObjectUtil;
            import mx.utils.UIDUtil;
            
            
            
            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                mdg.buildFromXml(FlexiciousMockGenerator.mockNestedXml);
                insertUIDColumn(mdg.columnLevel);
                mdg.dataProvider=FlexiciousMockGenerator.mockNestedData;
                mdg.validateNow();
                mdg.expandAll();
                mdg.columnLevel.rowDisabledFunction=checkRowDisabled
                mdg_changeHandler(null)
            }
            
            function checkRowDisabled(cell:IFlexDataGridCell, data:Object):Boolean{
                if(!cbDisable.selected)return false;
                return data.hasOwnProperty("title")&&data.title=="Architect";
            }
            
            protected function mdg_changeHandler(event:FlexDataGridEvent):void
            {
                lblSelectedKeys.text = mdg.getSelectedKeys().join("\n");
                lblUnSelectedKeys.text= mdg.getUnSelectedKeys().join("\n");
                lblOpenKeys.text = mdg.getOpenKeys().join("\n");
            }
            
            
            protected function btnRefresh_clickHandler(event:MouseEvent):void
            {
                mdg.dataProvider=FlexiciousMockGenerator.mockNestedData;//the getter will create a new instance
                mdg_changeHandler(null);
            }
            
            private function insertUIDColumn(columnLevel:FlexDataGridColumnLevel):void
            {
                var cols:Array=columnLevel.columns;
                var uuIdCol:FlexDataGridColumn = new FlexDataGridColumn();
                uuIdCol.labelFunction=getUID;
                uuIdCol.headerText="UID";
                cols.push(uuIdCol)
                columnLevel.columns=cols;
                if(columnLevel.nextLevel)
                    insertUIDColumn(columnLevel.nextLevel);
            }
            
            private function getUID(item:Object,col:Object):String
            {
                return UIDUtil.getUID(item);
            }
            
        ]]>
    </fx:Script>
    <mx:HBox>
        <mx:CheckBox label="Use Selection Exclusion" id="cbSelectionExclusion" selected="false" click="mdg.clearSelection();mdg.enableSelectionExclusion=event.target.selected"/>
        
        <mx:CheckBox label="Selection Cascade/Bubble"  
                     selected="true" 
                     click="mdg.clearSelection();mdg.enableSelectionCascade=event.target.selected;mdg.enableSelectionBubble=event.target.selected;mdg.enableTriStateCheckbox=event.target.selected"/>
        <mx:CheckBox label="Disable Selection for a Row"  id="cbDisable" change="mdg.clearSelection();mdg.redrawBody();"/>
    </mx:HBox>
    <mx:HBox>
        <mx:CheckBox label="Clear Open Items on Dataprovider Refresh" 
                     click="mdg.clearOpenItemsOnDataProviderChange=event.target.selected"/>
        <mx:CheckBox label="Clear Selected Items on Dataprovider Refresh"  
                     click="mdg.clearSelectionOnDataProviderChange=event.target.selected"/>
        <mx:Button label="Refresh DataProvider" id="btnRefresh" click="btnRefresh_clickHandler(event)"/>
    </mx:HBox>
    <mx:HBox  width="100%" 
              height="100%">
        <functional:MyDataGrid id="mdg" horizontalGridLines="true" 
                               width="100%" 
                               height="100%" clearOpenItemsOnDataProviderChange="false"
                               clearSelectionOnDataProviderChange="false"
                               change="mdg_changeHandler(event)"
                               itemOpen="mdg_changeHandler(event)"
                               itemClose="mdg_changeHandler(event)"/>
        <mx:VBox width="200"  height="100%">
            <mx:Label text="Selected Keys"/>
            <mx:TextArea id="lblSelectedKeys" width="100%" height="100%"/>
            <mx:Label text="UnSelected Keys(Exclusion Only)"/>
            <mx:TextArea id="lblUnSelectedKeys" width="100%" height="100%" enabled="{cbSelectionExclusion.selected}"/>
            <mx:Label text="Open Keys"/>
            <mx:TextArea id="lblOpenKeys" width="100%" height="100%"/>
            
        </mx:VBox>
    </mx:HBox>
            
</mx:VBox>