<?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:billing="com.flexicious.example.model.billing.*"
         xmlns:controls="com.flexicious.controls.*" xmlns:mate="http://mate.asfusion.com/" creationComplete="vbox1_creationCompleteHandler(event)" 
         xmlns:flxs="com.flexicious.nestedtreedatagrid.*">
    <fx:Script>
        <![CDATA[
            import com.flexicious.controls.TextInput;
            import com.flexicious.example.serviceproxies.BusinessService;
            import com.flexicious.example.utils.ExampleUtils;
            import com.flexicious.nestedtreedatagrid.cells.FlexDataGridCell;
            import com.flexicious.nestedtreedatagrid.events.FlexDataGridEvent;
            import com.flexicious.utils.UIUtils;
            
            import mock.FlexiciousMockGenerator;
            
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.events.FlexEvent;
            import mx.events.ListEvent;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.ResultEvent;
            
            import pdf.AlivePdfGenerator;
            
            protected function vbox1_creationCompleteHandler(event:FlexEvent):void
            {
                BusinessService.getInstance().getDeepOrgList(function(evt:ResultEvent,token:AsyncToken):void{grid.dataProvider=evt.result})
            }
            
            protected function grid_itemDoubleClickHandler(event:FlexDataGridEvent):void
            {
                //Alert.show(event.cell.rowInfo.data.legalName);
                
            }
            //https://bugs.adobe.com/jira/browse/SDK-31155 (right click issue)
            
            protected function grid_cellRenderedHandler(event:FlexDataGridEvent):void
            {
                if(event.cell.column && event.cell.column.enableExpandCollapseIcon){
                    //we want to position this seperately.
                    var fdg:FlexDataGridCell=event.cell as FlexDataGridCell;
                    if(fdg.expandCollapseIcon)
                        fdg.expandCollapseIcon.x = ((event.cell.level.nestDepth-1) * 15)+5    
                    if(fdg.colIcon)
                        fdg.colIcon.x = ((event.cell.level.nestDepth-1) * 15)+25
                        
                }
                
            }
            
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        
    </fx:Declarations>
    <flxs:FlexDataGrid id="grid" width="100%"  enablePrint="true" height="100%"
                       enablePreferencePersistence="true" enableDrillDown="true" 
                       enableExport="true" enableCopy="true" enableSelectionCascade="true" enableSelectionBubble="true" enableTriStateCheckbox="true"
                       pdfBytesReady="new AlivePdfGenerator().generate(event.target as FlexDataGrid ,event.printOptions)"
                       preferencePersistenceKey="nesteddata"
                       itemDoubleClick="grid_itemDoubleClickHandler(event)" cellRendered="grid_cellRenderedHandler(event)"
                       doubleClickEnabled="true"
                       horizontalScrollPolicy="auto" enableDefaultDisclosureIcon="false">
        
        <flxs:columnLevel >
            <flxs:FlexDataGridColumnLevel enableFilters="true" enablePaging="true" initialSortField="legalName"
                                          pageSize="20" childrenField="deals"  enableFooters="true" selectedKeyField="id"
                                          >
                
                <flxs:groupedColumns>
                    <flxs:FlexDataGridCheckBoxColumn />
                    <flxs:FlexDataGridColumn enableExpandCollapseIcon="true" excludeFromSettings="true" columnWidthMode="fixed" width="40" paddingTop="5" 
                                             icon="@Embed('/assets/images/info.gif')" enableIcon="true"/>
                    <flxs:FlexDataGridColumn
                        id="colId" dataField="id" headerText="ID" filterControl="TextInput" filterRenderer="{UIUtils.createRenderer(TextInput,{delayDuration:1500})}"
                        />
                    <flxs:FlexDataGridColumn id="colLegalName" enableCellClickRowSelect="false"
                                             dataField="legalName" headerText="Legal Name"/>
                    <flxs:FlexDataGridColumnGroup headerText="Address">
                        <flxs:columnGroups>
                            <flxs:FlexDataGridColumnGroup headerText="Lines" >
                                <flxs:columns>
                                    <flxs:FlexDataGridColumn enableCellClickRowSelect="false" id="colLine1" dataField="headquarterAddress.line1" headerText="Line 1" footerLabel="Count:" footerOperation="count"/>
                                    <flxs:FlexDataGridColumn enableCellClickRowSelect="false" id="colLine2" dataField="headquarterAddress.line2" headerText="Line 2"/>
                                </flxs:columns>
                            </flxs:FlexDataGridColumnGroup>
                            <flxs:FlexDataGridColumnGroup headerText="Region">
                                <flxs:columns>
                                    <flxs:FlexDataGridColumn id="colCity" dataField="headquarterAddress.city.name" headerText="City" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                                    <flxs:FlexDataGridColumn id="colState" dataField="headquarterAddress.state.name" headerText="State" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                                    <flxs:FlexDataGridColumn id="colCountry" dataField="headquarterAddress.country.name" headerText="Country" filterControl="MultiSelectComboBox" filterComboBoxBuildFromGrid="true" filterComboBoxWidth="150"/>
                                </flxs:columns>
                            </flxs:FlexDataGridColumnGroup>
                        </flxs:columnGroups>
                    </flxs:FlexDataGridColumnGroup>
                    <flxs:FlexDataGridColumnGroup  headerText="Financials" >
                        <flxs:columns>
                            <flxs:FlexDataGridColumn id="colAnnRev" dataField="annualRevenue" headerText="Annual Revenue" textAlign="right" headerAlign="center" footerLabel="Avg:" footerOperation="average" footerAlign="center" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                            <flxs:FlexDataGridColumn id="colNumEmp" dataField="numEmployees" headerText="Num Employees" textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                            <flxs:FlexDataGridColumn id="colEPS"  dataField="earningsPerShare" headerText="EPS" textAlign="right" footerLabel="Avg:" footerOperation="average" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                            <flxs:FlexDataGridColumn id="colStockPrice" dataField="lastStockPrice" headerText="Stock Price" textAlign="right" footerLabel="Avg:" footerOperation="average" footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                        </flxs:columns>
                    </flxs:FlexDataGridColumnGroup>
                </flxs:groupedColumns>
                <flxs:nextLevel>
                    <flxs:FlexDataGridColumnLevel childrenField="invoices" enableFooters="true" selectedKeyField="id" nestIndent="30"
                                                  initialSortField="dealDate" initialSortAscending="false" parentField="customer">
                        <flxs:columns>
                            <flxs:FlexDataGridCheckBoxColumn />
                            <flxs:FlexDataGridColumn  paddingLeft="20" enableExpandCollapseIcon="true" excludeFromSettings="true" columnWidthMode="fixed" width="60" 
                                                      paddingTop="5"
                                                      icon="@Embed('/assets/images/info.gif')" enableIcon="true"/>
                            <flxs:FlexDataGridColumn dataField="dealDescription" headerText="Deal Description"   
                                                     footerLabel="Count:" footerOperation="count" footerAlign="center"
                                                     />
                            <flxs:FlexDataGridColumn dataField="dealAmount" headerText="Deal Amount" textAlign="right" 
                                                     footerLabel="Total:" footerOperation="sum" footerAlign="right"
                                                     footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                     labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                            <flxs:FlexDataGridColumn dataField="dealDate" headerText="Deal Date" labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                            
                        </flxs:columns>
                        <flxs:nextLevel>
                            <flxs:FlexDataGridColumnLevel childrenField="lineItems" enableFooters="true" enablePaging="true" pageSize="3"
                                                          selectedKeyField="id" parentField="deal" nestIndent="30">
                                <flxs:columns>
                                    <flxs:FlexDataGridCheckBoxColumn />
                                    <flxs:FlexDataGridColumn  paddingLeft="40" enableExpandCollapseIcon="true" excludeFromSettings="true" columnWidthMode="fixed" 
                                                              width="80" paddingTop="5"
                                                              icon="@Embed('/assets/images/info.gif')" enableIcon="true"/>
                                    
                                    <flxs:FlexDataGridColumn dataField="id" headerText="Invoice Number" 
                                                             footerLabel="Count:" footerOperation="count" footerAlign="center" 
                                                             />
                                    <flxs:FlexDataGridColumn dataField="invoiceAmount" headerText="Invoice Amount" textAlign="right" 
                                                             footerLabel="Total:" footerOperation="sum" footerAlign="right"
                                                             footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                             labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                                    <flxs:FlexDataGridColumn dataField="invoiceStatus.name" headerText="Invoice Status" />
                                    
                                    <flxs:FlexDataGridColumn dataField="invoiceDate" headerText="Invoice Date" 
                                                             labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                                    <flxs:FlexDataGridColumn dataField="dueDate" headerText="Due Date" 
                                                             labelFunction="UIUtils.dataGridFormatDateLabelFunction"/>
                                    
                                </flxs:columns>
                                <flxs:nextLevel>
                                    <flxs:FlexDataGridColumnLevel enableFooters="true" selectedKeyField="id" parentField="invoice" nestIndent="30">
                                        <flxs:columns>
                                            <flxs:FlexDataGridCheckBoxColumn />
                                            <flxs:FlexDataGridColumn width="100" paddingTop="5" id="paddingCol"/>
                                            
                                            <flxs:FlexDataGridColumn dataField="lineItemDescription" headerText="Line Item Description" 
                                                                     footerLabel="Count:" footerOperation="count" footerAlign="center" 
                                                                     />
                                            <flxs:FlexDataGridColumn dataField="lineItemAmount" headerText="Line Item Amount" textAlign="right" 
                                                                     footerLabel="Total:" footerOperation="sum" footerAlign="right" 
                                                                     footerOperationPrecision="2" footerFormatter="{ExampleUtils.globalCurrencyFormatter}" 
                                                                     labelFunction="UIUtils.dataGridFormatCurrencyLabelFunction"/>
                                            
                                        </flxs:columns>
                                    </flxs:FlexDataGridColumnLevel>
                                </flxs:nextLevel>
                            </flxs:FlexDataGridColumnLevel>
                        </flxs:nextLevel>
                    </flxs:FlexDataGridColumnLevel>
                </flxs:nextLevel>
            </flxs:FlexDataGridColumnLevel>
        </flxs:columnLevel>
    </flxs:FlexDataGrid>
    
</mx:VBox >