<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009"  creationComplete="vbox1_creationCompleteHandler(event)"
         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.*"
         >
    <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.example.view.support.ActionMenu;
            import com.flexicious.nestedtreedatagrid.events.FlexDataGridEvent;
            import com.flexicious.nestedtreedatagrid.interfaces.IFlexDataGridDataCell;
            import com.flexicious.nestedtreedatagrid.valueobjects.RowPositionInfo;
            import com.flexicious.utils.UIUtils;
            
            import mock.FlexiciousMockGenerator;
            
            import mx.collections.ArrayCollection;
            import mx.core.UIComponent;
            import mx.events.FlexEvent;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.ResultEvent;
            
            import pdf.AlivePdfGenerator;
            
            

            protected function grid_itemRollOverHandler(event:FlexDataGridEvent):void
            {
                if(event.cell is IFlexDataGridDataCell)//only if we hover over a data cell, not a header or filter or pager cell
                {
                    var mouseEvent:MouseEvent = event.triggerEvent as MouseEvent;
                    if(rbnMousePosition.selected){
                        var point:Point=
                            new Point(mouseEvent?mouseEvent.stageX:0,mouseEvent?mouseEvent.stageY:0);
                        grid.showTooltip(event.cell as UIComponent,new ActionMenu(),event.cell.rowInfo.data,point,0,0,cbShouldAutoAdjust.selected);
                    }
                    else{ 
                        //by default, the show tooltip will place the tip to the bottom left of the object you are asking it 
                        //to place the tooltip relative to. The left and top offset are provided so you can fine tune the 
                        //placement of the popup. The last parameter tells the grid not to do any math to prevent the 
                        //tooltip from going off the view area of the container. 
                        grid.showTooltip(event.cell as UIComponent,new ActionMenu(),event.cell.rowInfo.data,null,0,rbnBelow.selected?0:
                            -25,
                            cbShouldAutoAdjust.selected,rbnLeft.selected?"left":rbnRight.selected?"right":"none");
                    }
                }    
                
            }


            protected function grid_itemRollOutHandler(event:FlexDataGridEvent):void
            {
                grid.hideTooltip()
            }

            protected function vbox1_creationCompleteHandler(event:FlexEvent):void
            {
                BusinessService.getInstance().getDeepOrgList(function(evt:ResultEvent,token:AsyncToken):void{grid.dataProvider=evt.result})
            }
            
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:HGroup>
        <s:RadioButton id="rbnMousePosition" label="Popup relative to mouse position" selected="true"/>
        <s:RadioButton id="rbnCell" label="Popup relative to hover over cell"/>
        
        <s:CheckBox id="cbShouldAutoAdjust" label="Auto adjust to prevent from going off screen"/>
    </s:HGroup>
    <s:HGroup enabled="{rbnCell.selected}">
        <s:RadioButton groupName="cellPosition" id="rbnLeft" label="Left Of Cell" selected="true"/>
        <s:RadioButton groupName="cellPosition" id="rbnRight" label="Right Of Cell" selected="true"/>
        <s:RadioButton groupName="cellPosition" id="rbnBelow" label="Below Cell" selected="true"/>
    </s:HGroup>
    <nestedtreedatagrid:FlexDataGrid id="grid" width="100%"  enablePrint="true" height="100%"
                                     enablePreferencePersistence="true" enableDrillDown="true" 
                                     enableExport="true" enableCopy="true"
                                     pdfBytesReady="new AlivePdfGenerator().generate(event.target as FlexDataGrid ,event.printOptions)"
                                     preferencePersistenceKey="nesteddata" itemRollOut="grid_itemRollOutHandler(event)" itemRollOver="grid_itemRollOverHandler(event)">
        
        <nestedtreedatagrid:columnLevel >
            <nestedtreedatagrid:FlexDataGridColumnLevel enableFilters="true" enablePaging="true" initialSortField="legalName"
                                                        pageSize="20" childrenField="deals" enableFooters="true" selectedKeyField="id">
                <nestedtreedatagrid:columns>
                    <nestedtreedatagrid:FlexDataGridCheckBoxColumn  />
                    <nestedtreedatagrid:FlexDataGridColumn enableCellClickRowSelect="false" columnWidthMode="fitToContent" 
                                                           selectable="true" dataField="id" headerText="ID" filterControl="TextInput"/>
                    <nestedtreedatagrid:FlexDataGridColumn truncateToFit="true" enableCellClickRowSelect="false" 
                                                           selectable="true" dataField="legalName" headerText="Legal Name" width="150" columnWidthMode="fixed"/>
                    <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" columnWidthMode="fitToContent" 
                                                           textAlign="right" headerAlign="center" footerLabel="Avg:" footerOperation="average" footerAlign="center" columnWidthModeFitToContentExcludeHeader="true"
                                                           footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="numEmployees" headerText="Num Employees" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
                                                           textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" 
                                                           footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="earningsPerShare" headerText="EPS" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
                                                           textAlign="right" footerLabel="Avg:" footerOperation="average" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                    <nestedtreedatagrid:FlexDataGridColumn dataField="lastStockPrice" headerText="Stock Price" columnWidthMode="fitToContent" columnWidthModeFitToContentExcludeHeader="true"
                                                           textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" 
                                                           footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                </nestedtreedatagrid:columns>
                <nestedtreedatagrid:nextLevel>
                    <nestedtreedatagrid:FlexDataGridColumnLevel childrenField="invoices" enableFooters="true" selectedKeyField="id"
                                                                initialSortField="dealDate" initialSortAscending="false">
                        <nestedtreedatagrid:columns>
                            <nestedtreedatagrid:FlexDataGridCheckBoxColumn />
                            <nestedtreedatagrid:FlexDataGridColumn dataField="dealDescription" headerText="Deal Description"   
                                                                   footerLabel="Count:" footerOperation="count" footerAlign="center"
                                                                   />
                            <nestedtreedatagrid:FlexDataGridColumn dataField="dealAmount" headerText="Deal Amount" textAlign="right" 
                                                                   footerLabel="Total:" footerOperation="sum" footerAlign="right"
                                                                   footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                                   labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                            <nestedtreedatagrid:FlexDataGridColumn dataField="dealDate" headerText="Deal Date" labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                        </nestedtreedatagrid:columns>
                        <nestedtreedatagrid:nextLevel>
                            <nestedtreedatagrid:FlexDataGridColumnLevel childrenField="lineItems" enableFooters="true" enablePaging="true" pageSize="3"
                                                                        selectedKeyField="id">
                                <nestedtreedatagrid:columns>
                                    <nestedtreedatagrid:FlexDataGridCheckBoxColumn />
                                    <nestedtreedatagrid:FlexDataGridColumn dataField="id" headerText="Invoice Number" 
                                                                           footerLabel="Count:" footerOperation="count" footerAlign="center" 
                                                                           />
                                    <nestedtreedatagrid:FlexDataGridColumn dataField="invoiceAmount" headerText="Invoice Amount" textAlign="right" 
                                                                           footerLabel="Total:" footerOperation="sum" footerAlign="right"
                                                                           footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                                           labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                                    <nestedtreedatagrid:FlexDataGridColumn dataField="invoiceStatus.name" headerText="Invoice Status" />
                                    
                                    <nestedtreedatagrid:FlexDataGridColumn dataField="invoiceDate" headerText="Invoice Date" 
                                                                           labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                                    <nestedtreedatagrid:FlexDataGridColumn dataField="dueDate" headerText="Due Date" 
                                                                           labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                                </nestedtreedatagrid:columns>
                                <nestedtreedatagrid:nextLevel>
                                    <nestedtreedatagrid:FlexDataGridColumnLevel enableFooters="true" selectedKeyField="id">
                                        <nestedtreedatagrid:columns>
                                            <nestedtreedatagrid:FlexDataGridCheckBoxColumn />
                                            <nestedtreedatagrid:FlexDataGridColumn dataField="lineItemDescription" headerText="Line Item Description" 
                                                                                   footerLabel="Count:" footerOperation="count" footerAlign="center" 
                                                                                   />
                                            <nestedtreedatagrid:FlexDataGridColumn dataField="lineItemAmount" headerText="Line Item Amount" textAlign="right" 
                                                                                   footerLabel="Total:" footerOperation="sum" footerAlign="right" 
                                                                                   footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                                                   labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                                            
                                        </nestedtreedatagrid:columns>
                                    </nestedtreedatagrid:FlexDataGridColumnLevel>
                                </nestedtreedatagrid:nextLevel>
                            </nestedtreedatagrid:FlexDataGridColumnLevel>
                        </nestedtreedatagrid:nextLevel>
                    </nestedtreedatagrid:FlexDataGridColumnLevel>
                </nestedtreedatagrid:nextLevel>
            </nestedtreedatagrid:FlexDataGridColumnLevel>
        </nestedtreedatagrid:columnLevel>
    </nestedtreedatagrid:FlexDataGrid>
    
</mx:VBox >