<?xml version="1.0" encoding="utf-8"?>
<mx:HBox 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.*" creationComplete="hbox2_creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import com.flexicious.example.model.billing.LineItem;
            import com.flexicious.example.serviceproxies.BusinessService;
            import com.flexicious.example.utils.ExampleUtils;
            import com.flexicious.nestedtreedatagrid.pager.IExtendedPager;
            import com.flexicious.nestedtreedatagrid.valueobjects.RowPositionInfo;
            import com.flexicious.nestedtreedatagrid.valueobjects.ToolbarAction;
            import com.flexicious.utils.UIUtils;
            
            import mock.FlexiciousMockGenerator;
            
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.events.CloseEvent;
            import mx.events.FlexEvent;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.ResultEvent;
            
            import pdf.AlivePdfGenerator;
            
            
            

            protected function hbox2_creationCompleteHandler(event:FlexEvent):void
            {
                grid.toolbarActions.addItem(new ToolbarAction("Edit",1,"","Edit Record","assets/images/edit.png",true,false));
                grid.toolbarActions.addItem(new ToolbarAction("Delete",1,"","Delete Record","assets/images/delete.png",false,true));
                
                BusinessService.getInstance().getFlatOrgList(
                    function(evt:ResultEvent,token:AsyncToken):void{
                        grid.dataProvider=evt.result;
                    }
                );
            }
            private function isValidToolbarAction(action:ToolbarAction,currentTarget:Object,extendedPager:IExtendedPager):Boolean{
                return grid.selectedKeys.length==1;
            }
            private function onExecuteToolbarAction(action:ToolbarAction,currentTarget:Object,extendedPager:IExtendedPager):void{
                if(action.code=="Edit")
                    Alert.show("Launch Edit Window")
                else if(action.code=="Delete")
                    Alert.show("Are you sure you wish to delete this record?","Confirm Delete",Alert.OK|Alert.CANCEL,this,
                        function(event:CloseEvent):void
                        {
                            if(event.detail==Alert.OK){
                                //do the delete....you have the grid.selectedKey or grid.selectedObject here...
                                Alert.show("Trigger delete on the backend")
                            }
                        }
                    )
                else
                    Alert.show("Invalid action!")
                    
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <nestedtreedatagrid:FlexDataGrid id="grid" width="100%" height="100%" enablePrint="true" enablePreferencePersistence="true"
                                     enableExport="true" enableCopy="true" enableToolbarActions="true" 
                                     toolbarActionExecutedFunction="onExecuteToolbarAction"
                                     toolbarActionValidFunction="isValidToolbarAction"
                                     pdfBytesReady="new AlivePdfGenerator().generate(event.target as FlexDataGrid ,event.printOptions)"
                                     preferencePersistenceKey="toolbarActions">
        <nestedtreedatagrid:columnLevel >
            <nestedtreedatagrid:FlexDataGridColumnLevel selectedKeyField="id" enablePaging="true" pageSize="50" enableFilters="true"
                                                        enableFooters="true"  initialSortField="legalName" initialSortAscending="true"
                                                        >
                <nestedtreedatagrid:columns>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="id" headerText="ID" filterControl="TextInput"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="legalName" headerText="Legal Name"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.line1" headerText="Address Line 1" footerLabel="Count:" footerOperation="count"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.line2" headerText="Address Line 2"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.city.name" headerText="City" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.state.name" headerText="State" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="headquarterAddress.country.name" headerText="Country" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="annualRevenue" headerText="Annual Revenue" textAlign="right" headerAlign="center" footerLabel="Avg:" footerOperation="average" footerAlign="center" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="numEmployees" headerText="Num Employees" textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="earningsPerShare" headerText="EPS" textAlign="right" footerLabel="Avg:" footerOperation="average" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="lastStockPrice" headerText="Stock Price" textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                </nestedtreedatagrid:columns>
            </nestedtreedatagrid:FlexDataGridColumnLevel>
        </nestedtreedatagrid:columnLevel>
    </nestedtreedatagrid:FlexDataGrid>
    
</mx:HBox>