home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / controls / listClasses / ListBase.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  204.8 KB  |  6,023 lines

  1. package mx.controls.listClasses
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.DisplayObjectContainer;
  5.    import flash.display.Graphics;
  6.    import flash.display.Shape;
  7.    import flash.display.Sprite;
  8.    import flash.events.Event;
  9.    import flash.events.KeyboardEvent;
  10.    import flash.events.MouseEvent;
  11.    import flash.geom.Point;
  12.    import flash.ui.Keyboard;
  13.    import flash.utils.Dictionary;
  14.    import flash.utils.clearInterval;
  15.    import flash.utils.setInterval;
  16.    import mx.collections.ArrayCollection;
  17.    import mx.collections.CursorBookmark;
  18.    import mx.collections.ICollectionView;
  19.    import mx.collections.IList;
  20.    import mx.collections.IViewCursor;
  21.    import mx.collections.ItemResponder;
  22.    import mx.collections.ItemWrapper;
  23.    import mx.collections.ListCollectionView;
  24.    import mx.collections.ModifiedCollectionView;
  25.    import mx.collections.XMLListCollection;
  26.    import mx.collections.errors.CursorError;
  27.    import mx.collections.errors.ItemPendingError;
  28.    import mx.controls.dataGridClasses.DataGridListData;
  29.    import mx.core.DragSource;
  30.    import mx.core.EdgeMetrics;
  31.    import mx.core.EventPriority;
  32.    import mx.core.FlexShape;
  33.    import mx.core.FlexVersion;
  34.    import mx.core.IDataRenderer;
  35.    import mx.core.IFactory;
  36.    import mx.core.IFlexDisplayObject;
  37.    import mx.core.IInvalidating;
  38.    import mx.core.IUIComponent;
  39.    import mx.core.IUID;
  40.    import mx.core.IUITextField;
  41.    import mx.core.ScrollControlBase;
  42.    import mx.core.ScrollPolicy;
  43.    import mx.core.SpriteAsset;
  44.    import mx.core.mx_internal;
  45.    import mx.effects.IEffect;
  46.    import mx.effects.IEffectTargetHost;
  47.    import mx.effects.Tween;
  48.    import mx.events.CollectionEvent;
  49.    import mx.events.CollectionEventKind;
  50.    import mx.events.DragEvent;
  51.    import mx.events.EffectEvent;
  52.    import mx.events.FlexEvent;
  53.    import mx.events.ListEvent;
  54.    import mx.events.MoveEvent;
  55.    import mx.events.SandboxMouseEvent;
  56.    import mx.events.ScrollEvent;
  57.    import mx.events.ScrollEventDetail;
  58.    import mx.events.ScrollEventDirection;
  59.    import mx.events.TweenEvent;
  60.    import mx.managers.DragManager;
  61.    import mx.managers.IFocusManagerComponent;
  62.    import mx.managers.ISystemManager;
  63.    import mx.skins.halo.ListDropIndicator;
  64.    import mx.styles.StyleManager;
  65.    import mx.styles.StyleProxy;
  66.    import mx.utils.ObjectUtil;
  67.    import mx.utils.UIDUtil;
  68.    
  69.    use namespace mx_internal;
  70.    
  71.    public class ListBase extends ScrollControlBase implements IDataRenderer, IFocusManagerComponent, IListItemRenderer, IDropInListItemRenderer, IEffectTargetHost
  72.    {
  73.       mx_internal static var createAccessibilityImplementation:Function;
  74.       
  75.       mx_internal static const VERSION:String = "3.5.0.12683";
  76.       
  77.       mx_internal static const DRAG_THRESHOLD:int = 4;
  78.       
  79.       private static var _listContentStyleFilters:Object = null;
  80.       
  81.       private var _labelField:String = "label";
  82.       
  83.       private var trackedRenderers:Array = [];
  84.       
  85.       mx_internal var bSelectionChanged:Boolean = false;
  86.       
  87.       protected var offscreenExtraColumnsLeft:int = 0;
  88.       
  89.       protected var selectionTweens:Object = {};
  90.       
  91.       protected var caretItemRenderer:IListItemRenderer;
  92.       
  93.       protected var actualIterator:IViewCursor;
  94.       
  95.       protected var iteratorValid:Boolean = true;
  96.       
  97.       private var bSelectItem:Boolean = false;
  98.       
  99.       private var _allowMultipleSelection:Boolean = false;
  100.       
  101.       protected var cachedItemsChangeEffect:IEffect = null;
  102.       
  103.       private var lastSelectionData:ListBaseSelectionData;
  104.       
  105.       protected var iterator:IViewCursor;
  106.       
  107.       protected var rendererChanged:Boolean = false;
  108.       
  109.       protected var unconstrainedRenderers:Dictionary = new Dictionary();
  110.       
  111.       protected var freeItemRenderersByFactory:Dictionary;
  112.       
  113.       private var columnWidthChanged:Boolean = false;
  114.       
  115.       protected var explicitColumnCount:int = -1;
  116.       
  117.       private var _data:Object;
  118.       
  119.       private var bSelectedItemsChanged:Boolean = false;
  120.       
  121.       private var selectionDataArray:Array;
  122.       
  123.       protected var defaultRowCount:int = 4;
  124.       
  125.       private var _rowCount:int = -1;
  126.       
  127.       protected var offscreenExtraRowsTop:int = 0;
  128.       
  129.       private var _dataTipField:String = "label";
  130.       
  131.       private var cachedPaddingTopInvalid:Boolean = true;
  132.       
  133.       protected var selectedData:Object = {};
  134.       
  135.       private var _labelFunction:Function;
  136.       
  137.       mx_internal var listType:String = "grid";
  138.       
  139.       private var cachedPaddingBottomInvalid:Boolean = true;
  140.       
  141.       protected var runningDataEffect:Boolean = false;
  142.       
  143.       protected var runDataEffectNextUpdate:Boolean = false;
  144.       
  145.       private var bShiftKey:Boolean = false;
  146.       
  147.       private var columnCountChanged:Boolean = true;
  148.       
  149.       protected var rowMap:Object = {};
  150.       
  151.       mx_internal var _selectedIndex:int = -1;
  152.       
  153.       mx_internal var collectionIterator:IViewCursor;
  154.       
  155.       protected var lastDropIndex:int;
  156.       
  157.       private var bCtrlKey:Boolean = false;
  158.       
  159.       private var oldUnscaledHeight:Number;
  160.       
  161.       protected var explicitColumnWidth:Number;
  162.       
  163.       private var _dataTipFunction:Function;
  164.       
  165.       private var _iconFunction:Function;
  166.       
  167.       protected var dataItemWrappersByRenderer:Dictionary = new Dictionary(true);
  168.       
  169.       protected var itemsNeedMeasurement:Boolean = true;
  170.       
  171.       protected var offscreenExtraRowsBottom:int = 0;
  172.       
  173.       protected var modifiedCollectionView:ModifiedCollectionView;
  174.       
  175.       private var _columnCount:int = -1;
  176.       
  177.       private var rowCountChanged:Boolean = true;
  178.       
  179.       protected var wordWrapChanged:Boolean = false;
  180.       
  181.       protected var explicitRowCount:int = -1;
  182.       
  183.       protected var offscreenExtraRows:int = 0;
  184.       
  185.       private var _dragEnabled:Boolean = false;
  186.       
  187.       private var bSortItemPending:Boolean = false;
  188.       
  189.       protected var caretIndicator:Sprite;
  190.       
  191.       protected var caretUID:String;
  192.       
  193.       protected var caretBookmark:CursorBookmark;
  194.       
  195.       public var allowDragSelection:Boolean = false;
  196.       
  197.       mx_internal var allowRendererStealingDuringLayout:Boolean = true;
  198.       
  199.       private var _selectable:Boolean = true;
  200.       
  201.       protected var listContent:ListBaseContentHolder;
  202.       
  203.       private var _showDataTips:Boolean = false;
  204.       
  205.       private var _variableRowHeight:Boolean = false;
  206.       
  207.       private var cachedVerticalAlignInvalid:Boolean = true;
  208.       
  209.       private var _dragMoveEnabled:Boolean = false;
  210.       
  211.       private var _rowHeight:Number;
  212.       
  213.       private var _selectedItem:Object;
  214.       
  215.       public var menuSelectionMode:Boolean = false;
  216.       
  217.       mx_internal var cachedPaddingTop:Number;
  218.       
  219.       private var _selectedIndices:Array;
  220.       
  221.       private var _columnWidth:Number;
  222.       
  223.       protected var defaultColumnCount:int = 4;
  224.       
  225.       private var rendererTrackingSuspended:Boolean = false;
  226.       
  227.       private var oldUnscaledWidth:Number;
  228.       
  229.       private var _nullItemRenderer:IFactory;
  230.       
  231.       mx_internal var bColumnScrolling:Boolean = true;
  232.       
  233.       protected var showCaret:Boolean;
  234.       
  235.       private var firstSelectionData:ListBaseSelectionData;
  236.       
  237.       private var mouseDownItem:IListItemRenderer;
  238.       
  239.       protected var collection:ICollectionView;
  240.       
  241.       protected var offscreenExtraRowsOrColumnsChanged:Boolean = false;
  242.       
  243.       private var _offscreenExtraRowsOrColumns:int = 0;
  244.       
  245.       private var _iconField:String = "icon";
  246.       
  247.       protected var dataEffectCompleted:Boolean = false;
  248.       
  249.       private var bSelectedItemChanged:Boolean = false;
  250.       
  251.       private var _listData:BaseListData;
  252.       
  253.       mx_internal var bSelectOnRelease:Boolean;
  254.       
  255.       protected var actualCollection:ICollectionView;
  256.       
  257.       mx_internal var lastHighlightItemRenderer:IListItemRenderer;
  258.       
  259.       private var _itemRenderer:IFactory;
  260.       
  261.       mx_internal var itemMaskFreeList:Array;
  262.       
  263.       protected var keySelectionPending:Boolean = false;
  264.       
  265.       private var mouseDownPoint:Point;
  266.       
  267.       protected var selectionIndicators:Object = {};
  268.       
  269.       protected var highlightUID:String;
  270.       
  271.       mx_internal var dragScrollingInterval:int = 0;
  272.       
  273.       protected var anchorBookmark:CursorBookmark;
  274.       
  275.       protected var caretIndex:int = -1;
  276.       
  277.       protected var offscreenExtraColumnsRight:int = 0;
  278.       
  279.       private var _selectedItemsCompareFunction:Function;
  280.       
  281.       private var approximate:Boolean = false;
  282.       
  283.       protected var anchorIndex:int = -1;
  284.       
  285.       private var firstSelectedItem:Object;
  286.       
  287.       protected var selectionLayer:Sprite;
  288.       
  289.       protected var freeItemRenderers:Array = [];
  290.       
  291.       mx_internal var bSelectedIndexChanged:Boolean = false;
  292.       
  293.       mx_internal var cachedVerticalAlign:String;
  294.       
  295.       private var lastHighlightItemIndices:Point;
  296.       
  297.       mx_internal var lastHighlightItemRendererAtIndices:IListItemRenderer;
  298.       
  299.       protected var lastSeekPending:ListBaseSeekPending;
  300.       
  301.       private var bSelectedIndicesChanged:Boolean = false;
  302.       
  303.       private var proposedSelectedItemIndexes:Dictionary;
  304.       
  305.       private var _dropEnabled:Boolean = false;
  306.       
  307.       protected var itemsSizeChanged:Boolean = false;
  308.       
  309.       mx_internal var isPressed:Boolean = false;
  310.       
  311.       private var IS_ITEM_STYLE:Object = {
  312.          "alternatingItemColors":true,
  313.          "backgroundColor":true,
  314.          "backgroundDisabledColor":true,
  315.          "color":true,
  316.          "rollOverColor":true,
  317.          "selectionColor":true,
  318.          "selectionDisabledColor":true,
  319.          "styleName":true,
  320.          "textColor":true,
  321.          "textRollOverColor":true,
  322.          "textSelectedColor":true
  323.       };
  324.       
  325.       mx_internal var cachedPaddingBottom:Number;
  326.       
  327.       protected var highlightIndicator:Sprite;
  328.       
  329.       private var verticalScrollPositionPending:Number;
  330.       
  331.       protected var explicitRowHeight:Number;
  332.       
  333.       protected var highlightItemRenderer:IListItemRenderer;
  334.       
  335.       private var rowHeightChanged:Boolean = false;
  336.       
  337.       mx_internal var lastDragEvent:DragEvent;
  338.       
  339.       private var _wordWrap:Boolean = false;
  340.       
  341.       private var horizontalScrollPositionPending:Number;
  342.       
  343.       mx_internal var dropIndicator:IFlexDisplayObject;
  344.       
  345.       private var _selectedItems:Array;
  346.       
  347.       protected var offscreenExtraColumns:int = 0;
  348.       
  349.       private var lastKey:uint = 0;
  350.       
  351.       protected var factoryMap:Dictionary;
  352.       
  353.       protected var reservedItemRenderers:Object = {};
  354.       
  355.       public function ListBase()
  356.       {
  357.          super();
  358.          tabEnabled = true;
  359.          factoryMap = new Dictionary(true);
  360.          addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheelHandler);
  361.          addEventListener(MouseEvent.MOUSE_OVER,mouseOverHandler);
  362.          addEventListener(MouseEvent.MOUSE_OUT,mouseOutHandler);
  363.          addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  364.          addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
  365.          addEventListener(MouseEvent.CLICK,mouseClickHandler);
  366.          addEventListener(MouseEvent.DOUBLE_CLICK,mouseDoubleClickHandler);
  367.          invalidateProperties();
  368.       }
  369.       
  370.       [Bindable("iconFieldChanged")]
  371.       public function get iconField() : String
  372.       {
  373.          return _iconField;
  374.       }
  375.       
  376.       public function set iconField(param1:String) : void
  377.       {
  378.          _iconField = param1;
  379.          itemsSizeChanged = true;
  380.          invalidateDisplayList();
  381.          dispatchEvent(new Event("iconFieldChanged"));
  382.       }
  383.       
  384.       mx_internal function getItemUID(param1:Object) : String
  385.       {
  386.          return itemToUID(param1);
  387.       }
  388.       
  389.       public function measureWidthOfItems(param1:int = -1, param2:int = 0) : Number
  390.       {
  391.          return NaN;
  392.       }
  393.       
  394.       private function terminateSelectionTracking() : void
  395.       {
  396.          var _loc2_:IListItemRenderer = null;
  397.          var _loc1_:int = 0;
  398.          while(_loc1_ < trackedRenderers.length)
  399.          {
  400.             _loc2_ = trackedRenderers[_loc1_] as IListItemRenderer;
  401.             _loc2_.removeEventListener(MoveEvent.MOVE,rendererMoveHandler);
  402.             _loc1_++;
  403.          }
  404.          trackedRenderers = [];
  405.       }
  406.       
  407.       public function get columnWidth() : Number
  408.       {
  409.          return _columnWidth;
  410.       }
  411.       
  412.       public function createItemRenderer(param1:Object) : IListItemRenderer
  413.       {
  414.          return null;
  415.       }
  416.       
  417.       protected function clearSelected(param1:Boolean = false) : void
  418.       {
  419.          var _loc2_:String = null;
  420.          var _loc3_:Object = null;
  421.          var _loc4_:IListItemRenderer = null;
  422.          for(_loc2_ in selectedData)
  423.          {
  424.             _loc3_ = selectedData[_loc2_].data;
  425.             removeSelectionData(_loc2_);
  426.             _loc4_ = UIDToItemRenderer(itemToUID(_loc3_));
  427.             if(_loc4_)
  428.             {
  429.                drawItem(_loc4_,false,_loc2_ == highlightUID,false,param1);
  430.             }
  431.          }
  432.          clearSelectionData();
  433.          mx_internal::_selectedIndex = -1;
  434.          _selectedItem = null;
  435.          caretIndex = -1;
  436.          anchorIndex = -1;
  437.          caretBookmark = null;
  438.          anchorBookmark = null;
  439.       }
  440.       
  441.       protected function addToRowArrays() : void
  442.       {
  443.          listItems.splice(0,0,null);
  444.          rowInfo.splice(0,0,null);
  445.       }
  446.       
  447.       public function get nullItemRenderer() : IFactory
  448.       {
  449.          return _nullItemRenderer;
  450.       }
  451.       
  452.       [Bindable("showDataTipsChanged")]
  453.       public function get showDataTips() : Boolean
  454.       {
  455.          return _showDataTips;
  456.       }
  457.       
  458.       public function set columnWidth(param1:Number) : void
  459.       {
  460.          explicitColumnWidth = param1;
  461.          if(_columnWidth != param1)
  462.          {
  463.             mx_internal::setColumnWidth(param1);
  464.             invalidateSize();
  465.             itemsSizeChanged = true;
  466.             invalidateDisplayList();
  467.             dispatchEvent(new Event("columnWidthChanged"));
  468.          }
  469.       }
  470.       
  471.       protected function scrollHorizontally(param1:int, param2:int, param3:Boolean) : void
  472.       {
  473.       }
  474.       
  475.       protected function drawHighlightIndicator(param1:Sprite, param2:Number, param3:Number, param4:Number, param5:Number, param6:uint, param7:IListItemRenderer) : void
  476.       {
  477.          var _loc8_:Graphics = Sprite(param1).graphics;
  478.          _loc8_.clear();
  479.          _loc8_.beginFill(param6);
  480.          _loc8_.drawRect(0,0,param4,param5);
  481.          _loc8_.endFill();
  482.          param1.x = param2;
  483.          param1.y = param3;
  484.       }
  485.       
  486.       [Bindable("viewChanged")]
  487.       [Bindable("scroll")]
  488.       override public function get verticalScrollPosition() : Number
  489.       {
  490.          if(!isNaN(verticalScrollPositionPending))
  491.          {
  492.             return verticalScrollPositionPending;
  493.          }
  494.          return super.verticalScrollPosition;
  495.       }
  496.       
  497.       protected function drawCaretIndicator(param1:Sprite, param2:Number, param3:Number, param4:Number, param5:Number, param6:uint, param7:IListItemRenderer) : void
  498.       {
  499.          var _loc8_:Graphics = Sprite(param1).graphics;
  500.          _loc8_.clear();
  501.          _loc8_.lineStyle(1,param6,1);
  502.          _loc8_.drawRect(0,0,param4 - 1,param5 - 1);
  503.          param1.x = param2;
  504.          param1.y = param3;
  505.       }
  506.       
  507.       private function makeAdditionalRows(param1:int) : void
  508.       {
  509.          var curY:Number;
  510.          var cursorPos:CursorBookmark = null;
  511.          var rowIndex:int = param1;
  512.          if(iterator)
  513.          {
  514.             cursorPos = iterator.bookmark;
  515.             try
  516.             {
  517.                iterator.seek(CursorBookmark.CURRENT,listItems.length);
  518.             }
  519.             catch(e:ItemPendingError)
  520.             {
  521.                lastSeekPending = new ListBaseSeekPending(CursorBookmark.CURRENT,listItems.length);
  522.                e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  523.                iteratorValid = false;
  524.             }
  525.          }
  526.          curY = rowInfo[rowIndex].y + rowInfo[rowIndex].height;
  527.          makeRowsAndColumns(0,curY,listContent.width,listContent.height,0,rowIndex + 1);
  528.          seekPositionIgnoreError(iterator,cursorPos);
  529.       }
  530.       
  531.       public function set showDataTips(param1:Boolean) : void
  532.       {
  533.          _showDataTips = param1;
  534.          itemsSizeChanged = true;
  535.          invalidateDisplayList();
  536.          dispatchEvent(new Event("showDataTipsChanged"));
  537.       }
  538.       
  539.       public function set nullItemRenderer(param1:IFactory) : void
  540.       {
  541.          _nullItemRenderer = param1;
  542.          invalidateSize();
  543.          invalidateDisplayList();
  544.          itemsSizeChanged = true;
  545.          rendererChanged = true;
  546.          dispatchEvent(new Event("nullItemRendererChanged"));
  547.       }
  548.       
  549.       protected function moveIndicatorsHorizontally(param1:String, param2:Number) : void
  550.       {
  551.          if(param1 != null)
  552.          {
  553.             if(selectionIndicators[param1])
  554.             {
  555.                selectionIndicators[param1].x += param2;
  556.             }
  557.             if(highlightUID == param1)
  558.             {
  559.                highlightIndicator.x += param2;
  560.             }
  561.             if(caretUID == param1)
  562.             {
  563.                caretIndicator.x += param2;
  564.             }
  565.          }
  566.       }
  567.       
  568.       private function seekPreviousSafely(param1:IViewCursor, param2:int) : Boolean
  569.       {
  570.          var iterator:IViewCursor = param1;
  571.          var pos:int = param2;
  572.          try
  573.          {
  574.             iterator.movePrevious();
  575.          }
  576.          catch(e:ItemPendingError)
  577.          {
  578.             lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,pos);
  579.             e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  580.             iteratorValid = false;
  581.          }
  582.          return iteratorValid;
  583.       }
  584.       
  585.       public function measureHeightOfItems(param1:int = -1, param2:int = 0) : Number
  586.       {
  587.          return NaN;
  588.       }
  589.       
  590.       [Bindable("valueCommit")]
  591.       [Bindable("change")]
  592.       public function get selectedItem() : Object
  593.       {
  594.          return _selectedItem;
  595.       }
  596.       
  597.       protected function mouseMoveHandler(param1:MouseEvent) : void
  598.       {
  599.          var _loc2_:Point = null;
  600.          var _loc3_:IListItemRenderer = null;
  601.          var _loc4_:DragEvent = null;
  602.          var _loc5_:BaseListData = null;
  603.          if(!enabled || !selectable)
  604.          {
  605.             return;
  606.          }
  607.          _loc2_ = new Point(param1.localX,param1.localY);
  608.          _loc2_ = DisplayObject(param1.target).localToGlobal(_loc2_);
  609.          _loc2_ = globalToLocal(_loc2_);
  610.          if(mx_internal::isPressed && mouseDownPoint && (Math.abs(mouseDownPoint.x - _loc2_.x) > mx_internal::DRAG_THRESHOLD || Math.abs(mouseDownPoint.y - _loc2_.y) > mx_internal::DRAG_THRESHOLD))
  611.          {
  612.             if(dragEnabled && !DragManager.isDragging && Boolean(mouseDownPoint))
  613.             {
  614.                _loc4_ = new DragEvent(DragEvent.DRAG_START);
  615.                _loc4_.dragInitiator = this;
  616.                _loc4_.localX = mouseDownPoint.x;
  617.                _loc4_.localY = mouseDownPoint.y;
  618.                _loc4_.buttonDown = true;
  619.                dispatchEvent(_loc4_);
  620.             }
  621.          }
  622.          _loc3_ = mouseEventToItemRenderer(param1);
  623.          if(Boolean(_loc3_) && Boolean(highlightItemRenderer))
  624.          {
  625.             _loc5_ = rowMap[_loc3_.name];
  626.             if(highlightItemRenderer && highlightUID && _loc5_.uid != highlightUID)
  627.             {
  628.                if(!mx_internal::isPressed)
  629.                {
  630.                   if(getStyle("useRollOver") && highlightItemRenderer.data != null)
  631.                   {
  632.                      mx_internal::clearHighlight(highlightItemRenderer);
  633.                   }
  634.                }
  635.             }
  636.          }
  637.          else if(!_loc3_ && Boolean(highlightItemRenderer))
  638.          {
  639.             if(!mx_internal::isPressed)
  640.             {
  641.                if(getStyle("useRollOver") && Boolean(highlightItemRenderer.data))
  642.                {
  643.                   mx_internal::clearHighlight(highlightItemRenderer);
  644.                }
  645.             }
  646.          }
  647.          if(Boolean(_loc3_) && !highlightItemRenderer)
  648.          {
  649.             mouseOverHandler(param1);
  650.          }
  651.       }
  652.       
  653.       public function get selectable() : Boolean
  654.       {
  655.          return _selectable;
  656.       }
  657.       
  658.       protected function seekPendingFailureHandler(param1:Object, param2:ListBaseSeekPending) : void
  659.       {
  660.       }
  661.       
  662.       override public function set verticalScrollPosition(param1:Number) : void
  663.       {
  664.          var _loc5_:int = 0;
  665.          var _loc6_:* = false;
  666.          if(listItems.length == 0 || !dataProvider || !isNaN(verticalScrollPositionPending))
  667.          {
  668.             verticalScrollPositionPending = param1;
  669.             if(dataProvider)
  670.             {
  671.                invalidateDisplayList();
  672.             }
  673.             return;
  674.          }
  675.          verticalScrollPositionPending = NaN;
  676.          var _loc2_:int = super.verticalScrollPosition;
  677.          super.verticalScrollPosition = param1;
  678.          mx_internal::removeClipMask();
  679.          var _loc3_:int = offscreenExtraRowsTop;
  680.          var _loc4_:int = offscreenExtraRowsBottom;
  681.          if(_loc2_ != param1)
  682.          {
  683.             _loc5_ = param1 - _loc2_;
  684.             _loc6_ = _loc5_ > 0;
  685.             _loc5_ = Math.abs(_loc5_);
  686.             if(_loc5_ >= rowInfo.length - offscreenExtraRows || !iteratorValid)
  687.             {
  688.                clearIndicators();
  689.                clearVisibleData();
  690.                makeRowsAndColumnsWithExtraRows(oldUnscaledWidth,oldUnscaledHeight);
  691.             }
  692.             else
  693.             {
  694.                scrollVertically(param1,_loc5_,_loc6_);
  695.                adjustListContent(oldUnscaledWidth,oldUnscaledHeight);
  696.             }
  697.             if(variableRowHeight)
  698.             {
  699.                configureScrollBars();
  700.             }
  701.             drawRowBackgrounds();
  702.          }
  703.          mx_internal::addClipMask(offscreenExtraRowsTop != _loc3_ || offscreenExtraRowsBottom != _loc4_);
  704.       }
  705.       
  706.       [Bindable("viewChanged")]
  707.       [Bindable("scroll")]
  708.       override public function get horizontalScrollPosition() : Number
  709.       {
  710.          if(!isNaN(horizontalScrollPositionPending))
  711.          {
  712.             return horizontalScrollPositionPending;
  713.          }
  714.          return super.horizontalScrollPosition;
  715.       }
  716.       
  717.       protected function itemRendererToIndices(param1:IListItemRenderer) : Point
  718.       {
  719.          if(!param1 || !(param1.name in rowMap))
  720.          {
  721.             return null;
  722.          }
  723.          var _loc2_:int = int(rowMap[param1.name].rowIndex);
  724.          var _loc3_:int = int(listItems[_loc2_].length);
  725.          var _loc4_:int = 0;
  726.          while(_loc4_ < _loc3_)
  727.          {
  728.             if(listItems[_loc2_][_loc4_] == param1)
  729.             {
  730.                break;
  731.             }
  732.             _loc4_++;
  733.          }
  734.          return new Point(_loc4_ + horizontalScrollPosition,_loc2_ + verticalScrollPosition + offscreenExtraRowsTop);
  735.       }
  736.       
  737.       private function reduceRows(param1:int) : void
  738.       {
  739.          var _loc2_:int = 0;
  740.          var _loc3_:int = 0;
  741.          var _loc4_:String = null;
  742.          while(param1 >= 0)
  743.          {
  744.             if(rowInfo[param1].y < listContent.height)
  745.             {
  746.                break;
  747.             }
  748.             _loc2_ = int(listItems[param1].length);
  749.             _loc3_ = 0;
  750.             while(_loc3_ < _loc2_)
  751.             {
  752.                addToFreeItemRenderers(listItems[param1][_loc3_]);
  753.                _loc3_++;
  754.             }
  755.             _loc4_ = rowInfo[param1].uid;
  756.             delete visibleData[_loc4_];
  757.             removeIndicators(_loc4_);
  758.             listItems.pop();
  759.             rowInfo.pop();
  760.             param1--;
  761.          }
  762.       }
  763.       
  764.       public function get dragMoveEnabled() : Boolean
  765.       {
  766.          return _dragMoveEnabled;
  767.       }
  768.       
  769.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  770.       {
  771.          var _loc2_:IListItemRenderer = null;
  772.          var _loc3_:Point = null;
  773.          var _loc4_:ListEvent = null;
  774.          if(!selectable)
  775.          {
  776.             return;
  777.          }
  778.          if(!iteratorValid)
  779.          {
  780.             return;
  781.          }
  782.          if(!collection || collection.length == 0)
  783.          {
  784.             return;
  785.          }
  786.          switch(param1.keyCode)
  787.          {
  788.             case Keyboard.UP:
  789.             case Keyboard.DOWN:
  790.                moveSelectionVertically(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  791.                param1.stopPropagation();
  792.                break;
  793.             case Keyboard.LEFT:
  794.             case Keyboard.RIGHT:
  795.                moveSelectionHorizontally(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  796.                param1.stopPropagation();
  797.                break;
  798.             case Keyboard.END:
  799.             case Keyboard.HOME:
  800.             case Keyboard.PAGE_UP:
  801.             case Keyboard.PAGE_DOWN:
  802.                moveSelectionVertically(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  803.                param1.stopPropagation();
  804.                break;
  805.             case Keyboard.SPACE:
  806.                if(caretIndex != -1 && caretIndex - verticalScrollPosition >= 0 && caretIndex - verticalScrollPosition < listItems.length)
  807.                {
  808.                   _loc2_ = listItems[caretIndex - verticalScrollPosition][0];
  809.                   if(selectItem(_loc2_,param1.shiftKey,param1.ctrlKey))
  810.                   {
  811.                      _loc3_ = itemRendererToIndices(_loc2_);
  812.                      _loc4_ = new ListEvent(ListEvent.CHANGE);
  813.                      if(_loc3_)
  814.                      {
  815.                         _loc4_.columnIndex = _loc3_.x;
  816.                         _loc4_.rowIndex = _loc3_.y;
  817.                      }
  818.                      _loc4_.itemRenderer = _loc2_;
  819.                      dispatchEvent(_loc4_);
  820.                   }
  821.                }
  822.                break;
  823.             default:
  824.                if(findKey(param1.charCode))
  825.                {
  826.                   param1.stopPropagation();
  827.                }
  828.          }
  829.       }
  830.       
  831.       protected function reKeyVisibleData() : void
  832.       {
  833.          var _loc2_:Object = null;
  834.          var _loc1_:Object = {};
  835.          for each(_loc2_ in visibleData)
  836.          {
  837.             if(_loc2_.data)
  838.             {
  839.                _loc1_[itemToUID(_loc2_.data)] = _loc2_;
  840.             }
  841.          }
  842.          listContent.visibleData = _loc1_;
  843.       }
  844.       
  845.       protected function copySelectedItems(param1:Boolean = true) : Array
  846.       {
  847.          var _loc2_:Array = [];
  848.          var _loc3_:ListBaseSelectionData = firstSelectionData;
  849.          while(_loc3_ != null)
  850.          {
  851.             if(param1)
  852.             {
  853.                _loc2_.push(_loc3_.data);
  854.             }
  855.             else
  856.             {
  857.                _loc2_.push(_loc3_.index);
  858.             }
  859.             _loc3_ = _loc3_.mx_internal::nextSelectionData;
  860.          }
  861.          return _loc2_;
  862.       }
  863.       
  864.       public function invalidateList() : void
  865.       {
  866.          itemsSizeChanged = true;
  867.          invalidateDisplayList();
  868.       }
  869.       
  870.       protected function moveIndicatorsVertically(param1:String, param2:Number) : void
  871.       {
  872.          if(param1 != null)
  873.          {
  874.             if(selectionIndicators[param1])
  875.             {
  876.                selectionIndicators[param1].y += param2;
  877.             }
  878.             if(highlightUID == param1)
  879.             {
  880.                highlightIndicator.y += param2;
  881.             }
  882.             if(caretUID == param1)
  883.             {
  884.                caretIndicator.y += param2;
  885.             }
  886.          }
  887.       }
  888.       
  889.       public function indexToItemRenderer(param1:int) : IListItemRenderer
  890.       {
  891.          var _loc2_:int = verticalScrollPosition - offscreenExtraRowsTop;
  892.          if(param1 < _loc2_ || param1 >= _loc2_ + listItems.length)
  893.          {
  894.             return null;
  895.          }
  896.          return listItems[param1 - _loc2_][0];
  897.       }
  898.       
  899.       protected function get dragImage() : IUIComponent
  900.       {
  901.          var _loc1_:ListItemDragProxy = new ListItemDragProxy();
  902.          _loc1_.owner = this;
  903.          _loc1_.moduleFactory = moduleFactory;
  904.          return _loc1_;
  905.       }
  906.       
  907.       protected function copyItemWithUID(param1:Object) : Object
  908.       {
  909.          var _loc2_:Object = null;
  910.          _loc2_ = ObjectUtil.copy(param1);
  911.          if(_loc2_ is IUID)
  912.          {
  913.             IUID(_loc2_).uid = UIDUtil.createUID();
  914.          }
  915.          else if(_loc2_ is Object && "mx_internal_uid" in _loc2_)
  916.          {
  917.             _loc2_.mx_internal_uid = UIDUtil.createUID();
  918.          }
  919.          return _loc2_;
  920.       }
  921.       
  922.       [Bindable("valueCommit")]
  923.       [Bindable("change")]
  924.       public function get selectedIndices() : Array
  925.       {
  926.          if(bSelectedIndicesChanged)
  927.          {
  928.             return _selectedIndices;
  929.          }
  930.          return copySelectedItems(false);
  931.       }
  932.       
  933.       public function get variableRowHeight() : Boolean
  934.       {
  935.          return _variableRowHeight;
  936.       }
  937.       
  938.       protected function mouseDoubleClickHandler(param1:MouseEvent) : void
  939.       {
  940.          var _loc2_:IListItemRenderer = null;
  941.          var _loc3_:Point = null;
  942.          var _loc4_:ListEvent = null;
  943.          _loc2_ = mouseEventToItemRenderer(param1);
  944.          if(!_loc2_)
  945.          {
  946.             return;
  947.          }
  948.          _loc3_ = itemRendererToIndices(_loc2_);
  949.          if(_loc3_)
  950.          {
  951.             _loc4_ = new ListEvent(ListEvent.ITEM_DOUBLE_CLICK);
  952.             _loc4_.columnIndex = _loc3_.x;
  953.             _loc4_.rowIndex = _loc3_.y;
  954.             _loc4_.itemRenderer = _loc2_;
  955.             dispatchEvent(_loc4_);
  956.          }
  957.       }
  958.       
  959.       mx_internal function selectionDataPendingResultHandler(param1:Object, param2:ListBaseSelectionDataPending) : void
  960.       {
  961.          if(param2.bookmark)
  962.          {
  963.             mx_internal::collectionIterator.seek(param2.bookmark,param2.offset);
  964.          }
  965.          setSelectionDataLoop(param2.items,param2.index,param2.useFind);
  966.       }
  967.       
  968.       public function set selectedItem(param1:Object) : void
  969.       {
  970.          if(!collection || collection.length == 0)
  971.          {
  972.             _selectedItem = param1;
  973.             bSelectedItemChanged = true;
  974.             mx_internal::bSelectionChanged = true;
  975.             invalidateDisplayList();
  976.             return;
  977.          }
  978.          commitSelectedItem(param1);
  979.       }
  980.       
  981.       private function adjustScrollPosition() : void
  982.       {
  983.          var _loc2_:Number = NaN;
  984.          var _loc3_:Number = NaN;
  985.          var _loc4_:int = 0;
  986.          var _loc1_:Boolean = false;
  987.          if(!isNaN(horizontalScrollPositionPending))
  988.          {
  989.             _loc1_ = true;
  990.             _loc2_ = Math.min(horizontalScrollPositionPending,maxHorizontalScrollPosition);
  991.             horizontalScrollPositionPending = NaN;
  992.             super.horizontalScrollPosition = _loc2_;
  993.          }
  994.          if(!isNaN(verticalScrollPositionPending))
  995.          {
  996.             _loc1_ = true;
  997.             _loc3_ = Math.min(verticalScrollPositionPending,maxVerticalScrollPosition);
  998.             verticalScrollPositionPending = NaN;
  999.             super.verticalScrollPosition = _loc3_;
  1000.          }
  1001.          if(_loc1_)
  1002.          {
  1003.             _loc4_ = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition - offscreenExtraRowsTop);
  1004.             seekPositionSafely(_loc4_);
  1005.          }
  1006.       }
  1007.       
  1008.       protected function itemToUID(param1:Object) : String
  1009.       {
  1010.          if(param1 == null)
  1011.          {
  1012.             return "null";
  1013.          }
  1014.          return UIDUtil.getUID(param1);
  1015.       }
  1016.       
  1017.       protected function dragEnterHandler(param1:DragEvent) : void
  1018.       {
  1019.          if(param1.isDefaultPrevented())
  1020.          {
  1021.             return;
  1022.          }
  1023.          mx_internal::lastDragEvent = param1;
  1024.          if(enabled && iteratorValid && param1.dragSource.hasFormat("items"))
  1025.          {
  1026.             DragManager.acceptDragDrop(this);
  1027.             DragManager.showFeedback(param1.ctrlKey ? DragManager.COPY : DragManager.MOVE);
  1028.             showDropFeedback(param1);
  1029.             return;
  1030.          }
  1031.          hideDropFeedback(param1);
  1032.          DragManager.showFeedback(DragManager.NONE);
  1033.       }
  1034.       
  1035.       protected function indexToColumn(param1:int) : int
  1036.       {
  1037.          return 0;
  1038.       }
  1039.       
  1040.       public function set selectable(param1:Boolean) : void
  1041.       {
  1042.          _selectable = param1;
  1043.       }
  1044.       
  1045.       protected function moveRowVertically(param1:int, param2:int, param3:Number) : void
  1046.       {
  1047.          var _loc4_:IListItemRenderer = null;
  1048.          var _loc5_:int = 0;
  1049.          while(_loc5_ < param2)
  1050.          {
  1051.             _loc4_ = listItems[param1][_loc5_];
  1052.             _loc4_.move(_loc4_.x,_loc4_.y + param3);
  1053.             _loc5_++;
  1054.          }
  1055.          rowInfo[param1].y += param3;
  1056.       }
  1057.       
  1058.       override public function set horizontalScrollPosition(param1:Number) : void
  1059.       {
  1060.          var _loc3_:int = 0;
  1061.          var _loc4_:* = false;
  1062.          if(listItems.length == 0 || !dataProvider || !isNaN(horizontalScrollPositionPending))
  1063.          {
  1064.             horizontalScrollPositionPending = param1;
  1065.             if(dataProvider)
  1066.             {
  1067.                invalidateDisplayList();
  1068.             }
  1069.             return;
  1070.          }
  1071.          horizontalScrollPositionPending = NaN;
  1072.          var _loc2_:int = super.horizontalScrollPosition;
  1073.          super.horizontalScrollPosition = param1;
  1074.          mx_internal::removeClipMask();
  1075.          if(_loc2_ != param1)
  1076.          {
  1077.             if(itemsSizeChanged)
  1078.             {
  1079.                return;
  1080.             }
  1081.             _loc3_ = param1 - _loc2_;
  1082.             _loc4_ = _loc3_ > 0;
  1083.             _loc3_ = Math.abs(_loc3_);
  1084.             if(mx_internal::bColumnScrolling && _loc3_ >= columnCount)
  1085.             {
  1086.                clearIndicators();
  1087.                clearVisibleData();
  1088.                makeRowsAndColumnsWithExtraColumns(oldUnscaledWidth,oldUnscaledHeight);
  1089.                drawRowBackgrounds();
  1090.             }
  1091.             else
  1092.             {
  1093.                scrollHorizontally(param1,_loc3_,_loc4_);
  1094.             }
  1095.          }
  1096.          mx_internal::addClipMask(false);
  1097.       }
  1098.       
  1099.       public function set dragMoveEnabled(param1:Boolean) : void
  1100.       {
  1101.          _dragMoveEnabled = param1;
  1102.       }
  1103.       
  1104.       public function isItemHighlighted(param1:Object) : Boolean
  1105.       {
  1106.          if(param1 == null)
  1107.          {
  1108.             return false;
  1109.          }
  1110.          var _loc2_:Boolean = Boolean(highlightIndicator) && highlightIndicator.parent.getChildIndex(highlightIndicator) != highlightIndicator.parent.numChildren - 1;
  1111.          if(param1 is String)
  1112.          {
  1113.             return param1 == highlightUID && !_loc2_;
  1114.          }
  1115.          return itemToUID(param1) == highlightUID && !_loc2_;
  1116.       }
  1117.       
  1118.       override protected function mouseWheelHandler(param1:MouseEvent) : void
  1119.       {
  1120.          var _loc2_:Number = NaN;
  1121.          var _loc3_:int = 0;
  1122.          var _loc4_:ScrollEvent = null;
  1123.          if(Boolean(verticalScrollBar) && verticalScrollBar.visible)
  1124.          {
  1125.             param1.stopPropagation();
  1126.             _loc2_ = verticalScrollPosition;
  1127.             _loc3_ = verticalScrollPosition;
  1128.             _loc3_ -= param1.delta * verticalScrollBar.lineScrollSize;
  1129.             _loc3_ = Math.max(0,Math.min(_loc3_,verticalScrollBar.maxScrollPosition));
  1130.             verticalScrollPosition = _loc3_;
  1131.             if(_loc2_ != verticalScrollPosition)
  1132.             {
  1133.                _loc4_ = new ScrollEvent(ScrollEvent.SCROLL);
  1134.                _loc4_.direction = ScrollEventDirection.VERTICAL;
  1135.                _loc4_.position = verticalScrollPosition;
  1136.                _loc4_.delta = verticalScrollPosition - _loc2_;
  1137.                dispatchEvent(_loc4_);
  1138.             }
  1139.          }
  1140.       }
  1141.       
  1142.       protected function restoreRowArrays(param1:int) : void
  1143.       {
  1144.          rowInfo.splice(0,param1);
  1145.          listItems.splice(0,param1);
  1146.       }
  1147.       
  1148.       public function set labelField(param1:String) : void
  1149.       {
  1150.          _labelField = param1;
  1151.          itemsSizeChanged = true;
  1152.          invalidateDisplayList();
  1153.          dispatchEvent(new Event("labelFieldChanged"));
  1154.       }
  1155.       
  1156.       private function seekPositionIgnoreError(param1:IViewCursor, param2:CursorBookmark) : void
  1157.       {
  1158.          var iterator:IViewCursor = param1;
  1159.          var cursorPos:CursorBookmark = param2;
  1160.          if(iterator)
  1161.          {
  1162.             try
  1163.             {
  1164.                iterator.seek(cursorPos,0);
  1165.             }
  1166.             catch(e:ItemPendingError)
  1167.             {
  1168.             }
  1169.          }
  1170.       }
  1171.       
  1172.       protected function finishDataChangeEffect(param1:EffectEvent) : void
  1173.       {
  1174.          collection = actualCollection;
  1175.          actualCollection = null;
  1176.          modifiedCollectionView = null;
  1177.          listContent.iterator = iterator = actualIterator;
  1178.          runningDataEffect = false;
  1179.          unconstrainedRenderers = new Dictionary();
  1180.          terminateSelectionTracking();
  1181.          reKeyVisibleData();
  1182.          var _loc2_:int = scrollPositionToIndex(horizontalScrollPosition - offscreenExtraColumnsLeft,verticalScrollPosition - offscreenExtraRowsTop);
  1183.          iterator.seek(CursorBookmark.FIRST,_loc2_);
  1184.          callLater(cleanupAfterDataChangeEffect);
  1185.       }
  1186.       
  1187.       public function set offscreenExtraRowsOrColumns(param1:int) : void
  1188.       {
  1189.          param1 = Math.max(param1,0);
  1190.          if(param1 % 2)
  1191.          {
  1192.             param1++;
  1193.          }
  1194.          if(_offscreenExtraRowsOrColumns == param1)
  1195.          {
  1196.             return;
  1197.          }
  1198.          _offscreenExtraRowsOrColumns = param1;
  1199.          offscreenExtraRowsOrColumnsChanged = true;
  1200.          invalidateProperties();
  1201.       }
  1202.       
  1203.       mx_internal function clearHighlight(param1:IListItemRenderer) : void
  1204.       {
  1205.          var _loc4_:ListEvent = null;
  1206.          var _loc2_:String = itemToUID(param1.data);
  1207.          drawItem(UIDToItemRenderer(_loc2_),isItemSelected(param1.data),false,_loc2_ == caretUID);
  1208.          var _loc3_:Point = itemRendererToIndices(param1);
  1209.          if(Boolean(_loc3_) && Boolean(lastHighlightItemIndices))
  1210.          {
  1211.             _loc4_ = new ListEvent(ListEvent.ITEM_ROLL_OUT);
  1212.             _loc4_.columnIndex = lastHighlightItemIndices.x;
  1213.             _loc4_.rowIndex = lastHighlightItemIndices.y;
  1214.             _loc4_.itemRenderer = mx_internal::lastHighlightItemRendererAtIndices;
  1215.             dispatchEvent(_loc4_);
  1216.             lastHighlightItemIndices = null;
  1217.          }
  1218.       }
  1219.       
  1220.       public function set wordWrap(param1:Boolean) : void
  1221.       {
  1222.          if(param1 == _wordWrap)
  1223.          {
  1224.             return;
  1225.          }
  1226.          _wordWrap = param1;
  1227.          wordWrapChanged = true;
  1228.          itemsSizeChanged = true;
  1229.          invalidateDisplayList();
  1230.          dispatchEvent(new Event("wordWrapChanged"));
  1231.       }
  1232.       
  1233.       private function shiftSelectionLoop(param1:Boolean, param2:int, param3:Object, param4:Boolean, param5:CursorBookmark) : void
  1234.       {
  1235.          var data:Object = null;
  1236.          var uid:String = null;
  1237.          var incr:Boolean = param1;
  1238.          var index:int = param2;
  1239.          var stopData:Object = param3;
  1240.          var transition:Boolean = param4;
  1241.          var placeHolder:CursorBookmark = param5;
  1242.          try
  1243.          {
  1244.             do
  1245.             {
  1246.                data = iterator.current;
  1247.                uid = itemToUID(data);
  1248.                insertSelectionDataBefore(uid,new ListBaseSelectionData(data,index,approximate),firstSelectionData);
  1249.                if(UIDToItemRenderer(uid))
  1250.                {
  1251.                   drawItem(UIDToItemRenderer(uid),true,uid == highlightUID,false,transition);
  1252.                }
  1253.                if(data === stopData)
  1254.                {
  1255.                   if(UIDToItemRenderer(uid))
  1256.                   {
  1257.                      drawItem(UIDToItemRenderer(uid),true,uid == highlightUID,true,transition);
  1258.                   }
  1259.                   break;
  1260.                }
  1261.                if(incr)
  1262.                {
  1263.                   index++;
  1264.                }
  1265.                else
  1266.                {
  1267.                   index--;
  1268.                }
  1269.             }
  1270.             while(incr ? iterator.moveNext() : iterator.movePrevious());
  1271.             
  1272.          }
  1273.          catch(e:ItemPendingError)
  1274.          {
  1275.             e.addResponder(new ItemResponder(selectionPendingResultHandler,selectionPendingFailureHandler,new ListBaseSelectionPending(incr,index,stopData,transition,placeHolder,CursorBookmark.CURRENT,0)));
  1276.             iteratorValid = false;
  1277.          }
  1278.          try
  1279.          {
  1280.             iterator.seek(placeHolder,0);
  1281.             if(!iteratorValid)
  1282.             {
  1283.                iteratorValid = true;
  1284.                lastSeekPending = null;
  1285.             }
  1286.          }
  1287.          catch(e2:ItemPendingError)
  1288.          {
  1289.             lastSeekPending = new ListBaseSeekPending(placeHolder,0);
  1290.             e2.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  1291.          }
  1292.       }
  1293.       
  1294.       protected function clearHighlightIndicator(param1:Sprite, param2:IListItemRenderer) : void
  1295.       {
  1296.          if(highlightIndicator)
  1297.          {
  1298.             Sprite(highlightIndicator).graphics.clear();
  1299.          }
  1300.       }
  1301.       
  1302.       protected function truncateRowArrays(param1:int) : void
  1303.       {
  1304.          listItems.splice(param1);
  1305.          rowInfo.splice(param1);
  1306.       }
  1307.       
  1308.       public function get itemRenderer() : IFactory
  1309.       {
  1310.          return _itemRenderer;
  1311.       }
  1312.       
  1313.       protected function seekPositionSafely(param1:int) : Boolean
  1314.       {
  1315.          var index:int = param1;
  1316.          try
  1317.          {
  1318.             iterator.seek(CursorBookmark.FIRST,index);
  1319.             if(!iteratorValid)
  1320.             {
  1321.                iteratorValid = true;
  1322.                lastSeekPending = null;
  1323.             }
  1324.          }
  1325.          catch(e:ItemPendingError)
  1326.          {
  1327.             lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,index);
  1328.             e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  1329.             iteratorValid = false;
  1330.          }
  1331.          return iteratorValid;
  1332.       }
  1333.       
  1334.       mx_internal function set $horizontalScrollPosition(param1:Number) : void
  1335.       {
  1336.          var _loc2_:int = super.horizontalScrollPosition;
  1337.          if(_loc2_ != param1)
  1338.          {
  1339.             super.horizontalScrollPosition = param1;
  1340.          }
  1341.       }
  1342.       
  1343.       protected function applySelectionEffect(param1:Sprite, param2:String, param3:IListItemRenderer) : void
  1344.       {
  1345.          var _loc5_:Function = null;
  1346.          var _loc4_:Number = getStyle("selectionDuration");
  1347.          if(_loc4_ != 0)
  1348.          {
  1349.             param1.alpha = 0;
  1350.             selectionTweens[param2] = new Tween(param1,0,1,_loc4_,5);
  1351.             selectionTweens[param2].addEventListener(TweenEvent.TWEEN_UPDATE,mx_internal::selectionTween_updateHandler);
  1352.             selectionTweens[param2].addEventListener(TweenEvent.TWEEN_END,mx_internal::selectionTween_endHandler);
  1353.             selectionTweens[param2].setTweenHandlers(onSelectionTweenUpdate,onSelectionTweenUpdate);
  1354.             _loc5_ = getStyle("selectionEasingFunction") as Function;
  1355.             if(_loc5_ != null)
  1356.             {
  1357.                selectionTweens[param2].easingFunction = _loc5_;
  1358.             }
  1359.          }
  1360.       }
  1361.       
  1362.       override public function set showInAutomationHierarchy(param1:Boolean) : void
  1363.       {
  1364.       }
  1365.       
  1366.       protected function removeFromRowArrays(param1:int) : void
  1367.       {
  1368.          listItems.splice(param1,1);
  1369.          rowInfo.splice(param1,1);
  1370.       }
  1371.       
  1372.       protected function updateList() : void
  1373.       {
  1374.          mx_internal::removeClipMask();
  1375.          var _loc1_:CursorBookmark = !!iterator ? iterator.bookmark : null;
  1376.          clearIndicators();
  1377.          clearVisibleData();
  1378.          if(iterator)
  1379.          {
  1380.             if(Boolean(offscreenExtraColumns) || Boolean(offscreenExtraColumnsLeft) || Boolean(offscreenExtraColumnsRight))
  1381.             {
  1382.                makeRowsAndColumnsWithExtraColumns(unscaledWidth,unscaledHeight);
  1383.             }
  1384.             else
  1385.             {
  1386.                makeRowsAndColumnsWithExtraRows(unscaledWidth,unscaledHeight);
  1387.             }
  1388.             iterator.seek(_loc1_,0);
  1389.          }
  1390.          else
  1391.          {
  1392.             makeRowsAndColumns(0,0,listContent.width,listContent.height,0,0);
  1393.          }
  1394.          drawRowBackgrounds();
  1395.          configureScrollBars();
  1396.          mx_internal::addClipMask(true);
  1397.       }
  1398.       
  1399.       public function set variableRowHeight(param1:Boolean) : void
  1400.       {
  1401.          _variableRowHeight = param1;
  1402.          itemsSizeChanged = true;
  1403.          invalidateDisplayList();
  1404.          dispatchEvent(new Event("variableRowHeightChanged"));
  1405.       }
  1406.       
  1407.       protected function isRendererUnconstrained(param1:Object) : Boolean
  1408.       {
  1409.          return unconstrainedRenderers[param1] != null;
  1410.       }
  1411.       
  1412.       public function set selectedIndices(param1:Array) : void
  1413.       {
  1414.          if(!collection || collection.length == 0)
  1415.          {
  1416.             _selectedIndices = param1;
  1417.             bSelectedIndicesChanged = true;
  1418.             mx_internal::bSelectionChanged = true;
  1419.             invalidateDisplayList();
  1420.             return;
  1421.          }
  1422.          mx_internal::commitSelectedIndices(param1);
  1423.       }
  1424.       
  1425.       protected function mouseUpHandler(param1:MouseEvent) : void
  1426.       {
  1427.          var _loc2_:IListItemRenderer = null;
  1428.          var _loc3_:Point = null;
  1429.          var _loc4_:ListEvent = null;
  1430.          mouseDownPoint = null;
  1431.          _loc2_ = mouseEventToItemRenderer(param1);
  1432.          _loc3_ = itemRendererToIndices(_loc2_);
  1433.          mouseIsUp();
  1434.          if(!enabled || !selectable)
  1435.          {
  1436.             return;
  1437.          }
  1438.          if(mouseDownItem)
  1439.          {
  1440.             _loc4_ = new ListEvent(ListEvent.CHANGE);
  1441.             _loc4_.itemRenderer = mouseDownItem;
  1442.             _loc3_ = itemRendererToIndices(mouseDownItem);
  1443.             if(_loc3_)
  1444.             {
  1445.                _loc4_.columnIndex = _loc3_.x;
  1446.                _loc4_.rowIndex = _loc3_.y;
  1447.             }
  1448.             dispatchEvent(_loc4_);
  1449.             mouseDownItem = null;
  1450.          }
  1451.          if(!_loc2_ || !hitTestPoint(param1.stageX,param1.stageY))
  1452.          {
  1453.             mx_internal::isPressed = false;
  1454.             return;
  1455.          }
  1456.          if(mx_internal::bSelectOnRelease)
  1457.          {
  1458.             mx_internal::bSelectOnRelease = false;
  1459.             if(selectItem(_loc2_,param1.shiftKey,param1.ctrlKey))
  1460.             {
  1461.                _loc4_ = new ListEvent(ListEvent.CHANGE);
  1462.                _loc4_.itemRenderer = _loc2_;
  1463.                if(_loc3_)
  1464.                {
  1465.                   _loc4_.columnIndex = _loc3_.x;
  1466.                   _loc4_.rowIndex = _loc3_.y;
  1467.                }
  1468.                dispatchEvent(_loc4_);
  1469.             }
  1470.          }
  1471.          mx_internal::isPressed = false;
  1472.       }
  1473.       
  1474.       public function get allowMultipleSelection() : Boolean
  1475.       {
  1476.          return _allowMultipleSelection;
  1477.       }
  1478.       
  1479.       public function itemToItemRenderer(param1:Object) : IListItemRenderer
  1480.       {
  1481.          return UIDToItemRenderer(itemToUID(param1));
  1482.       }
  1483.       
  1484.       public function isItemSelected(param1:Object) : Boolean
  1485.       {
  1486.          if(param1 == null)
  1487.          {
  1488.             return false;
  1489.          }
  1490.          if(param1 is String)
  1491.          {
  1492.             return selectedData[param1] != undefined;
  1493.          }
  1494.          return selectedData[itemToUID(param1)] != undefined;
  1495.       }
  1496.       
  1497.       protected function dragScroll() : void
  1498.       {
  1499.          var _loc2_:Number = NaN;
  1500.          var _loc3_:Number = NaN;
  1501.          var _loc4_:Number = NaN;
  1502.          var _loc5_:ScrollEvent = null;
  1503.          var _loc1_:Number = 0;
  1504.          if(mx_internal::dragScrollingInterval == 0)
  1505.          {
  1506.             return;
  1507.          }
  1508.          var _loc6_:Number = 30;
  1509.          _loc3_ = verticalScrollPosition;
  1510.          if(DragManager.isDragging)
  1511.          {
  1512.             _loc1_ = viewMetrics.top + (variableRowHeight ? getStyle("fontSize") / 4 : rowHeight);
  1513.          }
  1514.          clearInterval(mx_internal::dragScrollingInterval);
  1515.          if(mouseY < _loc1_)
  1516.          {
  1517.             verticalScrollPosition = Math.max(0,_loc3_ - 1);
  1518.             if(DragManager.isDragging)
  1519.             {
  1520.                _loc2_ = 100;
  1521.             }
  1522.             else
  1523.             {
  1524.                _loc4_ = Math.min(0 - mouseY - 30,0);
  1525.                _loc2_ = 0.593 * _loc4_ * _loc4_ + 1 + _loc6_;
  1526.             }
  1527.             mx_internal::dragScrollingInterval = setInterval(dragScroll,_loc2_);
  1528.             if(_loc3_ != verticalScrollPosition)
  1529.             {
  1530.                _loc5_ = new ScrollEvent(ScrollEvent.SCROLL);
  1531.                _loc5_.detail = ScrollEventDetail.THUMB_POSITION;
  1532.                _loc5_.direction = ScrollEventDirection.VERTICAL;
  1533.                _loc5_.position = verticalScrollPosition;
  1534.                _loc5_.delta = verticalScrollPosition - _loc3_;
  1535.                dispatchEvent(_loc5_);
  1536.             }
  1537.          }
  1538.          else if(mouseY > unscaledHeight - _loc1_)
  1539.          {
  1540.             verticalScrollPosition = Math.min(maxVerticalScrollPosition,verticalScrollPosition + 1);
  1541.             if(DragManager.isDragging)
  1542.             {
  1543.                _loc2_ = 100;
  1544.             }
  1545.             else
  1546.             {
  1547.                _loc4_ = Math.min(mouseY - unscaledHeight - 30,0);
  1548.                _loc2_ = 0.593 * _loc4_ * _loc4_ + 1 + _loc6_;
  1549.             }
  1550.             mx_internal::dragScrollingInterval = setInterval(dragScroll,_loc2_);
  1551.             if(_loc3_ != verticalScrollPosition)
  1552.             {
  1553.                _loc5_ = new ScrollEvent(ScrollEvent.SCROLL);
  1554.                _loc5_.detail = ScrollEventDetail.THUMB_POSITION;
  1555.                _loc5_.direction = ScrollEventDirection.VERTICAL;
  1556.                _loc5_.position = verticalScrollPosition;
  1557.                _loc5_.delta = verticalScrollPosition - _loc3_;
  1558.                dispatchEvent(_loc5_);
  1559.             }
  1560.          }
  1561.          else
  1562.          {
  1563.             mx_internal::dragScrollingInterval = setInterval(dragScroll,15);
  1564.          }
  1565.          if(DragManager.isDragging && mx_internal::lastDragEvent && _loc3_ != verticalScrollPosition)
  1566.          {
  1567.             dragOverHandler(mx_internal::lastDragEvent);
  1568.          }
  1569.       }
  1570.       
  1571.       protected function moveSelectionHorizontally(param1:uint, param2:Boolean, param3:Boolean) : void
  1572.       {
  1573.       }
  1574.       
  1575.       private function findStringLoop(param1:String, param2:CursorBookmark, param3:int, param4:int) : Boolean
  1576.       {
  1577.          var itmStr:String = null;
  1578.          var item:IListItemRenderer = null;
  1579.          var pt:Point = null;
  1580.          var evt:ListEvent = null;
  1581.          var more:Boolean = false;
  1582.          var str:String = param1;
  1583.          var cursorPos:CursorBookmark = param2;
  1584.          var i:int = param3;
  1585.          var stopIndex:int = param4;
  1586.          while(i != stopIndex)
  1587.          {
  1588.             itmStr = itemToLabel(iterator.current);
  1589.             itmStr = itmStr.substring(0,str.length);
  1590.             if(str == itmStr || str.toUpperCase() == itmStr.toUpperCase())
  1591.             {
  1592.                iterator.seek(cursorPos,0);
  1593.                scrollToIndex(i);
  1594.                mx_internal::commitSelectedIndex(i);
  1595.                item = indexToItemRenderer(i);
  1596.                pt = itemRendererToIndices(item);
  1597.                evt = new ListEvent(ListEvent.CHANGE);
  1598.                evt.itemRenderer = item;
  1599.                if(pt)
  1600.                {
  1601.                   evt.columnIndex = pt.x;
  1602.                   evt.rowIndex = pt.y;
  1603.                }
  1604.                dispatchEvent(evt);
  1605.                return true;
  1606.             }
  1607.             more = iterator.moveNext();
  1608.             if(!more && stopIndex != collection.length)
  1609.             {
  1610.                i = -1;
  1611.                iterator.seek(CursorBookmark.FIRST,0);
  1612.             }
  1613.             i++;
  1614.          }
  1615.          iterator.seek(cursorPos,0);
  1616.          iteratorValid = true;
  1617.          return false;
  1618.       }
  1619.       
  1620.       protected function drawRowBackgrounds() : void
  1621.       {
  1622.       }
  1623.       
  1624.       private function selectionIndicesPendingResultHandler(param1:Object, param2:ListBaseSelectionDataPending) : void
  1625.       {
  1626.          if(param2.bookmark)
  1627.          {
  1628.             iterator.seek(param2.bookmark,param2.offset);
  1629.          }
  1630.          setSelectionIndicesLoop(param2.index,param2.items,param2.useFind);
  1631.       }
  1632.       
  1633.       public function itemRendererContains(param1:IListItemRenderer, param2:DisplayObject) : Boolean
  1634.       {
  1635.          if(!param2)
  1636.          {
  1637.             return false;
  1638.          }
  1639.          if(!param1)
  1640.          {
  1641.             return false;
  1642.          }
  1643.          return param1.owns(param2);
  1644.       }
  1645.       
  1646.       public function removeDataEffectItem(param1:Object) : void
  1647.       {
  1648.          if(modifiedCollectionView)
  1649.          {
  1650.             modifiedCollectionView.removeItem(dataItemWrappersByRenderer[param1]);
  1651.             iterator.seek(CursorBookmark.CURRENT);
  1652.             if(mx_internal::invalidateDisplayListFlag)
  1653.             {
  1654.                callLater(invalidateList);
  1655.             }
  1656.             else
  1657.             {
  1658.                invalidateList();
  1659.             }
  1660.          }
  1661.       }
  1662.       
  1663.       public function itemRendererToIndex(param1:IListItemRenderer) : int
  1664.       {
  1665.          var _loc2_:int = 0;
  1666.          if(param1.name in rowMap)
  1667.          {
  1668.             _loc2_ = int(rowMap[param1.name].rowIndex);
  1669.             return _loc2_ + verticalScrollPosition - offscreenExtraRowsTop;
  1670.          }
  1671.          return int.MIN_VALUE;
  1672.       }
  1673.       
  1674.       override public function set horizontalScrollPolicy(param1:String) : void
  1675.       {
  1676.          super.horizontalScrollPolicy = param1;
  1677.          itemsSizeChanged = true;
  1678.          invalidateDisplayList();
  1679.       }
  1680.       
  1681.       public function get dropEnabled() : Boolean
  1682.       {
  1683.          return _dropEnabled;
  1684.       }
  1685.       
  1686.       private function setSelectionIndicesLoop(param1:int, param2:Array, param3:Boolean = false) : void
  1687.       {
  1688.          var data:Object = null;
  1689.          var uid:String = null;
  1690.          var index:int = param1;
  1691.          var indices:Array = param2;
  1692.          var firstTime:Boolean = param3;
  1693.          while(indices.length)
  1694.          {
  1695.             if(index != indices[0])
  1696.             {
  1697.                try
  1698.                {
  1699.                   mx_internal::collectionIterator.seek(CursorBookmark.CURRENT,indices[0] - index);
  1700.                }
  1701.                catch(e:ItemPendingError)
  1702.                {
  1703.                   e.addResponder(new ItemResponder(selectionIndicesPendingResultHandler,selectionIndicesPendingFailureHandler,new ListBaseSelectionDataPending(firstTime,index,indices,CursorBookmark.CURRENT,indices[0] - index)));
  1704.                   return;
  1705.                }
  1706.             }
  1707.             index = int(indices[0]);
  1708.             indices.shift();
  1709.             data = mx_internal::collectionIterator.current;
  1710.             if(firstTime)
  1711.             {
  1712.                mx_internal::_selectedIndex = index;
  1713.                _selectedItem = data;
  1714.                caretIndex = index;
  1715.                caretBookmark = mx_internal::collectionIterator.bookmark;
  1716.                anchorIndex = index;
  1717.                anchorBookmark = mx_internal::collectionIterator.bookmark;
  1718.                firstTime = false;
  1719.             }
  1720.             uid = itemToUID(data);
  1721.             insertSelectionDataAfter(uid,new ListBaseSelectionData(data,index,false),lastSelectionData);
  1722.             if(UIDToItemRenderer(uid))
  1723.             {
  1724.                drawItem(UIDToItemRenderer(uid),true,uid == highlightUID,caretIndex == index);
  1725.             }
  1726.          }
  1727.          if(initialized)
  1728.          {
  1729.             updateList();
  1730.          }
  1731.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  1732.       }
  1733.       
  1734.       override protected function measure() : void
  1735.       {
  1736.          super.measure();
  1737.          var _loc1_:EdgeMetrics = viewMetrics;
  1738.          var _loc2_:int = explicitColumnCount < 1 ? defaultColumnCount : explicitColumnCount;
  1739.          var _loc3_:int = explicitRowCount < 1 ? defaultRowCount : explicitRowCount;
  1740.          if(!isNaN(explicitRowHeight))
  1741.          {
  1742.             measuredHeight = explicitRowHeight * _loc3_ + _loc1_.top + _loc1_.bottom;
  1743.             measuredMinHeight = explicitRowHeight * Math.min(_loc3_,2) + _loc1_.top + _loc1_.bottom;
  1744.          }
  1745.          else
  1746.          {
  1747.             measuredHeight = rowHeight * _loc3_ + _loc1_.top + _loc1_.bottom;
  1748.             measuredMinHeight = rowHeight * Math.min(_loc3_,2) + _loc1_.top + _loc1_.bottom;
  1749.          }
  1750.          if(!isNaN(explicitColumnWidth))
  1751.          {
  1752.             measuredWidth = explicitColumnWidth * _loc2_ + _loc1_.left + _loc1_.right;
  1753.             measuredMinWidth = explicitColumnWidth * Math.min(_loc2_,1) + _loc1_.left + _loc1_.right;
  1754.          }
  1755.          else
  1756.          {
  1757.             measuredWidth = columnWidth * _loc2_ + _loc1_.left + _loc1_.right;
  1758.             measuredMinWidth = columnWidth * Math.min(_loc2_,1) + _loc1_.left + _loc1_.right;
  1759.          }
  1760.          if(verticalScrollPolicy == ScrollPolicy.AUTO && verticalScrollBar && verticalScrollBar.visible)
  1761.          {
  1762.             measuredWidth -= verticalScrollBar.minWidth;
  1763.             measuredMinWidth -= verticalScrollBar.minWidth;
  1764.          }
  1765.          if(horizontalScrollPolicy == ScrollPolicy.AUTO && horizontalScrollBar && horizontalScrollBar.visible)
  1766.          {
  1767.             measuredHeight -= horizontalScrollBar.minHeight;
  1768.             measuredMinHeight -= horizontalScrollBar.minHeight;
  1769.          }
  1770.       }
  1771.       
  1772.       [Bindable("dataChange")]
  1773.       public function get listData() : BaseListData
  1774.       {
  1775.          return _listData;
  1776.       }
  1777.       
  1778.       private function removeSelectionData(param1:String) : void
  1779.       {
  1780.          var _loc2_:ListBaseSelectionData = selectedData[param1];
  1781.          if(firstSelectionData == _loc2_)
  1782.          {
  1783.             firstSelectionData = _loc2_.mx_internal::nextSelectionData;
  1784.          }
  1785.          if(lastSelectionData == _loc2_)
  1786.          {
  1787.             lastSelectionData = _loc2_.mx_internal::prevSelectionData;
  1788.          }
  1789.          if(_loc2_.mx_internal::prevSelectionData != null)
  1790.          {
  1791.             _loc2_.mx_internal::prevSelectionData.mx_internal::nextSelectionData = _loc2_.mx_internal::nextSelectionData;
  1792.          }
  1793.          if(_loc2_.mx_internal::nextSelectionData != null)
  1794.          {
  1795.             _loc2_.mx_internal::nextSelectionData.mx_internal::prevSelectionData = _loc2_.mx_internal::prevSelectionData;
  1796.          }
  1797.          delete selectedData[param1];
  1798.       }
  1799.       
  1800.       protected function setRowHeight(param1:Number) : void
  1801.       {
  1802.          _rowHeight = param1;
  1803.       }
  1804.       
  1805.       public function indicesToIndex(param1:int, param2:int) : int
  1806.       {
  1807.          return param1 * columnCount + param2;
  1808.       }
  1809.       
  1810.       [Bindable("valueCommit")]
  1811.       [Bindable("change")]
  1812.       public function get value() : Object
  1813.       {
  1814.          var _loc1_:Object = selectedItem;
  1815.          if(!_loc1_)
  1816.          {
  1817.             return null;
  1818.          }
  1819.          if(typeof _loc1_ != "object")
  1820.          {
  1821.             return _loc1_;
  1822.          }
  1823.          return _loc1_.data != null ? _loc1_.data : _loc1_.label;
  1824.       }
  1825.       
  1826.       mx_internal function getRowInfo() : Array
  1827.       {
  1828.          return rowInfo;
  1829.       }
  1830.       
  1831.       private function rendererMoveHandler(param1:MoveEvent) : void
  1832.       {
  1833.          var _loc2_:IListItemRenderer = null;
  1834.          if(!rendererTrackingSuspended)
  1835.          {
  1836.             _loc2_ = param1.currentTarget as IListItemRenderer;
  1837.             drawItem(_loc2_,true);
  1838.          }
  1839.       }
  1840.       
  1841.       protected function calculateDropIndicatorY(param1:Number, param2:int) : Number
  1842.       {
  1843.          var _loc3_:int = 0;
  1844.          var _loc4_:Number = 0;
  1845.          if(param1 && param2 < param1 && Boolean(listItems[param2].length) && Boolean(listItems[param2][0]))
  1846.          {
  1847.             return listItems[param2][0].y - 1;
  1848.          }
  1849.          _loc3_ = 0;
  1850.          while(_loc3_ < param1)
  1851.          {
  1852.             if(!listItems[_loc3_].length)
  1853.             {
  1854.                break;
  1855.             }
  1856.             _loc4_ += rowInfo[_loc3_].height;
  1857.             _loc3_++;
  1858.          }
  1859.          return _loc4_;
  1860.       }
  1861.       
  1862.       protected function clearCaretIndicator(param1:Sprite, param2:IListItemRenderer) : void
  1863.       {
  1864.          if(caretIndicator)
  1865.          {
  1866.             Sprite(caretIndicator).graphics.clear();
  1867.          }
  1868.       }
  1869.       
  1870.       override public function validateDisplayList() : void
  1871.       {
  1872.          var _loc1_:ISystemManager = null;
  1873.          if(mx_internal::invalidateDisplayListFlag)
  1874.          {
  1875.             _loc1_ = parent as ISystemManager;
  1876.             if(_loc1_)
  1877.             {
  1878.                if(_loc1_ == systemManager.topLevelSystemManager && _loc1_.document != this)
  1879.                {
  1880.                   setActualSize(getExplicitOrMeasuredWidth(),getExplicitOrMeasuredHeight());
  1881.                }
  1882.             }
  1883.             if(runDataEffectNextUpdate)
  1884.             {
  1885.                runDataEffectNextUpdate = false;
  1886.                runningDataEffect = true;
  1887.                initiateDataChangeEffect(scaleX == 0 ? 0 : width / scaleX,scaleY == 0 ? 0 : height / scaleY);
  1888.             }
  1889.             else
  1890.             {
  1891.                updateDisplayList(scaleX == 0 ? 0 : width / scaleX,scaleY == 0 ? 0 : height / scaleY);
  1892.             }
  1893.             mx_internal::invalidateDisplayListFlag = false;
  1894.          }
  1895.       }
  1896.       
  1897.       mx_internal function getListVisibleData() : Object
  1898.       {
  1899.          return visibleData;
  1900.       }
  1901.       
  1902.       public function getRendererSemanticValue(param1:Object, param2:String) : Object
  1903.       {
  1904.          return modifiedCollectionView.getSemantics(dataItemWrappersByRenderer[param1]) == param2;
  1905.       }
  1906.       
  1907.       mx_internal function setColumnCount(param1:int) : void
  1908.       {
  1909.          _columnCount = param1;
  1910.       }
  1911.       
  1912.       mx_internal function hasOnlyTextRenderers() : Boolean
  1913.       {
  1914.          if(listItems.length == 0)
  1915.          {
  1916.             return true;
  1917.          }
  1918.          var _loc1_:Array = listItems[listItems.length - 1];
  1919.          var _loc2_:int = int(_loc1_.length);
  1920.          var _loc3_:int = 0;
  1921.          while(_loc3_ < _loc2_)
  1922.          {
  1923.             if(!(_loc1_[_loc3_] is IUITextField))
  1924.             {
  1925.                return false;
  1926.             }
  1927.             _loc3_++;
  1928.          }
  1929.          return true;
  1930.       }
  1931.       
  1932.       protected function sumRowHeights(param1:int, param2:int) : Number
  1933.       {
  1934.          var _loc3_:Number = 0;
  1935.          var _loc4_:int = param1;
  1936.          while(_loc4_ <= param2)
  1937.          {
  1938.             _loc3_ += rowInfo[_loc4_].height;
  1939.             _loc4_++;
  1940.          }
  1941.          return _loc3_;
  1942.       }
  1943.       
  1944.       protected function get rowInfo() : Array
  1945.       {
  1946.          return listContent.rowInfo;
  1947.       }
  1948.       
  1949.       private function selectionPendingFailureHandler(param1:Object, param2:ListBaseSelectionPending) : void
  1950.       {
  1951.       }
  1952.       
  1953.       mx_internal function convertIndexToColumn(param1:int) : int
  1954.       {
  1955.          return indexToColumn(param1);
  1956.       }
  1957.       
  1958.       mx_internal function createItemMask(param1:Number, param2:Number, param3:Number, param4:Number, param5:DisplayObjectContainer = null) : DisplayObject
  1959.       {
  1960.          var _loc6_:Shape = null;
  1961.          var _loc7_:Graphics = null;
  1962.          if(!mx_internal::itemMaskFreeList)
  1963.          {
  1964.             mx_internal::itemMaskFreeList = [];
  1965.          }
  1966.          if(mx_internal::itemMaskFreeList.length > 0)
  1967.          {
  1968.             _loc6_ = mx_internal::itemMaskFreeList.pop();
  1969.             if(_loc6_.width != param3)
  1970.             {
  1971.                _loc6_.width = param3;
  1972.             }
  1973.             if(_loc6_.height != param4)
  1974.             {
  1975.                _loc6_.height = param4;
  1976.             }
  1977.          }
  1978.          else
  1979.          {
  1980.             _loc6_ = new FlexShape();
  1981.             _loc6_.name = "mask";
  1982.             _loc7_ = _loc6_.graphics;
  1983.             _loc7_.beginFill(16777215);
  1984.             _loc7_.drawRect(0,0,param3,param4);
  1985.             _loc7_.endFill();
  1986.             _loc6_.visible = false;
  1987.             if(param5)
  1988.             {
  1989.                param5.addChild(_loc6_);
  1990.             }
  1991.             else
  1992.             {
  1993.                listContent.addChild(_loc6_);
  1994.             }
  1995.          }
  1996.          if(_loc6_.x != param1)
  1997.          {
  1998.             _loc6_.x = param1;
  1999.          }
  2000.          if(_loc6_.y != param2)
  2001.          {
  2002.             _loc6_.y = param2;
  2003.          }
  2004.          return _loc6_;
  2005.       }
  2006.       
  2007.       mx_internal function convertIndexToRow(param1:int) : int
  2008.       {
  2009.          return indexToRow(param1);
  2010.       }
  2011.       
  2012.       protected function get listItems() : Array
  2013.       {
  2014.          return !!listContent ? listContent.listItems : [];
  2015.       }
  2016.       
  2017.       override protected function commitProperties() : void
  2018.       {
  2019.          var _loc1_:int = 0;
  2020.          var _loc2_:int = 0;
  2021.          var _loc3_:int = 0;
  2022.          super.commitProperties();
  2023.          if(Boolean(listContent) && listContent.iterator != iterator)
  2024.          {
  2025.             listContent.iterator = iterator;
  2026.          }
  2027.          if(cachedPaddingTopInvalid)
  2028.          {
  2029.             cachedPaddingTopInvalid = false;
  2030.             mx_internal::cachedPaddingTop = getStyle("paddingTop");
  2031.             itemsSizeChanged = true;
  2032.             invalidateDisplayList();
  2033.          }
  2034.          if(cachedPaddingBottomInvalid)
  2035.          {
  2036.             cachedPaddingBottomInvalid = false;
  2037.             mx_internal::cachedPaddingBottom = getStyle("paddingBottom");
  2038.             itemsSizeChanged = true;
  2039.             invalidateDisplayList();
  2040.          }
  2041.          if(cachedVerticalAlignInvalid)
  2042.          {
  2043.             cachedVerticalAlignInvalid = false;
  2044.             mx_internal::cachedVerticalAlign = getStyle("verticalAlign");
  2045.             itemsSizeChanged = true;
  2046.             invalidateDisplayList();
  2047.          }
  2048.          if(columnCountChanged)
  2049.          {
  2050.             if(_columnCount < 1)
  2051.             {
  2052.                _columnCount = defaultColumnCount;
  2053.             }
  2054.             if(!isNaN(explicitWidth) && isNaN(explicitColumnWidth) && explicitColumnCount > 0)
  2055.             {
  2056.                mx_internal::setColumnWidth((explicitWidth - viewMetrics.left - viewMetrics.right) / columnCount);
  2057.             }
  2058.             columnCountChanged = false;
  2059.          }
  2060.          if(rowCountChanged)
  2061.          {
  2062.             if(_rowCount < 1)
  2063.             {
  2064.                _rowCount = defaultRowCount;
  2065.             }
  2066.             if(!isNaN(explicitHeight) && isNaN(explicitRowHeight) && explicitRowCount > 0)
  2067.             {
  2068.                setRowHeight((explicitHeight - viewMetrics.top - viewMetrics.bottom) / rowCount);
  2069.             }
  2070.             rowCountChanged = false;
  2071.          }
  2072.          if(offscreenExtraRowsOrColumnsChanged)
  2073.          {
  2074.             mx_internal::adjustOffscreenRowsAndColumns();
  2075.             if(iterator)
  2076.             {
  2077.                _loc1_ = Math.min(offscreenExtraColumns / 2,horizontalScrollPosition);
  2078.                _loc2_ = Math.min(offscreenExtraRows / 2,verticalScrollPosition);
  2079.                _loc3_ = scrollPositionToIndex(horizontalScrollPosition - _loc1_,verticalScrollPosition - _loc2_);
  2080.                seekPositionSafely(_loc3_);
  2081.                invalidateList();
  2082.             }
  2083.             offscreenExtraRowsOrColumnsChanged = false;
  2084.          }
  2085.       }
  2086.       
  2087.       protected function setRowCount(param1:int) : void
  2088.       {
  2089.          _rowCount = param1;
  2090.       }
  2091.       
  2092.       public function set labelFunction(param1:Function) : void
  2093.       {
  2094.          _labelFunction = param1;
  2095.          itemsSizeChanged = true;
  2096.          invalidateDisplayList();
  2097.          dispatchEvent(new Event("labelFunctionChanged"));
  2098.       }
  2099.       
  2100.       protected function adjustAfterAdd(param1:Array, param2:int) : Boolean
  2101.       {
  2102.          var length:int = 0;
  2103.          var requiresValueCommit:Boolean = false;
  2104.          var data:ListBaseSelectionData = null;
  2105.          var placeHolder:CursorBookmark = null;
  2106.          var p:String = null;
  2107.          var items:Array = param1;
  2108.          var location:int = param2;
  2109.          length = int(items.length);
  2110.          requiresValueCommit = false;
  2111.          for(p in selectedData)
  2112.          {
  2113.             data = selectedData[p];
  2114.             if(data.index >= location)
  2115.             {
  2116.                data.index += length;
  2117.             }
  2118.          }
  2119.          if(mx_internal::_selectedIndex >= location)
  2120.          {
  2121.             mx_internal::_selectedIndex += length;
  2122.             requiresValueCommit = true;
  2123.          }
  2124.          if(anchorIndex >= location)
  2125.          {
  2126.             anchorIndex += length;
  2127.             placeHolder = iterator.bookmark;
  2128.             try
  2129.             {
  2130.                iterator.seek(CursorBookmark.FIRST,anchorIndex);
  2131.                anchorBookmark = iterator.bookmark;
  2132.             }
  2133.             catch(e:ItemPendingError)
  2134.             {
  2135.                e.addResponder(new ItemResponder(mx_internal::setBookmarkPendingResultHandler,mx_internal::setBookmarkPendingFailureHandler,{
  2136.                   "property":"anchorBookmark",
  2137.                   "value":anchorIndex
  2138.                }));
  2139.             }
  2140.             iterator.seek(placeHolder);
  2141.          }
  2142.          if(caretIndex >= location)
  2143.          {
  2144.             caretIndex += length;
  2145.             placeHolder = iterator.bookmark;
  2146.             try
  2147.             {
  2148.                iterator.seek(CursorBookmark.FIRST,caretIndex);
  2149.                caretBookmark = iterator.bookmark;
  2150.             }
  2151.             catch(e:ItemPendingError)
  2152.             {
  2153.                e.addResponder(new ItemResponder(mx_internal::setBookmarkPendingResultHandler,mx_internal::setBookmarkPendingFailureHandler,{
  2154.                   "property":"caretBookmark",
  2155.                   "value":caretIndex
  2156.                }));
  2157.             }
  2158.             iterator.seek(placeHolder);
  2159.          }
  2160.          return requiresValueCommit;
  2161.       }
  2162.       
  2163.       private function mouseLeaveHandler(param1:Event) : void
  2164.       {
  2165.          var _loc2_:ListEvent = null;
  2166.          var _loc3_:Point = null;
  2167.          mouseDownPoint = null;
  2168.          mouseIsUp();
  2169.          if(!enabled || !selectable)
  2170.          {
  2171.             return;
  2172.          }
  2173.          if(mouseDownItem)
  2174.          {
  2175.             _loc2_ = new ListEvent(ListEvent.CHANGE);
  2176.             _loc2_.itemRenderer = mouseDownItem;
  2177.             _loc3_ = itemRendererToIndices(mouseDownItem);
  2178.             if(_loc3_)
  2179.             {
  2180.                _loc2_.columnIndex = _loc3_.x;
  2181.                _loc2_.rowIndex = _loc3_.y;
  2182.             }
  2183.             dispatchEvent(_loc2_);
  2184.             mouseDownItem = null;
  2185.          }
  2186.          mx_internal::isPressed = false;
  2187.       }
  2188.       
  2189.       public function unconstrainRenderer(param1:Object) : void
  2190.       {
  2191.          unconstrainedRenderers[param1] = true;
  2192.       }
  2193.       
  2194.       mx_internal function getIterator() : IViewCursor
  2195.       {
  2196.          return iterator;
  2197.       }
  2198.       
  2199.       [Bindable("valueCommit")]
  2200.       [Bindable("change")]
  2201.       public function get selectedItems() : Array
  2202.       {
  2203.          return bSelectedItemsChanged ? _selectedItems : copySelectedItems();
  2204.       }
  2205.       
  2206.       protected function findKey(param1:int) : Boolean
  2207.       {
  2208.          var _loc2_:int = param1;
  2209.          return _loc2_ >= 33 && _loc2_ <= 126 && findString(String.fromCharCode(_loc2_));
  2210.       }
  2211.       
  2212.       override public function set verticalScrollPolicy(param1:String) : void
  2213.       {
  2214.          super.verticalScrollPolicy = param1;
  2215.          itemsSizeChanged = true;
  2216.          invalidateDisplayList();
  2217.       }
  2218.       
  2219.       public function set selectedIndex(param1:int) : void
  2220.       {
  2221.          if(!collection || collection.length == 0)
  2222.          {
  2223.             mx_internal::_selectedIndex = param1;
  2224.             mx_internal::bSelectionChanged = true;
  2225.             mx_internal::bSelectedIndexChanged = true;
  2226.             invalidateDisplayList();
  2227.             return;
  2228.          }
  2229.          mx_internal::commitSelectedIndex(param1);
  2230.       }
  2231.       
  2232.       public function set itemRenderer(param1:IFactory) : void
  2233.       {
  2234.          _itemRenderer = param1;
  2235.          invalidateSize();
  2236.          invalidateDisplayList();
  2237.          itemsSizeChanged = true;
  2238.          rendererChanged = true;
  2239.          dispatchEvent(new Event("itemRendererChanged"));
  2240.       }
  2241.       
  2242.       public function hideDropFeedback(param1:DragEvent) : void
  2243.       {
  2244.          if(mx_internal::dropIndicator)
  2245.          {
  2246.             DisplayObject(mx_internal::dropIndicator).parent.removeChild(DisplayObject(mx_internal::dropIndicator));
  2247.             mx_internal::dropIndicator = null;
  2248.             drawFocus(false);
  2249.          }
  2250.       }
  2251.       
  2252.       private function commitSelectedItems(param1:Array) : void
  2253.       {
  2254.          var i:int;
  2255.          var n:int;
  2256.          var useFind:Boolean = false;
  2257.          var uid:String = null;
  2258.          var items:Array = param1;
  2259.          clearSelected();
  2260.          items = items.slice();
  2261.          useFind = collection.sort != null;
  2262.          try
  2263.          {
  2264.             mx_internal::collectionIterator.seek(CursorBookmark.FIRST,0);
  2265.          }
  2266.          catch(e:ItemPendingError)
  2267.          {
  2268.             e.addResponder(new ItemResponder(mx_internal::selectionDataPendingResultHandler,selectionDataPendingFailureHandler,new ListBaseSelectionDataPending(useFind,0,items,null,0)));
  2269.             return;
  2270.          }
  2271.          n = int(items.length);
  2272.          selectionDataArray = new Array(n);
  2273.          firstSelectedItem = !!n ? items[0] : null;
  2274.          proposedSelectedItemIndexes = new Dictionary();
  2275.          i = 0;
  2276.          while(i < n)
  2277.          {
  2278.             uid = itemToUID(items[i]);
  2279.             proposedSelectedItemIndexes[uid] = i;
  2280.             i++;
  2281.          }
  2282.          setSelectionDataLoop(items,0,useFind);
  2283.       }
  2284.       
  2285.       public function set dataTipField(param1:String) : void
  2286.       {
  2287.          _dataTipField = param1;
  2288.          itemsSizeChanged = true;
  2289.          invalidateDisplayList();
  2290.          dispatchEvent(new Event("dataTipFieldChanged"));
  2291.       }
  2292.       
  2293.       private function makeRowsAndColumnsWithExtraColumns(param1:Number, param2:Number) : void
  2294.       {
  2295.          var _loc10_:int = 0;
  2296.          var _loc11_:int = 0;
  2297.          var _loc12_:int = 0;
  2298.          var _loc13_:int = 0;
  2299.          var _loc3_:int = offscreenExtraColumns / 2;
  2300.          var _loc4_:int = offscreenExtraColumns / 2;
  2301.          if(horizontalScrollPosition > collection.length - columnCount)
  2302.          {
  2303.             super.horizontalScrollPosition = Math.max(0,collection.length - columnCount);
  2304.          }
  2305.          offscreenExtraColumnsLeft = Math.min(_loc3_,horizontalScrollPosition);
  2306.          var _loc5_:int = scrollPositionToIndex(horizontalScrollPosition - offscreenExtraColumnsLeft,verticalScrollPosition);
  2307.          seekPositionSafely(_loc5_);
  2308.          var _loc6_:CursorBookmark = iterator.bookmark;
  2309.          if(offscreenExtraColumnsLeft > 0)
  2310.          {
  2311.             makeRowsAndColumns(0,0,0,listContent.height,0,0,true,offscreenExtraColumnsLeft);
  2312.          }
  2313.          var _loc7_:Number = !!offscreenExtraColumnsLeft ? listItems[0][offscreenExtraColumnsLeft - 1].x + columnWidth : 0;
  2314.          var _loc8_:Point = makeRowsAndColumns(_loc7_,0,_loc7_ + listContent.widthExcludingOffsets,listContent.height,offscreenExtraColumnsLeft,0);
  2315.          if(_loc4_ > 0 && !iterator.afterLast)
  2316.          {
  2317.             if(offscreenExtraColumnsLeft + _loc8_.x - 1 < 0)
  2318.             {
  2319.                _loc7_ = 0;
  2320.             }
  2321.             else
  2322.             {
  2323.                _loc7_ = listItems[0][offscreenExtraColumnsLeft + _loc8_.x - 1].x + columnWidth;
  2324.             }
  2325.             _loc10_ = int(listItems[0].length);
  2326.             _loc8_ = makeRowsAndColumns(_loc7_,0,_loc7_,listContent.height,offscreenExtraColumnsLeft + _loc8_.x,0,true,_loc4_);
  2327.             if(_loc8_.x < _loc4_)
  2328.             {
  2329.                _loc11_ = listItems[0].length - (_loc10_ + _loc8_.x);
  2330.                if(_loc11_)
  2331.                {
  2332.                   _loc12_ = 0;
  2333.                   while(_loc12_ < listItems.length)
  2334.                   {
  2335.                      _loc13_ = 0;
  2336.                      while(_loc13_ < _loc11_)
  2337.                      {
  2338.                         listItems[_loc12_].pop();
  2339.                         _loc13_++;
  2340.                      }
  2341.                      _loc12_++;
  2342.                   }
  2343.                }
  2344.             }
  2345.             offscreenExtraColumnsRight = _loc8_.x;
  2346.          }
  2347.          else
  2348.          {
  2349.             offscreenExtraColumnsRight = 0;
  2350.          }
  2351.          var _loc9_:Number = listContent.widthExcludingOffsets;
  2352.          listContent.leftOffset = -offscreenExtraColumnsLeft * columnWidth;
  2353.          listContent.rightOffset = offscreenExtraColumnsRight > 0 ? listItems[0][listItems[0].length - 1].x + columnWidth - _loc9_ + listContent.leftOffset : 0;
  2354.          iterator.seek(_loc6_,0);
  2355.          adjustListContent(param1,param2);
  2356.       }
  2357.       
  2358.       protected function dragOverHandler(param1:DragEvent) : void
  2359.       {
  2360.          if(param1.isDefaultPrevented())
  2361.          {
  2362.             return;
  2363.          }
  2364.          mx_internal::lastDragEvent = param1;
  2365.          if(enabled && iteratorValid && param1.dragSource.hasFormat("items"))
  2366.          {
  2367.             DragManager.showFeedback(param1.ctrlKey ? DragManager.COPY : DragManager.MOVE);
  2368.             showDropFeedback(param1);
  2369.             return;
  2370.          }
  2371.          hideDropFeedback(param1);
  2372.          DragManager.showFeedback(DragManager.NONE);
  2373.       }
  2374.       
  2375.       private function adjustSelectionSettings(param1:Boolean) : void
  2376.       {
  2377.          if(mx_internal::bSelectionChanged)
  2378.          {
  2379.             mx_internal::bSelectionChanged = false;
  2380.             if(bSelectedIndicesChanged && (param1 || _selectedIndices == null))
  2381.             {
  2382.                bSelectedIndicesChanged = false;
  2383.                mx_internal::bSelectedIndexChanged = false;
  2384.                mx_internal::commitSelectedIndices(_selectedIndices);
  2385.             }
  2386.             if(bSelectedItemChanged && (param1 || _selectedItem == null))
  2387.             {
  2388.                bSelectedItemChanged = false;
  2389.                mx_internal::bSelectedIndexChanged = false;
  2390.                commitSelectedItem(_selectedItem);
  2391.             }
  2392.             if(bSelectedItemsChanged && (param1 || _selectedItems == null))
  2393.             {
  2394.                bSelectedItemsChanged = false;
  2395.                mx_internal::bSelectedIndexChanged = false;
  2396.                commitSelectedItems(_selectedItems);
  2397.             }
  2398.             if(mx_internal::bSelectedIndexChanged && (param1 || mx_internal::_selectedIndex == -1))
  2399.             {
  2400.                mx_internal::commitSelectedIndex(mx_internal::_selectedIndex);
  2401.                mx_internal::bSelectedIndexChanged = false;
  2402.             }
  2403.          }
  2404.       }
  2405.       
  2406.       private function clearSelectionData() : void
  2407.       {
  2408.          selectedData = {};
  2409.          firstSelectionData = null;
  2410.          lastSelectionData = null;
  2411.       }
  2412.       
  2413.       protected function shiftRow(param1:int, param2:int, param3:int, param4:Boolean) : void
  2414.       {
  2415.          var _loc5_:IListItemRenderer = null;
  2416.          var _loc6_:int = 0;
  2417.          while(_loc6_ < param3)
  2418.          {
  2419.             _loc5_ = listItems[param1][_loc6_];
  2420.             if(param4)
  2421.             {
  2422.                listItems[param2][_loc6_] = _loc5_;
  2423.                rowMap[_loc5_.name].rowIndex = param2;
  2424.             }
  2425.             else
  2426.             {
  2427.                rowMap[_loc5_.name].rowIndex = param1;
  2428.             }
  2429.             _loc6_++;
  2430.          }
  2431.          if(param4)
  2432.          {
  2433.             rowInfo[param2] = rowInfo[param1];
  2434.          }
  2435.       }
  2436.       
  2437.       mx_internal function selectionTween_endHandler(param1:TweenEvent) : void
  2438.       {
  2439.          mx_internal::selectionTween_updateHandler(param1);
  2440.       }
  2441.       
  2442.       mx_internal function resetDragScrolling() : void
  2443.       {
  2444.          if(mx_internal::dragScrollingInterval != 0)
  2445.          {
  2446.             clearInterval(mx_internal::dragScrollingInterval);
  2447.             mx_internal::dragScrollingInterval = 0;
  2448.          }
  2449.       }
  2450.       
  2451.       protected function mouseOverHandler(param1:MouseEvent) : void
  2452.       {
  2453.          var _loc2_:ListEvent = null;
  2454.          var _loc3_:IListItemRenderer = null;
  2455.          var _loc4_:Point = null;
  2456.          var _loc5_:String = null;
  2457.          var _loc6_:String = null;
  2458.          var _loc7_:BaseListData = null;
  2459.          if(!enabled || !selectable)
  2460.          {
  2461.             return;
  2462.          }
  2463.          if(mx_internal::dragScrollingInterval != 0 && !param1.buttonDown)
  2464.          {
  2465.             mouseIsUp();
  2466.          }
  2467.          mx_internal::isPressed = param1.buttonDown;
  2468.          _loc3_ = mouseEventToItemRenderer(param1);
  2469.          _loc4_ = itemRendererToIndices(_loc3_);
  2470.          if(!_loc3_)
  2471.          {
  2472.             return;
  2473.          }
  2474.          _loc5_ = itemToUID(_loc3_.data);
  2475.          if(!mx_internal::isPressed || allowDragSelection)
  2476.          {
  2477.             if(param1.relatedObject)
  2478.             {
  2479.                if(Boolean(mx_internal::lastHighlightItemRenderer) && Boolean(highlightUID))
  2480.                {
  2481.                   _loc7_ = rowMap[_loc3_.name];
  2482.                   _loc6_ = _loc7_.uid;
  2483.                }
  2484.                if(itemRendererContains(_loc3_,param1.relatedObject) || _loc5_ == _loc6_ || param1.relatedObject == highlightIndicator)
  2485.                {
  2486.                   return;
  2487.                }
  2488.             }
  2489.             if(getStyle("useRollOver") && _loc3_.data != null)
  2490.             {
  2491.                if(allowDragSelection)
  2492.                {
  2493.                   mx_internal::bSelectOnRelease = true;
  2494.                }
  2495.                drawItem(UIDToItemRenderer(_loc5_),isItemSelected(_loc3_.data),true,_loc5_ == caretUID);
  2496.                if(_loc4_)
  2497.                {
  2498.                   _loc2_ = new ListEvent(ListEvent.ITEM_ROLL_OVER);
  2499.                   _loc2_.columnIndex = _loc4_.x;
  2500.                   _loc2_.rowIndex = _loc4_.y;
  2501.                   _loc2_.itemRenderer = _loc3_;
  2502.                   dispatchEvent(_loc2_);
  2503.                   lastHighlightItemIndices = _loc4_;
  2504.                   mx_internal::lastHighlightItemRendererAtIndices = _loc3_;
  2505.                }
  2506.             }
  2507.          }
  2508.          else
  2509.          {
  2510.             if(DragManager.isDragging)
  2511.             {
  2512.                return;
  2513.             }
  2514.             if(mx_internal::dragScrollingInterval != 0 && allowDragSelection || menuSelectionMode)
  2515.             {
  2516.                if(selectItem(_loc3_,param1.shiftKey,param1.ctrlKey))
  2517.                {
  2518.                   _loc2_ = new ListEvent(ListEvent.CHANGE);
  2519.                   _loc2_.itemRenderer = _loc3_;
  2520.                   if(_loc4_)
  2521.                   {
  2522.                      _loc2_.columnIndex = _loc4_.x;
  2523.                      _loc2_.rowIndex = _loc4_.y;
  2524.                   }
  2525.                   dispatchEvent(_loc2_);
  2526.                }
  2527.             }
  2528.          }
  2529.       }
  2530.       
  2531.       protected function mouseClickHandler(param1:MouseEvent) : void
  2532.       {
  2533.          var _loc2_:IListItemRenderer = null;
  2534.          var _loc3_:Point = null;
  2535.          var _loc4_:ListEvent = null;
  2536.          _loc2_ = mouseEventToItemRenderer(param1);
  2537.          if(!_loc2_)
  2538.          {
  2539.             return;
  2540.          }
  2541.          _loc3_ = itemRendererToIndices(_loc2_);
  2542.          if(_loc3_)
  2543.          {
  2544.             _loc4_ = new ListEvent(ListEvent.ITEM_CLICK);
  2545.             _loc4_.columnIndex = _loc3_.x;
  2546.             _loc4_.rowIndex = _loc3_.y;
  2547.             _loc4_.itemRenderer = _loc2_;
  2548.             dispatchEvent(_loc4_);
  2549.          }
  2550.       }
  2551.       
  2552.       private function selectionIndicesPendingFailureHandler(param1:Object, param2:ListBaseSelectionDataPending) : void
  2553.       {
  2554.       }
  2555.       
  2556.       protected function finishKeySelection() : void
  2557.       {
  2558.          var _loc1_:String = null;
  2559.          var _loc5_:IListItemRenderer = null;
  2560.          var _loc7_:Point = null;
  2561.          var _loc8_:ListEvent = null;
  2562.          var _loc2_:int = int(listItems.length);
  2563.          var _loc3_:int = listItems.length - offscreenExtraRowsTop - offscreenExtraRowsBottom;
  2564.          var _loc4_:int = rowInfo[_loc2_ - offscreenExtraRowsBottom - 1].y + rowInfo[_loc2_ - offscreenExtraRowsBottom - 1].height > listContent.heightExcludingOffsets - listContent.topOffset ? 1 : 0;
  2565.          if(lastKey == Keyboard.PAGE_DOWN)
  2566.          {
  2567.             if(_loc3_ - _loc4_ == 0)
  2568.             {
  2569.                caretIndex = Math.min(verticalScrollPosition + _loc3_ - _loc4_,collection.length - 1);
  2570.             }
  2571.             else
  2572.             {
  2573.                caretIndex = Math.min(verticalScrollPosition + _loc3_ - _loc4_ - 1,collection.length - 1);
  2574.             }
  2575.          }
  2576.          var _loc6_:Boolean = false;
  2577.          if(bSelectItem && caretIndex - verticalScrollPosition >= 0)
  2578.          {
  2579.             if(caretIndex - verticalScrollPosition > Math.max(_loc3_ - _loc4_ - 1,0))
  2580.             {
  2581.                if(lastKey == Keyboard.END && maxVerticalScrollPosition > verticalScrollPosition)
  2582.                {
  2583.                   --caretIndex;
  2584.                   moveSelectionVertically(lastKey,bShiftKey,bCtrlKey);
  2585.                   return;
  2586.                }
  2587.                caretIndex = _loc3_ - _loc4_ - 1 + verticalScrollPosition;
  2588.             }
  2589.             _loc5_ = listItems[caretIndex - verticalScrollPosition + offscreenExtraRowsTop][0];
  2590.             if(_loc5_)
  2591.             {
  2592.                _loc1_ = itemToUID(_loc5_.data);
  2593.                _loc5_ = UIDToItemRenderer(_loc1_);
  2594.                if(!bCtrlKey || lastKey == Keyboard.SPACE)
  2595.                {
  2596.                   selectItem(_loc5_,bShiftKey,bCtrlKey);
  2597.                   _loc6_ = true;
  2598.                }
  2599.                if(bCtrlKey)
  2600.                {
  2601.                   drawItem(_loc5_,selectedData[_loc1_] != null,_loc1_ == highlightUID,true);
  2602.                }
  2603.             }
  2604.          }
  2605.          if(_loc6_)
  2606.          {
  2607.             _loc7_ = itemRendererToIndices(_loc5_);
  2608.             _loc8_ = new ListEvent(ListEvent.CHANGE);
  2609.             if(_loc7_)
  2610.             {
  2611.                _loc8_.columnIndex = _loc7_.x;
  2612.                _loc8_.rowIndex = _loc7_.y;
  2613.             }
  2614.             _loc8_.itemRenderer = _loc5_;
  2615.             dispatchEvent(_loc8_);
  2616.          }
  2617.       }
  2618.       
  2619.       private function selectionDataPendingFailureHandler(param1:Object, param2:ListBaseSelectionDataPending) : void
  2620.       {
  2621.       }
  2622.       
  2623.       mx_internal function addClipMask(param1:Boolean) : void
  2624.       {
  2625.          var _loc10_:DisplayObject = null;
  2626.          var _loc11_:Number = NaN;
  2627.          if(param1)
  2628.          {
  2629.             if(horizontalScrollBar && horizontalScrollBar.visible || mx_internal::hasOnlyTextRenderers() || runningDataEffect || listContent.bottomOffset != 0 || listContent.topOffset != 0 || listContent.leftOffset != 0 || listContent.rightOffset != 0)
  2630.             {
  2631.                listContent.mask = maskShape;
  2632.                selectionLayer.mask = null;
  2633.             }
  2634.             else
  2635.             {
  2636.                listContent.mask = null;
  2637.                selectionLayer.mask = maskShape;
  2638.             }
  2639.          }
  2640.          if(listContent.mask)
  2641.          {
  2642.             return;
  2643.          }
  2644.          var _loc2_:int = int(listItems.length - 1);
  2645.          var _loc3_:ListRowInfo = rowInfo[_loc2_];
  2646.          var _loc4_:Array = listItems[_loc2_];
  2647.          if(_loc3_.y + _loc3_.height <= listContent.height)
  2648.          {
  2649.             return;
  2650.          }
  2651.          var _loc5_:int = int(_loc4_.length);
  2652.          var _loc6_:Number = _loc3_.y;
  2653.          var _loc7_:Number = listContent.width;
  2654.          var _loc8_:Number = listContent.height - _loc3_.y;
  2655.          var _loc9_:int = 0;
  2656.          while(_loc9_ < _loc5_)
  2657.          {
  2658.             _loc10_ = _loc4_[_loc9_];
  2659.             _loc11_ = _loc10_.y - _loc6_;
  2660.             if(_loc10_ is IUITextField)
  2661.             {
  2662.                _loc10_.height = _loc8_ - _loc11_;
  2663.             }
  2664.             else
  2665.             {
  2666.                _loc10_.mask = mx_internal::createItemMask(0,_loc6_ + _loc11_,_loc7_,_loc8_ - _loc11_);
  2667.             }
  2668.             _loc9_++;
  2669.          }
  2670.       }
  2671.       
  2672.       public function set allowMultipleSelection(param1:Boolean) : void
  2673.       {
  2674.          _allowMultipleSelection = param1;
  2675.       }
  2676.       
  2677.       protected function scrollVertically(param1:int, param2:int, param3:Boolean) : void
  2678.       {
  2679.          var i:int = 0;
  2680.          var j:int = 0;
  2681.          var numRows:int = 0;
  2682.          var numCols:int = 0;
  2683.          var uid:String = null;
  2684.          var curY:Number = NaN;
  2685.          var cursorPos:CursorBookmark = null;
  2686.          var discardRows:int = 0;
  2687.          var desiredoffscreenExtraRowsTop:int = 0;
  2688.          var newoffscreenExtraRowsTop:int = 0;
  2689.          var offscreenExtraRowsBottomToMake:int = 0;
  2690.          var newTopOffset:Number = NaN;
  2691.          var fillHeight:Number = NaN;
  2692.          var pt:Point = null;
  2693.          var rowIdx:int = 0;
  2694.          var modDeltaPos:int = 0;
  2695.          var desiredPrefixItems:int = 0;
  2696.          var actual:Point = null;
  2697.          var row:Array = null;
  2698.          var rowData:Object = null;
  2699.          var desiredSuffixItems:int = 0;
  2700.          var newOffscreenRows:int = 0;
  2701.          var visibleAreaBottomY:int = 0;
  2702.          var pos:int = param1;
  2703.          var deltaPos:int = param2;
  2704.          var scrollUp:Boolean = param3;
  2705.          var rowCount:int = int(rowInfo.length);
  2706.          var columnCount:int = int(listItems[0].length);
  2707.          var moveBlockDistance:Number = 0;
  2708.          var listContentVisibleHeight:Number = listContent.heightExcludingOffsets;
  2709.          if(scrollUp)
  2710.          {
  2711.             discardRows = deltaPos;
  2712.             desiredoffscreenExtraRowsTop = offscreenExtraRows / 2;
  2713.             newoffscreenExtraRowsTop = Math.min(desiredoffscreenExtraRowsTop,offscreenExtraRowsTop + deltaPos);
  2714.             if(offscreenExtraRowsTop < desiredoffscreenExtraRowsTop)
  2715.             {
  2716.                discardRows = Math.max(0,deltaPos - (desiredoffscreenExtraRowsTop - offscreenExtraRowsTop));
  2717.             }
  2718.             moveBlockDistance = sumRowHeights(0,discardRows - 1);
  2719.             i = 0;
  2720.             while(i < discardRows)
  2721.             {
  2722.                if(!seekNextSafely(iterator,pos))
  2723.                {
  2724.                   return;
  2725.                }
  2726.                i++;
  2727.             }
  2728.             i = 0;
  2729.             while(i < rowCount)
  2730.             {
  2731.                numCols = int(listItems[i].length);
  2732.                if(i < discardRows)
  2733.                {
  2734.                   destroyRow(i,numCols);
  2735.                }
  2736.                else if(discardRows > 0)
  2737.                {
  2738.                   moveRowVertically(i,numCols,-moveBlockDistance);
  2739.                   moveIndicatorsVertically(rowInfo[i].uid,-moveBlockDistance);
  2740.                   shiftRow(i,i - discardRows,numCols,true);
  2741.                   if(listItems[i].length == 0)
  2742.                   {
  2743.                      listItems[i - discardRows].splice(0);
  2744.                   }
  2745.                }
  2746.                i++;
  2747.             }
  2748.             if(discardRows)
  2749.             {
  2750.                truncateRowArrays(rowCount - discardRows);
  2751.             }
  2752.             curY = rowInfo[rowCount - discardRows - 1].y + rowInfo[rowCount - discardRows - 1].height;
  2753.             cursorPos = iterator.bookmark;
  2754.             try
  2755.             {
  2756.                iterator.seek(CursorBookmark.CURRENT,rowCount - discardRows);
  2757.                if(!iteratorValid)
  2758.                {
  2759.                   iteratorValid = true;
  2760.                   lastSeekPending = null;
  2761.                }
  2762.             }
  2763.             catch(e1:ItemPendingError)
  2764.             {
  2765.                lastSeekPending = new ListBaseSeekPending(cursorPos,0);
  2766.                e1.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  2767.                iteratorValid = false;
  2768.             }
  2769.             offscreenExtraRowsBottomToMake = offscreenExtraRows / 2;
  2770.             newTopOffset = 0;
  2771.             i = 0;
  2772.             while(i < newoffscreenExtraRowsTop)
  2773.             {
  2774.                newTopOffset -= rowInfo[i].height;
  2775.                i++;
  2776.             }
  2777.             fillHeight = listContentVisibleHeight - (curY + newTopOffset);
  2778.             if(fillHeight > 0)
  2779.             {
  2780.                pt = makeRowsAndColumns(0,curY,listContent.width,curY + fillHeight,0,rowCount - discardRows);
  2781.                rowCount += pt.y;
  2782.             }
  2783.             else
  2784.             {
  2785.                rowIdx = rowCount - discardRows - 1;
  2786.                fillHeight += rowInfo[rowIdx--].height;
  2787.                while(fillHeight < 0)
  2788.                {
  2789.                   offscreenExtraRowsBottomToMake--;
  2790.                   fillHeight += rowInfo[rowIdx--].height;
  2791.                }
  2792.             }
  2793.             if(offscreenExtraRowsBottomToMake > 0)
  2794.             {
  2795.                if(pt)
  2796.                {
  2797.                   curY = rowInfo[rowCount - discardRows - 1].y + rowInfo[rowCount - discardRows - 1].height;
  2798.                }
  2799.                pt = makeRowsAndColumns(0,curY,listContent.width,listContent.height,0,rowCount - discardRows,true,offscreenExtraRowsBottomToMake);
  2800.             }
  2801.             else
  2802.             {
  2803.                pt = new Point(0,0);
  2804.             }
  2805.             try
  2806.             {
  2807.                iterator.seek(cursorPos,0);
  2808.             }
  2809.             catch(e2:ItemPendingError)
  2810.             {
  2811.                lastSeekPending = new ListBaseSeekPending(cursorPos,0);
  2812.                e2.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  2813.                iteratorValid = false;
  2814.             }
  2815.             offscreenExtraRowsTop = newoffscreenExtraRowsTop;
  2816.             offscreenExtraRowsBottom = offscreenExtraRows / 2 - offscreenExtraRowsBottomToMake + pt.y;
  2817.          }
  2818.          else
  2819.          {
  2820.             curY = 0;
  2821.             modDeltaPos = deltaPos;
  2822.             desiredPrefixItems = offscreenExtraRows / 2;
  2823.             if(pos < desiredPrefixItems)
  2824.             {
  2825.                modDeltaPos -= desiredPrefixItems - pos;
  2826.             }
  2827.             i = 0;
  2828.             while(i < modDeltaPos)
  2829.             {
  2830.                addToRowArrays();
  2831.                i++;
  2832.             }
  2833.             actual = new Point(0,0);
  2834.             if(modDeltaPos > 0)
  2835.             {
  2836.                try
  2837.                {
  2838.                   iterator.seek(CursorBookmark.CURRENT,-modDeltaPos);
  2839.                   if(!iteratorValid)
  2840.                   {
  2841.                      iteratorValid = true;
  2842.                      lastSeekPending = null;
  2843.                   }
  2844.                }
  2845.                catch(e3:ItemPendingError)
  2846.                {
  2847.                   lastSeekPending = new ListBaseSeekPending(CursorBookmark.CURRENT,-modDeltaPos);
  2848.                   e3.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  2849.                   iteratorValid = false;
  2850.                }
  2851.                cursorPos = iterator.bookmark;
  2852.                mx_internal::allowRendererStealingDuringLayout = false;
  2853.                actual = makeRowsAndColumns(0,curY,listContent.width,listContent.height,0,0,true,modDeltaPos);
  2854.                mx_internal::allowRendererStealingDuringLayout = true;
  2855.                try
  2856.                {
  2857.                   iterator.seek(cursorPos,0);
  2858.                }
  2859.                catch(e4:ItemPendingError)
  2860.                {
  2861.                   lastSeekPending = new ListBaseSeekPending(cursorPos,0);
  2862.                   e4.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  2863.                   iteratorValid = false;
  2864.                }
  2865.             }
  2866.             if(actual.y == 0 && modDeltaPos > 0)
  2867.             {
  2868.                verticalScrollPosition = 0;
  2869.                restoreRowArrays(modDeltaPos);
  2870.             }
  2871.             moveBlockDistance = sumRowHeights(0,actual.y - 1);
  2872.             desiredSuffixItems = offscreenExtraRows / 2;
  2873.             newOffscreenRows = 0;
  2874.             visibleAreaBottomY = listContentVisibleHeight + sumRowHeights(0,Math.min(desiredPrefixItems,pos) - 1);
  2875.             i = actual.y;
  2876.             while(i < listItems.length)
  2877.             {
  2878.                row = listItems[i];
  2879.                rowData = rowInfo[i];
  2880.                moveRowVertically(i,listItems[i].length,moveBlockDistance);
  2881.                if(rowData.y >= visibleAreaBottomY)
  2882.                {
  2883.                   newOffscreenRows++;
  2884.                   if(newOffscreenRows > desiredSuffixItems)
  2885.                   {
  2886.                      destroyRow(i,listItems[i].length);
  2887.                      removeFromRowArrays(i);
  2888.                      i--;
  2889.                   }
  2890.                   else
  2891.                   {
  2892.                      shiftRow(i,i + deltaPos,listItems[i].length,false);
  2893.                      moveIndicatorsVertically(rowInfo[i].uid,moveBlockDistance);
  2894.                   }
  2895.                }
  2896.                else
  2897.                {
  2898.                   shiftRow(i,i + deltaPos,listItems[i].length,false);
  2899.                   moveIndicatorsVertically(rowInfo[i].uid,moveBlockDistance);
  2900.                }
  2901.                i++;
  2902.             }
  2903.             rowCount = int(listItems.length);
  2904.             offscreenExtraRowsTop = Math.min(desiredPrefixItems,pos);
  2905.             offscreenExtraRowsBottom = Math.min(newOffscreenRows,desiredSuffixItems);
  2906.          }
  2907.          listContent.topOffset = -sumRowHeights(0,offscreenExtraRowsTop - 1);
  2908.          listContent.bottomOffset = rowInfo[rowInfo.length - 1].y + rowInfo[rowInfo.length - 1].height + listContent.topOffset - listContentVisibleHeight;
  2909.          adjustListContent(oldUnscaledWidth,oldUnscaledHeight);
  2910.          mx_internal::addClipMask(true);
  2911.       }
  2912.       
  2913.       protected function selectItem(param1:IListItemRenderer, param2:Boolean, param3:Boolean, param4:Boolean = true) : Boolean
  2914.       {
  2915.          var uid:String;
  2916.          var selectionChange:Boolean;
  2917.          var placeHolder:CursorBookmark = null;
  2918.          var index:int = 0;
  2919.          var numSelected:int = 0;
  2920.          var curSelectionData:ListBaseSelectionData = null;
  2921.          var oldAnchorBookmark:CursorBookmark = null;
  2922.          var oldAnchorIndex:int = 0;
  2923.          var incr:Boolean = false;
  2924.          var item:IListItemRenderer = param1;
  2925.          var shiftKey:Boolean = param2;
  2926.          var ctrlKey:Boolean = param3;
  2927.          var transition:Boolean = param4;
  2928.          if(!item || !isItemSelectable(item.data))
  2929.          {
  2930.             return false;
  2931.          }
  2932.          selectionChange = false;
  2933.          placeHolder = iterator.bookmark;
  2934.          index = itemRendererToIndex(item);
  2935.          uid = itemToUID(item.data);
  2936.          if(!allowMultipleSelection || !shiftKey && !ctrlKey)
  2937.          {
  2938.             numSelected = 0;
  2939.             if(allowMultipleSelection)
  2940.             {
  2941.                curSelectionData = firstSelectionData;
  2942.                if(curSelectionData != null)
  2943.                {
  2944.                   numSelected++;
  2945.                   if(curSelectionData.mx_internal::nextSelectionData)
  2946.                   {
  2947.                      numSelected++;
  2948.                   }
  2949.                }
  2950.             }
  2951.             if(ctrlKey && Boolean(selectedData[uid]))
  2952.             {
  2953.                selectionChange = true;
  2954.                clearSelected(transition);
  2955.             }
  2956.             else if(mx_internal::_selectedIndex != index || mx_internal::bSelectedIndexChanged || allowMultipleSelection && numSelected != 1)
  2957.             {
  2958.                selectionChange = true;
  2959.                clearSelected(transition);
  2960.                insertSelectionDataBefore(uid,new ListBaseSelectionData(item.data,index,approximate),firstSelectionData);
  2961.                drawItem(UIDToItemRenderer(uid),true,uid == highlightUID,true,transition);
  2962.                mx_internal::_selectedIndex = index;
  2963.                _selectedItem = item.data;
  2964.                iterator.seek(CursorBookmark.CURRENT,mx_internal::_selectedIndex - indicesToIndex(verticalScrollPosition - offscreenExtraRowsTop,horizontalScrollPosition - offscreenExtraColumnsLeft));
  2965.                caretIndex = mx_internal::_selectedIndex;
  2966.                caretBookmark = iterator.bookmark;
  2967.                anchorIndex = mx_internal::_selectedIndex;
  2968.                anchorBookmark = iterator.bookmark;
  2969.                iterator.seek(placeHolder,0);
  2970.             }
  2971.          }
  2972.          else if(shiftKey && allowMultipleSelection)
  2973.          {
  2974.             if(anchorBookmark)
  2975.             {
  2976.                oldAnchorBookmark = anchorBookmark;
  2977.                oldAnchorIndex = anchorIndex;
  2978.                incr = anchorIndex < index;
  2979.                clearSelected(false);
  2980.                caretIndex = index;
  2981.                caretBookmark = iterator.bookmark;
  2982.                anchorIndex = oldAnchorIndex;
  2983.                anchorBookmark = oldAnchorBookmark;
  2984.                mx_internal::_selectedIndex = index;
  2985.                _selectedItem = item.data;
  2986.                try
  2987.                {
  2988.                   iterator.seek(anchorBookmark,0);
  2989.                }
  2990.                catch(e:ItemPendingError)
  2991.                {
  2992.                   e.addResponder(new ItemResponder(selectionPendingResultHandler,selectionPendingFailureHandler,new ListBaseSelectionPending(incr,index,item.data,transition,placeHolder,CursorBookmark.CURRENT,0)));
  2993.                   iteratorValid = false;
  2994.                }
  2995.                shiftSelectionLoop(incr,anchorIndex,item.data,transition,placeHolder);
  2996.             }
  2997.             selectionChange = true;
  2998.          }
  2999.          else if(ctrlKey && allowMultipleSelection)
  3000.          {
  3001.             if(selectedData[uid])
  3002.             {
  3003.                removeSelectionData(uid);
  3004.                drawItem(UIDToItemRenderer(uid),false,uid == highlightUID,true,transition);
  3005.                if(item.data == selectedItem)
  3006.                {
  3007.                   calculateSelectedIndexAndItem();
  3008.                }
  3009.             }
  3010.             else
  3011.             {
  3012.                insertSelectionDataBefore(uid,new ListBaseSelectionData(item.data,index,approximate),firstSelectionData);
  3013.                drawItem(UIDToItemRenderer(uid),true,uid == highlightUID,true,transition);
  3014.                mx_internal::_selectedIndex = index;
  3015.                _selectedItem = item.data;
  3016.             }
  3017.             iterator.seek(CursorBookmark.CURRENT,index - indicesToIndex(verticalScrollPosition,horizontalScrollPosition));
  3018.             caretIndex = index;
  3019.             caretBookmark = iterator.bookmark;
  3020.             anchorIndex = index;
  3021.             anchorBookmark = iterator.bookmark;
  3022.             iterator.seek(placeHolder,0);
  3023.             selectionChange = true;
  3024.          }
  3025.          return selectionChange;
  3026.       }
  3027.       
  3028.       mx_internal function selectionTween_updateHandler(param1:TweenEvent) : void
  3029.       {
  3030.          Sprite(param1.target.listener).alpha = Number(param1.value);
  3031.       }
  3032.       
  3033.       protected function prepareDataEffect(param1:CollectionEvent) : void
  3034.       {
  3035.          var _loc2_:Object = null;
  3036.          var _loc3_:Class = null;
  3037.          var _loc4_:int = 0;
  3038.          var _loc5_:int = 0;
  3039.          if(!cachedItemsChangeEffect)
  3040.          {
  3041.             _loc2_ = getStyle("itemsChangeEffect");
  3042.             _loc3_ = _loc2_ as Class;
  3043.             if(_loc3_)
  3044.             {
  3045.                _loc2_ = new _loc3_();
  3046.             }
  3047.             cachedItemsChangeEffect = _loc2_ as IEffect;
  3048.          }
  3049.          if(runningDataEffect)
  3050.          {
  3051.             collection = actualCollection;
  3052.             listContent.iterator = iterator = actualIterator;
  3053.             cachedItemsChangeEffect.end();
  3054.             modifiedCollectionView = null;
  3055.          }
  3056.          if(Boolean(cachedItemsChangeEffect) && iteratorValid)
  3057.          {
  3058.             _loc4_ = iterator.bookmark.getViewIndex();
  3059.             _loc5_ = _loc4_ + rowCount * columnCount - 1;
  3060.             if(!modifiedCollectionView && collection is IList)
  3061.             {
  3062.                modifiedCollectionView = new ModifiedCollectionView(ICollectionView(collection));
  3063.             }
  3064.             if(modifiedCollectionView)
  3065.             {
  3066.                modifiedCollectionView.processCollectionEvent(param1,_loc4_,_loc5_);
  3067.                runDataEffectNextUpdate = true;
  3068.                if(mx_internal::invalidateDisplayListFlag)
  3069.                {
  3070.                   callLater(invalidateList);
  3071.                }
  3072.                else
  3073.                {
  3074.                   invalidateList();
  3075.                }
  3076.             }
  3077.          }
  3078.       }
  3079.       
  3080.       protected function drawSelectionIndicator(param1:Sprite, param2:Number, param3:Number, param4:Number, param5:Number, param6:uint, param7:IListItemRenderer) : void
  3081.       {
  3082.          var _loc8_:Graphics = Sprite(param1).graphics;
  3083.          _loc8_.clear();
  3084.          _loc8_.beginFill(param6);
  3085.          _loc8_.drawRect(0,0,param4,param5);
  3086.          _loc8_.endFill();
  3087.          param1.x = param2;
  3088.          param1.y = param3;
  3089.       }
  3090.       
  3091.       mx_internal function setColumnWidth(param1:Number) : void
  3092.       {
  3093.          _columnWidth = param1;
  3094.       }
  3095.       
  3096.       protected function makeRowsAndColumns(param1:Number, param2:Number, param3:Number, param4:Number, param5:int, param6:int, param7:Boolean = false, param8:uint = 0) : Point
  3097.       {
  3098.          return new Point(0,0);
  3099.       }
  3100.       
  3101.       public function isItemVisible(param1:Object) : Boolean
  3102.       {
  3103.          return itemToItemRenderer(param1) != null;
  3104.       }
  3105.       
  3106.       mx_internal function commitSelectedIndices(param1:Array) : void
  3107.       {
  3108.          var indices:Array = param1;
  3109.          clearSelected();
  3110.          try
  3111.          {
  3112.             mx_internal::collectionIterator.seek(CursorBookmark.FIRST,0);
  3113.          }
  3114.          catch(e:ItemPendingError)
  3115.          {
  3116.             e.addResponder(new ItemResponder(selectionIndicesPendingResultHandler,selectionIndicesPendingFailureHandler,new ListBaseSelectionDataPending(true,0,indices,CursorBookmark.FIRST,0)));
  3117.             return;
  3118.          }
  3119.          setSelectionIndicesLoop(0,indices,true);
  3120.       }
  3121.       
  3122.       public function calculateDropIndex(param1:DragEvent = null) : int
  3123.       {
  3124.          var _loc2_:IListItemRenderer = null;
  3125.          var _loc3_:IListItemRenderer = null;
  3126.          var _loc4_:Point = null;
  3127.          var _loc5_:int = 0;
  3128.          var _loc6_:int = 0;
  3129.          if(param1)
  3130.          {
  3131.             _loc4_ = new Point(param1.localX,param1.localY);
  3132.             _loc4_ = DisplayObject(param1.target).localToGlobal(_loc4_);
  3133.             _loc4_ = listContent.globalToLocal(_loc4_);
  3134.             _loc5_ = int(listItems.length);
  3135.             _loc6_ = 0;
  3136.             while(_loc6_ < _loc5_)
  3137.             {
  3138.                if(listItems[_loc6_][0])
  3139.                {
  3140.                   _loc3_ = listItems[_loc6_][0];
  3141.                }
  3142.                if(rowInfo[_loc6_].y <= _loc4_.y && _loc4_.y < rowInfo[_loc6_].y + rowInfo[_loc6_].height)
  3143.                {
  3144.                   _loc2_ = listItems[_loc6_][0];
  3145.                   break;
  3146.                }
  3147.                _loc6_++;
  3148.             }
  3149.             if(_loc2_)
  3150.             {
  3151.                lastDropIndex = itemRendererToIndex(_loc2_);
  3152.             }
  3153.             else if(_loc3_)
  3154.             {
  3155.                lastDropIndex = itemRendererToIndex(_loc3_) + 1;
  3156.             }
  3157.             else
  3158.             {
  3159.                lastDropIndex = !!collection ? collection.length : 0;
  3160.             }
  3161.          }
  3162.          return lastDropIndex;
  3163.       }
  3164.       
  3165.       protected function mouseDownHandler(param1:MouseEvent) : void
  3166.       {
  3167.          var _loc2_:IListItemRenderer = null;
  3168.          var _loc3_:Point = null;
  3169.          if(!enabled || !selectable)
  3170.          {
  3171.             return;
  3172.          }
  3173.          if(runningDataEffect)
  3174.          {
  3175.             cachedItemsChangeEffect.end();
  3176.             dataEffectCompleted = true;
  3177.             itemsSizeChanged = true;
  3178.             invalidateList();
  3179.             dataItemWrappersByRenderer = new Dictionary();
  3180.             validateDisplayList();
  3181.          }
  3182.          mx_internal::isPressed = true;
  3183.          _loc2_ = mouseEventToItemRenderer(param1);
  3184.          if(!_loc2_)
  3185.          {
  3186.             return;
  3187.          }
  3188.          mx_internal::bSelectOnRelease = false;
  3189.          _loc3_ = new Point(param1.localX,param1.localY);
  3190.          _loc3_ = DisplayObject(param1.target).localToGlobal(_loc3_);
  3191.          mouseDownPoint = globalToLocal(_loc3_);
  3192.          systemManager.getSandboxRoot().addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,true,0,true);
  3193.          systemManager.getSandboxRoot().addEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE,mouseLeaveHandler,false,0,true);
  3194.          if(!dragEnabled)
  3195.          {
  3196.             mx_internal::dragScrollingInterval = setInterval(dragScroll,15);
  3197.          }
  3198.          if(dragEnabled && Boolean(selectedData[rowMap[_loc2_.name].uid]))
  3199.          {
  3200.             mx_internal::bSelectOnRelease = true;
  3201.          }
  3202.          else if(selectItem(_loc2_,param1.shiftKey,param1.ctrlKey))
  3203.          {
  3204.             mouseDownItem = _loc2_;
  3205.          }
  3206.       }
  3207.       
  3208.       [Bindable("labelFieldChanged")]
  3209.       public function get labelField() : String
  3210.       {
  3211.          return _labelField;
  3212.       }
  3213.       
  3214.       private function onSelectionTweenUpdate(param1:Number) : void
  3215.       {
  3216.       }
  3217.       
  3218.       public function set selectedItemsCompareFunction(param1:Function) : void
  3219.       {
  3220.          _selectedItemsCompareFunction = param1;
  3221.          dispatchEvent(new Event("selectedItemsCompareFunctionChanged"));
  3222.       }
  3223.       
  3224.       protected function clearIndicators() : void
  3225.       {
  3226.          var _loc1_:String = null;
  3227.          for(_loc1_ in selectionTweens)
  3228.          {
  3229.             removeIndicators(_loc1_);
  3230.          }
  3231.          while(selectionLayer.numChildren > 0)
  3232.          {
  3233.             selectionLayer.removeChildAt(0);
  3234.          }
  3235.          selectionTweens = {};
  3236.          selectionIndicators = {};
  3237.          highlightIndicator = null;
  3238.          highlightUID = null;
  3239.          caretIndicator = null;
  3240.          caretUID = null;
  3241.       }
  3242.       
  3243.       public function get offscreenExtraRowsOrColumns() : int
  3244.       {
  3245.          return _offscreenExtraRowsOrColumns;
  3246.       }
  3247.       
  3248.       public function get wordWrap() : Boolean
  3249.       {
  3250.          return _wordWrap;
  3251.       }
  3252.       
  3253.       protected function drawItem(param1:IListItemRenderer, param2:Boolean = false, param3:Boolean = false, param4:Boolean = false, param5:Boolean = false) : void
  3254.       {
  3255.          var _loc6_:Sprite = null;
  3256.          var _loc7_:Graphics = null;
  3257.          var _loc12_:Number = NaN;
  3258.          if(!param1)
  3259.          {
  3260.             return;
  3261.          }
  3262.          var _loc8_:ListBaseContentHolder = DisplayObject(param1).parent as ListBaseContentHolder;
  3263.          if(!_loc8_)
  3264.          {
  3265.             return;
  3266.          }
  3267.          var _loc9_:Array = _loc8_.rowInfo;
  3268.          var _loc10_:Sprite = _loc8_.selectionLayer;
  3269.          var _loc11_:BaseListData = rowMap[param1.name];
  3270.          if(!_loc11_)
  3271.          {
  3272.             return;
  3273.          }
  3274.          if(param3 && (!highlightItemRenderer || highlightUID != _loc11_.uid))
  3275.          {
  3276.             if(!highlightIndicator)
  3277.             {
  3278.                _loc6_ = new SpriteAsset();
  3279.                _loc10_.addChild(DisplayObject(_loc6_));
  3280.                highlightIndicator = _loc6_;
  3281.             }
  3282.             else if(highlightIndicator.parent != _loc10_)
  3283.             {
  3284.                _loc10_.addChild(highlightIndicator);
  3285.             }
  3286.             else
  3287.             {
  3288.                _loc10_.setChildIndex(DisplayObject(highlightIndicator),_loc10_.numChildren - 1);
  3289.             }
  3290.             _loc6_ = highlightIndicator;
  3291.             drawHighlightIndicator(_loc6_,param1.x,_loc9_[_loc11_.rowIndex].y,param1.width,_loc9_[_loc11_.rowIndex].height,getStyle("rollOverColor"),param1);
  3292.             mx_internal::lastHighlightItemRenderer = highlightItemRenderer = param1;
  3293.             highlightUID = _loc11_.uid;
  3294.          }
  3295.          else if(!param3 && highlightItemRenderer && (_loc11_ && highlightUID == _loc11_.uid))
  3296.          {
  3297.             clearHighlightIndicator(highlightIndicator,param1);
  3298.             highlightItemRenderer = null;
  3299.             highlightUID = null;
  3300.          }
  3301.          if(param2)
  3302.          {
  3303.             _loc12_ = runningDataEffect ? param1.y - mx_internal::cachedPaddingTop : Number(_loc9_[_loc11_.rowIndex].y);
  3304.             if(!selectionIndicators[_loc11_.uid])
  3305.             {
  3306.                _loc6_ = new SpriteAsset();
  3307.                _loc6_.mouseEnabled = false;
  3308.                _loc10_.addChild(DisplayObject(_loc6_));
  3309.                selectionIndicators[_loc11_.uid] = _loc6_;
  3310.                drawSelectionIndicator(_loc6_,param1.x,_loc12_,param1.width,_loc9_[_loc11_.rowIndex].height,enabled ? getStyle("selectionColor") : getStyle("selectionDisabledColor"),param1);
  3311.                if(param5)
  3312.                {
  3313.                   applySelectionEffect(_loc6_,_loc11_.uid,param1);
  3314.                }
  3315.             }
  3316.             else
  3317.             {
  3318.                _loc6_ = selectionIndicators[_loc11_.uid];
  3319.                drawSelectionIndicator(_loc6_,param1.x,_loc12_,param1.width,_loc9_[_loc11_.rowIndex].height,enabled ? getStyle("selectionColor") : getStyle("selectionDisabledColor"),param1);
  3320.             }
  3321.          }
  3322.          else if(!param2)
  3323.          {
  3324.             if(Boolean(_loc11_) && Boolean(selectionIndicators[_loc11_.uid]))
  3325.             {
  3326.                if(selectionTweens[_loc11_.uid])
  3327.                {
  3328.                   selectionTweens[_loc11_.uid].removeEventListener(TweenEvent.TWEEN_UPDATE,mx_internal::selectionTween_updateHandler);
  3329.                   selectionTweens[_loc11_.uid].removeEventListener(TweenEvent.TWEEN_END,mx_internal::selectionTween_endHandler);
  3330.                   if(selectionIndicators[_loc11_.uid].alpha < 1)
  3331.                   {
  3332.                      Tween.mx_internal::removeTween(selectionTweens[_loc11_.uid]);
  3333.                   }
  3334.                   delete selectionTweens[_loc11_.uid];
  3335.                }
  3336.                _loc10_.removeChild(selectionIndicators[_loc11_.uid]);
  3337.                delete selectionIndicators[_loc11_.uid];
  3338.             }
  3339.          }
  3340.          if(param4)
  3341.          {
  3342.             if(showCaret)
  3343.             {
  3344.                if(!caretIndicator)
  3345.                {
  3346.                   _loc6_ = new SpriteAsset();
  3347.                   _loc6_.mouseEnabled = false;
  3348.                   _loc10_.addChild(DisplayObject(_loc6_));
  3349.                   caretIndicator = _loc6_;
  3350.                }
  3351.                else if(caretIndicator.parent != _loc10_)
  3352.                {
  3353.                   _loc10_.addChild(caretIndicator);
  3354.                }
  3355.                else
  3356.                {
  3357.                   _loc10_.setChildIndex(DisplayObject(caretIndicator),_loc10_.numChildren - 1);
  3358.                }
  3359.                _loc6_ = caretIndicator;
  3360.                drawCaretIndicator(_loc6_,param1.x,_loc9_[_loc11_.rowIndex].y,param1.width,_loc9_[_loc11_.rowIndex].height,getStyle("selectionColor"),param1);
  3361.                caretItemRenderer = param1;
  3362.                caretUID = _loc11_.uid;
  3363.             }
  3364.          }
  3365.          else if(!param4 && caretItemRenderer && caretUID == _loc11_.uid)
  3366.          {
  3367.             clearCaretIndicator(caretIndicator,param1);
  3368.             caretItemRenderer = null;
  3369.             caretUID = "";
  3370.          }
  3371.          if(param1 is IFlexDisplayObject)
  3372.          {
  3373.             if(param1 is IInvalidating)
  3374.             {
  3375.                IInvalidating(param1).invalidateDisplayList();
  3376.                IInvalidating(param1).validateNow();
  3377.             }
  3378.          }
  3379.          else if(param1 is IUITextField)
  3380.          {
  3381.             IUITextField(param1).validateNow();
  3382.          }
  3383.       }
  3384.       
  3385.       private function strictEqualityCompareFunction(param1:Object, param2:Object) : Boolean
  3386.       {
  3387.          return param1 === param2;
  3388.       }
  3389.       
  3390.       protected function dragExitHandler(param1:DragEvent) : void
  3391.       {
  3392.          if(param1.isDefaultPrevented())
  3393.          {
  3394.             return;
  3395.          }
  3396.          mx_internal::lastDragEvent = null;
  3397.          hideDropFeedback(param1);
  3398.          mx_internal::resetDragScrolling();
  3399.          DragManager.showFeedback(DragManager.NONE);
  3400.       }
  3401.       
  3402.       protected function adjustAfterRemove(param1:Array, param2:int, param3:Boolean) : Boolean
  3403.       {
  3404.          var data:ListBaseSelectionData = null;
  3405.          var requiresValueCommit:Boolean = false;
  3406.          var i:int = 0;
  3407.          var length:int = 0;
  3408.          var placeHolder:CursorBookmark = null;
  3409.          var s:String = null;
  3410.          var items:Array = param1;
  3411.          var location:int = param2;
  3412.          var emitEvent:Boolean = param3;
  3413.          requiresValueCommit = emitEvent;
  3414.          i = 0;
  3415.          length = int(items.length);
  3416.          for(s in selectedData)
  3417.          {
  3418.             i++;
  3419.             data = selectedData[s];
  3420.             if(data.index > location)
  3421.             {
  3422.                data.index -= length;
  3423.             }
  3424.          }
  3425.          if(mx_internal::_selectedIndex > location)
  3426.          {
  3427.             mx_internal::_selectedIndex -= length;
  3428.             requiresValueCommit = true;
  3429.          }
  3430.          if(i > 0 && mx_internal::_selectedIndex == -1)
  3431.          {
  3432.             mx_internal::_selectedIndex = data.index;
  3433.             _selectedItem = data.data;
  3434.             requiresValueCommit = true;
  3435.          }
  3436.          if(i == 0)
  3437.          {
  3438.             mx_internal::_selectedIndex = -1;
  3439.             mx_internal::bSelectionChanged = true;
  3440.             mx_internal::bSelectedIndexChanged = true;
  3441.             invalidateDisplayList();
  3442.          }
  3443.          if(anchorIndex > location)
  3444.          {
  3445.             anchorIndex -= length;
  3446.             placeHolder = iterator.bookmark;
  3447.             try
  3448.             {
  3449.                iterator.seek(CursorBookmark.FIRST,anchorIndex);
  3450.                anchorBookmark = iterator.bookmark;
  3451.             }
  3452.             catch(e:ItemPendingError)
  3453.             {
  3454.                e.addResponder(new ItemResponder(mx_internal::setBookmarkPendingResultHandler,mx_internal::setBookmarkPendingFailureHandler,{
  3455.                   "property":"anchorBookmark",
  3456.                   "value":anchorIndex
  3457.                }));
  3458.             }
  3459.             iterator.seek(placeHolder);
  3460.          }
  3461.          if(caretIndex > location)
  3462.          {
  3463.             caretIndex -= length;
  3464.             placeHolder = iterator.bookmark;
  3465.             try
  3466.             {
  3467.                iterator.seek(CursorBookmark.FIRST,caretIndex);
  3468.                caretBookmark = iterator.bookmark;
  3469.             }
  3470.             catch(e:ItemPendingError)
  3471.             {
  3472.                e.addResponder(new ItemResponder(mx_internal::setBookmarkPendingResultHandler,mx_internal::setBookmarkPendingFailureHandler,{
  3473.                   "property":"caretBookmark",
  3474.                   "value":caretIndex
  3475.                }));
  3476.             }
  3477.             iterator.seek(placeHolder);
  3478.          }
  3479.          return requiresValueCommit;
  3480.       }
  3481.       
  3482.       public function itemToIcon(param1:Object) : Class
  3483.       {
  3484.          var iconClass:Class = null;
  3485.          var icon:* = undefined;
  3486.          var data:Object = param1;
  3487.          if(data == null)
  3488.          {
  3489.             return null;
  3490.          }
  3491.          if(iconFunction != null)
  3492.          {
  3493.             return iconFunction(data);
  3494.          }
  3495.          if(data is XML)
  3496.          {
  3497.             try
  3498.             {
  3499.                if(data[iconField].length() != 0)
  3500.                {
  3501.                   icon = String(data[iconField]);
  3502.                   if(icon != null)
  3503.                   {
  3504.                      iconClass = Class(systemManager.getDefinitionByName(icon));
  3505.                      if(iconClass)
  3506.                      {
  3507.                         return iconClass;
  3508.                      }
  3509.                      return document[icon];
  3510.                   }
  3511.                }
  3512.             }
  3513.             catch(e:Error)
  3514.             {
  3515.             }
  3516.          }
  3517.          else if(data is Object)
  3518.          {
  3519.             try
  3520.             {
  3521.                if(data[iconField] != null)
  3522.                {
  3523.                   if(data[iconField] is Class)
  3524.                   {
  3525.                      return data[iconField];
  3526.                   }
  3527.                   if(data[iconField] is String)
  3528.                   {
  3529.                      iconClass = Class(systemManager.getDefinitionByName(data[iconField]));
  3530.                      if(iconClass)
  3531.                      {
  3532.                         return iconClass;
  3533.                      }
  3534.                      return document[data[iconField]];
  3535.                   }
  3536.                }
  3537.             }
  3538.             catch(e:Error)
  3539.             {
  3540.             }
  3541.          }
  3542.          return null;
  3543.       }
  3544.       
  3545.       override public function set enabled(param1:Boolean) : void
  3546.       {
  3547.          super.enabled = param1;
  3548.          var _loc2_:IFlexDisplayObject = border as IFlexDisplayObject;
  3549.          if(_loc2_)
  3550.          {
  3551.             if(_loc2_ is IUIComponent)
  3552.             {
  3553.                IUIComponent(_loc2_).enabled = param1;
  3554.             }
  3555.             if(_loc2_ is IInvalidating)
  3556.             {
  3557.                IInvalidating(_loc2_).invalidateDisplayList();
  3558.             }
  3559.          }
  3560.          itemsSizeChanged = true;
  3561.          invalidateDisplayList();
  3562.       }
  3563.       
  3564.       override public function get baselinePosition() : Number
  3565.       {
  3566.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  3567.          {
  3568.             return super.baselinePosition;
  3569.          }
  3570.          if(!mx_internal::validateBaselinePosition())
  3571.          {
  3572.             return NaN;
  3573.          }
  3574.          var _loc1_:* = dataProvider == null;
  3575.          var _loc2_:Boolean = dataProvider != null && dataProvider.length == 0;
  3576.          var _loc3_:Object = dataProvider;
  3577.          if(_loc1_ || _loc2_)
  3578.          {
  3579.             dataProvider = [null];
  3580.             validateNow();
  3581.          }
  3582.          if(!listItems || listItems.length == 0)
  3583.          {
  3584.             return super.baselinePosition;
  3585.          }
  3586.          var _loc4_:IUIComponent = listItems[0][0] as IUIComponent;
  3587.          if(!_loc4_)
  3588.          {
  3589.             return super.baselinePosition;
  3590.          }
  3591.          var _loc5_:ListBaseContentHolder = ListBaseContentHolder(_loc4_.parent);
  3592.          var _loc6_:Number = _loc5_.y + _loc4_.y + _loc4_.baselinePosition;
  3593.          if(_loc1_ || _loc2_)
  3594.          {
  3595.             dataProvider = _loc3_;
  3596.             validateNow();
  3597.          }
  3598.          return _loc6_;
  3599.       }
  3600.       
  3601.       public function addDataEffectItem(param1:Object) : void
  3602.       {
  3603.          if(modifiedCollectionView)
  3604.          {
  3605.             modifiedCollectionView.addItem(dataItemWrappersByRenderer[param1]);
  3606.          }
  3607.          if(iterator.afterLast)
  3608.          {
  3609.             iterator.seek(CursorBookmark.FIRST);
  3610.          }
  3611.          else
  3612.          {
  3613.             iterator.seek(CursorBookmark.CURRENT);
  3614.          }
  3615.          if(mx_internal::invalidateDisplayListFlag)
  3616.          {
  3617.             callLater(invalidateList);
  3618.          }
  3619.          else
  3620.          {
  3621.             invalidateList();
  3622.          }
  3623.       }
  3624.       
  3625.       private function makeRowsAndColumnsWithExtraRows(param1:Number, param2:Number) : void
  3626.       {
  3627.          var _loc3_:ListRowInfo = null;
  3628.          var _loc4_:ListRowInfo = null;
  3629.          var _loc5_:ListRowInfo = null;
  3630.          var _loc6_:int = 0;
  3631.          var _loc7_:Point = null;
  3632.          var _loc14_:int = 0;
  3633.          var _loc15_:int = 0;
  3634.          var _loc16_:int = 0;
  3635.          var _loc8_:int = offscreenExtraRows / 2;
  3636.          var _loc9_:int = offscreenExtraRows / 2;
  3637.          offscreenExtraRowsTop = Math.min(_loc8_,verticalScrollPosition);
  3638.          var _loc10_:int = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition - offscreenExtraRowsTop);
  3639.          seekPositionSafely(_loc10_);
  3640.          var _loc11_:CursorBookmark = iterator.bookmark;
  3641.          if(offscreenExtraRowsTop > 0)
  3642.          {
  3643.             makeRowsAndColumns(0,0,listContent.width,listContent.height,0,0,true,offscreenExtraRowsTop);
  3644.          }
  3645.          var _loc12_:Number = !!offscreenExtraRowsTop ? rowInfo[offscreenExtraRowsTop - 1].y + rowHeight : 0;
  3646.          _loc7_ = makeRowsAndColumns(0,_loc12_,listContent.width,_loc12_ + listContent.heightExcludingOffsets,0,offscreenExtraRowsTop);
  3647.          if(_loc9_ > 0 && !iterator.afterLast)
  3648.          {
  3649.             if(offscreenExtraRowsTop + _loc7_.y - 1 < 0)
  3650.             {
  3651.                _loc12_ = 0;
  3652.             }
  3653.             else
  3654.             {
  3655.                _loc12_ = rowInfo[offscreenExtraRowsTop + _loc7_.y - 1].y + rowInfo[offscreenExtraRowsTop + _loc7_.y - 1].height;
  3656.             }
  3657.             _loc14_ = int(listItems.length);
  3658.             _loc7_ = makeRowsAndColumns(0,_loc12_,listContent.width,_loc12_,0,offscreenExtraRowsTop + _loc7_.y,true,_loc9_);
  3659.             if(_loc7_.y == _loc9_)
  3660.             {
  3661.                while(_loc7_.y > 0 && listItems[listItems.length - 1] && listItems[listItems.length - 1].length == 0)
  3662.                {
  3663.                   --_loc7_.y;
  3664.                   listItems.pop();
  3665.                   rowInfo.pop();
  3666.                }
  3667.             }
  3668.             else if(_loc7_.y < _loc9_)
  3669.             {
  3670.                _loc15_ = listItems.length - (_loc14_ + _loc7_.y);
  3671.                if(_loc15_)
  3672.                {
  3673.                   _loc16_ = 0;
  3674.                   while(_loc16_ < _loc15_)
  3675.                   {
  3676.                      listItems.pop();
  3677.                      rowInfo.pop();
  3678.                      _loc16_++;
  3679.                   }
  3680.                }
  3681.             }
  3682.             offscreenExtraRowsBottom = _loc7_.y;
  3683.          }
  3684.          else
  3685.          {
  3686.             offscreenExtraRowsBottom = 0;
  3687.          }
  3688.          var _loc13_:Number = listContent.heightExcludingOffsets;
  3689.          listContent.topOffset = -offscreenExtraRowsTop * rowHeight;
  3690.          listContent.bottomOffset = offscreenExtraRowsBottom > 0 ? listItems[listItems.length - 1][0].y + rowHeight - _loc13_ + listContent.topOffset : 0;
  3691.          if(iteratorValid)
  3692.          {
  3693.             iterator.seek(_loc11_,0);
  3694.          }
  3695.          adjustListContent(param1,param2);
  3696.       }
  3697.       
  3698.       mx_internal function indicesToItemRenderer(param1:int, param2:int) : IListItemRenderer
  3699.       {
  3700.          return listItems[param1][param2];
  3701.       }
  3702.       
  3703.       mx_internal function getItemRendererForMouseEvent(param1:MouseEvent) : IListItemRenderer
  3704.       {
  3705.          return mouseEventToItemRenderer(param1);
  3706.       }
  3707.       
  3708.       mx_internal function set $verticalScrollPosition(param1:Number) : void
  3709.       {
  3710.          var _loc2_:int = super.verticalScrollPosition;
  3711.          if(_loc2_ != param1)
  3712.          {
  3713.             super.verticalScrollPosition = param1;
  3714.          }
  3715.       }
  3716.       
  3717.       protected function mouseOutHandler(param1:MouseEvent) : void
  3718.       {
  3719.          var _loc2_:IListItemRenderer = null;
  3720.          if(!enabled || !selectable)
  3721.          {
  3722.             return;
  3723.          }
  3724.          mx_internal::isPressed = param1.buttonDown;
  3725.          _loc2_ = mouseEventToItemRenderer(param1);
  3726.          if(!_loc2_)
  3727.          {
  3728.             return;
  3729.          }
  3730.          if(!mx_internal::isPressed)
  3731.          {
  3732.             if(itemRendererContains(_loc2_,param1.relatedObject) || param1.relatedObject == listContent || param1.relatedObject == highlightIndicator || !highlightItemRenderer)
  3733.             {
  3734.                return;
  3735.             }
  3736.             if(getStyle("useRollOver") && _loc2_.data != null)
  3737.             {
  3738.                mx_internal::clearHighlight(_loc2_);
  3739.             }
  3740.          }
  3741.       }
  3742.       
  3743.       public function set dropEnabled(param1:Boolean) : void
  3744.       {
  3745.          if(_dropEnabled && !param1)
  3746.          {
  3747.             removeEventListener(DragEvent.DRAG_ENTER,dragEnterHandler,false);
  3748.             removeEventListener(DragEvent.DRAG_EXIT,dragExitHandler,false);
  3749.             removeEventListener(DragEvent.DRAG_OVER,dragOverHandler,false);
  3750.             removeEventListener(DragEvent.DRAG_DROP,dragDropHandler,false);
  3751.          }
  3752.          _dropEnabled = param1;
  3753.          if(param1)
  3754.          {
  3755.             addEventListener(DragEvent.DRAG_ENTER,dragEnterHandler,false,EventPriority.DEFAULT_HANDLER);
  3756.             addEventListener(DragEvent.DRAG_EXIT,dragExitHandler,false,EventPriority.DEFAULT_HANDLER);
  3757.             addEventListener(DragEvent.DRAG_OVER,dragOverHandler,false,EventPriority.DEFAULT_HANDLER);
  3758.             addEventListener(DragEvent.DRAG_DROP,dragDropHandler,false,EventPriority.DEFAULT_HANDLER);
  3759.          }
  3760.       }
  3761.       
  3762.       protected function get listContentStyleFilters() : Object
  3763.       {
  3764.          return _listContentStyleFilters;
  3765.       }
  3766.       
  3767.       public function itemToLabel(param1:Object) : String
  3768.       {
  3769.          var data:Object = param1;
  3770.          if(data == null)
  3771.          {
  3772.             return " ";
  3773.          }
  3774.          if(labelFunction != null)
  3775.          {
  3776.             return labelFunction(data);
  3777.          }
  3778.          if(data is XML)
  3779.          {
  3780.             try
  3781.             {
  3782.                if(data[labelField].length() != 0)
  3783.                {
  3784.                   data = data[labelField];
  3785.                }
  3786.             }
  3787.             catch(e:Error)
  3788.             {
  3789.             }
  3790.          }
  3791.          else if(data is Object)
  3792.          {
  3793.             try
  3794.             {
  3795.                if(data[labelField] != null)
  3796.                {
  3797.                   data = data[labelField];
  3798.                }
  3799.             }
  3800.             catch(e:Error)
  3801.             {
  3802.             }
  3803.          }
  3804.          if(data is String)
  3805.          {
  3806.             return String(data);
  3807.          }
  3808.          try
  3809.          {
  3810.             return data.toString();
  3811.          }
  3812.          catch(e:Error)
  3813.          {
  3814.          }
  3815.          return " ";
  3816.       }
  3817.       
  3818.       public function set rowCount(param1:int) : void
  3819.       {
  3820.          explicitRowCount = param1;
  3821.          if(_rowCount != param1)
  3822.          {
  3823.             setRowCount(param1);
  3824.             rowCountChanged = true;
  3825.             invalidateProperties();
  3826.             invalidateSize();
  3827.             itemsSizeChanged = true;
  3828.             invalidateDisplayList();
  3829.             dispatchEvent(new Event("rowCountChanged"));
  3830.          }
  3831.       }
  3832.       
  3833.       public function set columnCount(param1:int) : void
  3834.       {
  3835.          explicitColumnCount = param1;
  3836.          if(_columnCount != param1)
  3837.          {
  3838.             mx_internal::setColumnCount(param1);
  3839.             columnCountChanged = true;
  3840.             invalidateProperties();
  3841.             invalidateSize();
  3842.             itemsSizeChanged = true;
  3843.             invalidateDisplayList();
  3844.             dispatchEvent(new Event("columnCountChanged"));
  3845.          }
  3846.       }
  3847.       
  3848.       private function partialPurgeItemRenderers() : void
  3849.       {
  3850.          var _loc1_:* = undefined;
  3851.          var _loc2_:String = null;
  3852.          var _loc3_:DisplayObject = null;
  3853.          var _loc4_:Dictionary = null;
  3854.          var _loc5_:* = undefined;
  3855.          dataEffectCompleted = false;
  3856.          while(freeItemRenderers.length)
  3857.          {
  3858.             _loc3_ = DisplayObject(freeItemRenderers.pop());
  3859.             if(_loc3_.parent)
  3860.             {
  3861.                listContent.removeChild(_loc3_);
  3862.             }
  3863.          }
  3864.          for(_loc1_ in freeItemRenderersByFactory)
  3865.          {
  3866.             _loc4_ = freeItemRenderersByFactory[_loc1_];
  3867.             for(_loc5_ in _loc4_)
  3868.             {
  3869.                _loc3_ = DisplayObject(_loc5_);
  3870.                delete _loc4_[_loc5_];
  3871.                if(_loc3_.parent)
  3872.                {
  3873.                   listContent.removeChild(_loc3_);
  3874.                }
  3875.             }
  3876.          }
  3877.          for(_loc2_ in reservedItemRenderers)
  3878.          {
  3879.             _loc3_ = DisplayObject(reservedItemRenderers[_loc2_]);
  3880.             if(_loc3_.parent)
  3881.             {
  3882.                listContent.removeChild(_loc3_);
  3883.             }
  3884.          }
  3885.          reservedItemRenderers = {};
  3886.          rowMap = {};
  3887.          clearVisibleData();
  3888.       }
  3889.       
  3890.       protected function seekPendingResultHandler(param1:Object, param2:ListBaseSeekPending) : void
  3891.       {
  3892.          var data:Object = param1;
  3893.          var info:ListBaseSeekPending = param2;
  3894.          if(info != lastSeekPending)
  3895.          {
  3896.             return;
  3897.          }
  3898.          lastSeekPending = null;
  3899.          iteratorValid = true;
  3900.          try
  3901.          {
  3902.             iterator.seek(info.bookmark,info.offset);
  3903.          }
  3904.          catch(e:ItemPendingError)
  3905.          {
  3906.             lastSeekPending = new ListBaseSeekPending(info.bookmark,info.offset);
  3907.             e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  3908.             iteratorValid = false;
  3909.          }
  3910.          if(bSortItemPending)
  3911.          {
  3912.             bSortItemPending = false;
  3913.             adjustAfterSort();
  3914.          }
  3915.          itemsSizeChanged = true;
  3916.          invalidateDisplayList();
  3917.       }
  3918.       
  3919.       mx_internal function mouseEventToItemRendererOrEditor(param1:MouseEvent) : IListItemRenderer
  3920.       {
  3921.          var _loc3_:Point = null;
  3922.          var _loc4_:Number = NaN;
  3923.          var _loc5_:int = 0;
  3924.          var _loc6_:int = 0;
  3925.          var _loc7_:int = 0;
  3926.          var _loc8_:int = 0;
  3927.          var _loc2_:DisplayObject = DisplayObject(param1.target);
  3928.          if(_loc2_ == listContent)
  3929.          {
  3930.             _loc3_ = new Point(param1.stageX,param1.stageY);
  3931.             _loc3_ = listContent.globalToLocal(_loc3_);
  3932.             _loc4_ = 0;
  3933.             _loc5_ = int(listItems.length);
  3934.             _loc6_ = 0;
  3935.             while(_loc6_ < _loc5_)
  3936.             {
  3937.                if(listItems[_loc6_].length)
  3938.                {
  3939.                   if(_loc3_.y < _loc4_ + rowInfo[_loc6_].height)
  3940.                   {
  3941.                      _loc7_ = int(listItems[_loc6_].length);
  3942.                      if(_loc7_ == 1)
  3943.                      {
  3944.                         return listItems[_loc6_][0];
  3945.                      }
  3946.                      _loc8_ = Math.floor(_loc3_.x / columnWidth);
  3947.                      return listItems[_loc6_][_loc8_];
  3948.                   }
  3949.                }
  3950.                _loc4_ += rowInfo[_loc6_].height;
  3951.                _loc6_++;
  3952.             }
  3953.          }
  3954.          else if(_loc2_ == highlightIndicator)
  3955.          {
  3956.             return mx_internal::lastHighlightItemRenderer;
  3957.          }
  3958.          while(Boolean(_loc2_) && _loc2_ != this)
  3959.          {
  3960.             if(_loc2_ is IListItemRenderer && _loc2_.parent == listContent)
  3961.             {
  3962.                if(_loc2_.visible)
  3963.                {
  3964.                   return IListItemRenderer(_loc2_);
  3965.                }
  3966.                break;
  3967.             }
  3968.             if(_loc2_ is IUIComponent)
  3969.             {
  3970.                _loc2_ = IUIComponent(_loc2_).owner;
  3971.             }
  3972.             else
  3973.             {
  3974.                _loc2_ = _loc2_.parent;
  3975.             }
  3976.          }
  3977.          return null;
  3978.       }
  3979.       
  3980.       protected function configureScrollBars() : void
  3981.       {
  3982.       }
  3983.       
  3984.       protected function clearVisibleData() : void
  3985.       {
  3986.          listContent.visibleData = {};
  3987.       }
  3988.       
  3989.       private function insertSelectionDataAfter(param1:String, param2:ListBaseSelectionData, param3:ListBaseSelectionData) : void
  3990.       {
  3991.          if(param3 == null)
  3992.          {
  3993.             firstSelectionData = lastSelectionData = param2;
  3994.          }
  3995.          else
  3996.          {
  3997.             if(param3 == lastSelectionData)
  3998.             {
  3999.                lastSelectionData = param2;
  4000.             }
  4001.             param2.mx_internal::prevSelectionData = param3;
  4002.             param2.mx_internal::nextSelectionData = param3.mx_internal::nextSelectionData;
  4003.             param3.mx_internal::nextSelectionData = param2;
  4004.          }
  4005.          selectedData[param1] = param2;
  4006.       }
  4007.       
  4008.       protected function moveSelectionVertically(param1:uint, param2:Boolean, param3:Boolean) : void
  4009.       {
  4010.          var _loc4_:Number = NaN;
  4011.          var _loc5_:IListItemRenderer = null;
  4012.          var _loc6_:String = null;
  4013.          var _loc7_:int = 0;
  4014.          var _loc13_:ScrollEvent = null;
  4015.          var _loc8_:Boolean = false;
  4016.          showCaret = true;
  4017.          var _loc9_:int = int(listItems.length);
  4018.          var _loc10_:int = listItems.length - offscreenExtraRowsTop - offscreenExtraRowsBottom;
  4019.          var _loc11_:int = rowInfo[_loc9_ - offscreenExtraRowsBottom - 1].y + rowInfo[_loc9_ - offscreenExtraRowsBottom - 1].height > listContent.heightExcludingOffsets - listContent.topOffset ? 1 : 0;
  4020.          var _loc12_:Boolean = false;
  4021.          bSelectItem = false;
  4022.          switch(param1)
  4023.          {
  4024.             case Keyboard.UP:
  4025.                if(caretIndex > 0)
  4026.                {
  4027.                   --caretIndex;
  4028.                   _loc12_ = true;
  4029.                   bSelectItem = true;
  4030.                }
  4031.                break;
  4032.             case Keyboard.DOWN:
  4033.                if(caretIndex < collection.length - 1)
  4034.                {
  4035.                   ++caretIndex;
  4036.                   _loc12_ = true;
  4037.                   bSelectItem = true;
  4038.                }
  4039.                else if(caretIndex == collection.length - 1 && Boolean(_loc11_))
  4040.                {
  4041.                   if(verticalScrollPosition < maxVerticalScrollPosition)
  4042.                   {
  4043.                      _loc4_ = verticalScrollPosition + 1;
  4044.                   }
  4045.                }
  4046.                break;
  4047.             case Keyboard.PAGE_UP:
  4048.                if(caretIndex > verticalScrollPosition && caretIndex < verticalScrollPosition + _loc10_)
  4049.                {
  4050.                   caretIndex = verticalScrollPosition;
  4051.                }
  4052.                else
  4053.                {
  4054.                   caretIndex = Math.max(caretIndex - Math.max(_loc10_ - _loc11_,1),0);
  4055.                   _loc4_ = Math.max(caretIndex,0);
  4056.                }
  4057.                bSelectItem = true;
  4058.                break;
  4059.             case Keyboard.PAGE_DOWN:
  4060.                if(!(caretIndex >= verticalScrollPosition && caretIndex < verticalScrollPosition + _loc10_ - _loc11_ - 1))
  4061.                {
  4062.                   if(caretIndex == verticalScrollPosition && _loc10_ - _loc11_ <= 1)
  4063.                   {
  4064.                      ++caretIndex;
  4065.                   }
  4066.                   _loc4_ = Math.max(Math.min(caretIndex,maxVerticalScrollPosition),0);
  4067.                }
  4068.                bSelectItem = true;
  4069.                break;
  4070.             case Keyboard.HOME:
  4071.                if(caretIndex > 0)
  4072.                {
  4073.                   caretIndex = 0;
  4074.                   bSelectItem = true;
  4075.                   _loc4_ = 0;
  4076.                }
  4077.                break;
  4078.             case Keyboard.END:
  4079.                if(caretIndex < collection.length - 1)
  4080.                {
  4081.                   caretIndex = collection.length - 1;
  4082.                   bSelectItem = true;
  4083.                   _loc4_ = maxVerticalScrollPosition;
  4084.                }
  4085.          }
  4086.          if(_loc12_)
  4087.          {
  4088.             if(caretIndex >= verticalScrollPosition + _loc10_ - _loc11_)
  4089.             {
  4090.                if(_loc10_ - _loc11_ == 0)
  4091.                {
  4092.                   _loc4_ = Math.min(maxVerticalScrollPosition,caretIndex);
  4093.                }
  4094.                else
  4095.                {
  4096.                   _loc4_ = Math.min(maxVerticalScrollPosition,caretIndex - _loc10_ + _loc11_ + 1);
  4097.                }
  4098.             }
  4099.             else if(caretIndex < verticalScrollPosition)
  4100.             {
  4101.                _loc4_ = Math.max(caretIndex,0);
  4102.             }
  4103.          }
  4104.          if(!isNaN(_loc4_))
  4105.          {
  4106.             if(verticalScrollPosition != _loc4_)
  4107.             {
  4108.                _loc13_ = new ScrollEvent(ScrollEvent.SCROLL);
  4109.                _loc13_.detail = ScrollEventDetail.THUMB_POSITION;
  4110.                _loc13_.direction = ScrollEventDirection.VERTICAL;
  4111.                _loc13_.delta = _loc4_ - verticalScrollPosition;
  4112.                _loc13_.position = _loc4_;
  4113.                verticalScrollPosition = _loc4_;
  4114.                dispatchEvent(_loc13_);
  4115.             }
  4116.             if(!iteratorValid)
  4117.             {
  4118.                keySelectionPending = true;
  4119.                return;
  4120.             }
  4121.          }
  4122.          bShiftKey = param2;
  4123.          bCtrlKey = param3;
  4124.          lastKey = param1;
  4125.          finishKeySelection();
  4126.       }
  4127.       
  4128.       protected function getReservedOrFreeItemRenderer(param1:Object) : IListItemRenderer
  4129.       {
  4130.          var _loc2_:IListItemRenderer = null;
  4131.          var _loc3_:String = null;
  4132.          var _loc4_:IFactory = null;
  4133.          var _loc5_:Dictionary = null;
  4134.          var _loc6_:* = undefined;
  4135.          if(runningDataEffect)
  4136.          {
  4137.             _loc2_ = IListItemRenderer(reservedItemRenderers[_loc3_ = itemToUID(param1)]);
  4138.          }
  4139.          if(_loc2_)
  4140.          {
  4141.             delete reservedItemRenderers[_loc3_];
  4142.          }
  4143.          else
  4144.          {
  4145.             _loc4_ = getItemRendererFactory(param1);
  4146.             if(freeItemRenderersByFactory)
  4147.             {
  4148.                if(_loc4_ == itemRenderer)
  4149.                {
  4150.                   if(freeItemRenderers.length)
  4151.                   {
  4152.                      _loc2_ = freeItemRenderers.pop();
  4153.                      delete freeItemRenderersByFactory[_loc4_][_loc2_];
  4154.                   }
  4155.                }
  4156.                else
  4157.                {
  4158.                   _loc5_ = freeItemRenderersByFactory[_loc4_];
  4159.                   if(_loc5_)
  4160.                   {
  4161.                      var _loc7_:int = 0;
  4162.                      var _loc8_:* = _loc5_;
  4163.                      for(_loc6_ in _loc8_)
  4164.                      {
  4165.                         _loc2_ = _loc6_;
  4166.                         delete freeItemRenderersByFactory[_loc4_][_loc2_];
  4167.                      }
  4168.                   }
  4169.                }
  4170.             }
  4171.          }
  4172.          return _loc2_;
  4173.       }
  4174.       
  4175.       protected function addDragData(param1:Object) : void
  4176.       {
  4177.          param1.addHandler(copySelectedItems,"items");
  4178.       }
  4179.       
  4180.       private function adjustAfterSort() : void
  4181.       {
  4182.          var p:String = null;
  4183.          var index:int = 0;
  4184.          var newVerticalScrollPosition:int = 0;
  4185.          var newHorizontalScrollPosition:int = 0;
  4186.          var pos:int = 0;
  4187.          var data:ListBaseSelectionData = null;
  4188.          var i:int = 0;
  4189.          for(p in selectedData)
  4190.          {
  4191.             i++;
  4192.          }
  4193.          index = !!anchorBookmark ? anchorBookmark.getViewIndex() : -1;
  4194.          if(index >= 0)
  4195.          {
  4196.             if(i == 1)
  4197.             {
  4198.                mx_internal::_selectedIndex = anchorIndex = caretIndex = index;
  4199.                data = selectedData[p];
  4200.                data.index = index;
  4201.             }
  4202.             newVerticalScrollPosition = indexToRow(index);
  4203.             if(newVerticalScrollPosition == -1)
  4204.             {
  4205.                return;
  4206.             }
  4207.             newVerticalScrollPosition = Math.min(maxVerticalScrollPosition,newVerticalScrollPosition);
  4208.             newHorizontalScrollPosition = indexToColumn(index);
  4209.             if(newHorizontalScrollPosition == -1)
  4210.             {
  4211.                return;
  4212.             }
  4213.             newHorizontalScrollPosition = Math.min(maxHorizontalScrollPosition,newHorizontalScrollPosition);
  4214.             pos = scrollPositionToIndex(newHorizontalScrollPosition,newVerticalScrollPosition);
  4215.             try
  4216.             {
  4217.                iterator.seek(CursorBookmark.CURRENT,pos - index);
  4218.                if(!iteratorValid)
  4219.                {
  4220.                   iteratorValid = true;
  4221.                   lastSeekPending = null;
  4222.                }
  4223.             }
  4224.             catch(e:ItemPendingError)
  4225.             {
  4226.                lastSeekPending = new ListBaseSeekPending(CursorBookmark.CURRENT,pos - index);
  4227.                e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  4228.                iteratorValid = false;
  4229.                return;
  4230.             }
  4231.             super.verticalScrollPosition = newVerticalScrollPosition;
  4232.             if(mx_internal::listType != "vertical")
  4233.             {
  4234.                super.horizontalScrollPosition = newHorizontalScrollPosition;
  4235.             }
  4236.          }
  4237.          else
  4238.          {
  4239.             try
  4240.             {
  4241.                index = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition - offscreenExtraRowsTop);
  4242.                iterator.seek(CursorBookmark.FIRST,index);
  4243.                if(!iteratorValid)
  4244.                {
  4245.                   iteratorValid = true;
  4246.                   lastSeekPending = null;
  4247.                }
  4248.             }
  4249.             catch(e:ItemPendingError)
  4250.             {
  4251.                lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,index);
  4252.                e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  4253.                iteratorValid = false;
  4254.                return;
  4255.             }
  4256.          }
  4257.          if(i > 1)
  4258.          {
  4259.             commitSelectedItems(selectedItems);
  4260.          }
  4261.       }
  4262.       
  4263.       public function set listData(param1:BaseListData) : void
  4264.       {
  4265.          _listData = param1;
  4266.       }
  4267.       
  4268.       private function initiateSelectionTracking(param1:Array) : void
  4269.       {
  4270.          var _loc3_:IListItemRenderer = null;
  4271.          var _loc2_:int = 0;
  4272.          while(_loc2_ < param1.length)
  4273.          {
  4274.             _loc3_ = param1[_loc2_] as IListItemRenderer;
  4275.             if(selectedData[itemToUID(_loc3_.data)])
  4276.             {
  4277.                _loc3_.addEventListener(MoveEvent.MOVE,rendererMoveHandler);
  4278.                trackedRenderers.push(_loc3_);
  4279.             }
  4280.             _loc2_++;
  4281.          }
  4282.       }
  4283.       
  4284.       private function setSelectionDataLoop(param1:Array, param2:int, param3:Boolean = true) : void
  4285.       {
  4286.          var uid:String = null;
  4287.          var item:Object = null;
  4288.          var bookmark:CursorBookmark = null;
  4289.          var compareFunction:Function = null;
  4290.          var selectionData:ListBaseSelectionData = null;
  4291.          var lastSelectionData:ListBaseSelectionData = null;
  4292.          var len:int = 0;
  4293.          var data:Object = null;
  4294.          var i:int = 0;
  4295.          var items:Array = param1;
  4296.          var index:int = param2;
  4297.          var useFind:Boolean = param3;
  4298.          if(useFind)
  4299.          {
  4300.             while(items.length)
  4301.             {
  4302.                item = items.pop();
  4303.                uid = itemToUID(item);
  4304.                try
  4305.                {
  4306.                   mx_internal::collectionIterator.findAny(item);
  4307.                }
  4308.                catch(e1:ItemPendingError)
  4309.                {
  4310.                   items.push(item);
  4311.                   e1.addResponder(new ItemResponder(mx_internal::selectionDataPendingResultHandler,selectionDataPendingFailureHandler,new ListBaseSelectionDataPending(useFind,0,items,null,0)));
  4312.                   return;
  4313.                }
  4314.                bookmark = mx_internal::collectionIterator.bookmark;
  4315.                index = bookmark.getViewIndex();
  4316.                if(index < 0)
  4317.                {
  4318.                   try
  4319.                   {
  4320.                      mx_internal::collectionIterator.seek(CursorBookmark.FIRST,0);
  4321.                   }
  4322.                   catch(e2:ItemPendingError)
  4323.                   {
  4324.                      e2.addResponder(new ItemResponder(mx_internal::selectionDataPendingResultHandler,selectionDataPendingFailureHandler,new ListBaseSelectionDataPending(false,0,items,CursorBookmark.FIRST,0)));
  4325.                      return;
  4326.                   }
  4327.                   setSelectionDataLoop(items,0,false);
  4328.                   return;
  4329.                }
  4330.                insertSelectionDataBefore(uid,new ListBaseSelectionData(item,index,true),firstSelectionData);
  4331.                if(items.length == 0)
  4332.                {
  4333.                   mx_internal::_selectedIndex = index;
  4334.                   _selectedItem = item;
  4335.                   caretIndex = index;
  4336.                   caretBookmark = mx_internal::collectionIterator.bookmark;
  4337.                   anchorIndex = index;
  4338.                   anchorBookmark = mx_internal::collectionIterator.bookmark;
  4339.                }
  4340.             }
  4341.          }
  4342.          else
  4343.          {
  4344.             compareFunction = selectedItemsCompareFunction;
  4345.             if(compareFunction == null)
  4346.             {
  4347.                compareFunction = strictEqualityCompareFunction;
  4348.             }
  4349.             while(Boolean(items.length) && !mx_internal::collectionIterator.afterLast)
  4350.             {
  4351.                len = int(items.length);
  4352.                data = mx_internal::collectionIterator.current;
  4353.                i = 0;
  4354.                while(i < len)
  4355.                {
  4356.                   item = items[i];
  4357.                   if(compareFunction(data,item))
  4358.                   {
  4359.                      uid = itemToUID(data);
  4360.                      selectionDataArray[proposedSelectedItemIndexes[uid]] = new ListBaseSelectionData(data,index,false);
  4361.                      items.splice(i,1);
  4362.                      if(item === firstSelectedItem)
  4363.                      {
  4364.                         mx_internal::_selectedIndex = index;
  4365.                         _selectedItem = data;
  4366.                         caretIndex = index;
  4367.                         caretBookmark = mx_internal::collectionIterator.bookmark;
  4368.                         anchorIndex = index;
  4369.                         anchorBookmark = mx_internal::collectionIterator.bookmark;
  4370.                      }
  4371.                      break;
  4372.                   }
  4373.                   i++;
  4374.                }
  4375.                mx_internal::collectionIterator.moveNext();
  4376.                index++;
  4377.             }
  4378.             len = int(selectionDataArray.length);
  4379.             lastSelectionData = firstSelectionData;
  4380.             if(len)
  4381.             {
  4382.                selectionData = selectionDataArray[0];
  4383.                if(selectionData)
  4384.                {
  4385.                   uid = itemToUID(selectionData.data);
  4386.                   insertSelectionDataBefore(uid,selectionData,firstSelectionData);
  4387.                   lastSelectionData = selectionData;
  4388.                }
  4389.             }
  4390.             i = 1;
  4391.             while(i < len)
  4392.             {
  4393.                selectionData = selectionDataArray[i];
  4394.                if(selectionData)
  4395.                {
  4396.                   uid = itemToUID(selectionData.data);
  4397.                   insertSelectionDataAfter(uid,selectionData,lastSelectionData);
  4398.                   lastSelectionData = selectionData;
  4399.                }
  4400.                i++;
  4401.             }
  4402.             selectionDataArray = null;
  4403.             proposedSelectedItemIndexes = null;
  4404.             firstSelectedItem = null;
  4405.          }
  4406.          if(initialized)
  4407.          {
  4408.             updateList();
  4409.          }
  4410.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  4411.       }
  4412.       
  4413.       public function set dragEnabled(param1:Boolean) : void
  4414.       {
  4415.          if(_dragEnabled && !param1)
  4416.          {
  4417.             removeEventListener(DragEvent.DRAG_START,dragStartHandler,false);
  4418.             removeEventListener(DragEvent.DRAG_COMPLETE,dragCompleteHandler,false);
  4419.          }
  4420.          _dragEnabled = param1;
  4421.          if(param1)
  4422.          {
  4423.             addEventListener(DragEvent.DRAG_START,dragStartHandler,false,EventPriority.DEFAULT_HANDLER);
  4424.             addEventListener(DragEvent.DRAG_COMPLETE,dragCompleteHandler,false,EventPriority.DEFAULT_HANDLER);
  4425.          }
  4426.       }
  4427.       
  4428.       mx_internal function getListContentHolder() : ListBaseContentHolder
  4429.       {
  4430.          return listContent;
  4431.       }
  4432.       
  4433.       public function set iconFunction(param1:Function) : void
  4434.       {
  4435.          _iconFunction = param1;
  4436.          itemsSizeChanged = true;
  4437.          invalidateDisplayList();
  4438.          dispatchEvent(new Event("iconFunctionChanged"));
  4439.       }
  4440.       
  4441.       protected function initiateDataChangeEffect(param1:Number, param2:Number) : void
  4442.       {
  4443.          var _loc9_:Array = null;
  4444.          var _loc10_:int = 0;
  4445.          var _loc11_:Object = null;
  4446.          actualCollection = collection;
  4447.          actualIterator = iterator;
  4448.          collection = modifiedCollectionView;
  4449.          modifiedCollectionView.showPreservedState = true;
  4450.          listContent.iterator = iterator = collection.createCursor();
  4451.          var _loc3_:int = scrollPositionToIndex(horizontalScrollPosition - offscreenExtraColumnsLeft,verticalScrollPosition - offscreenExtraRowsTop);
  4452.          iterator.seek(CursorBookmark.FIRST,_loc3_);
  4453.          updateDisplayList(param1,param2);
  4454.          var _loc4_:Array = [];
  4455.          var _loc5_:Dictionary = new Dictionary(true);
  4456.          var _loc6_:int = 0;
  4457.          while(_loc6_ < listItems.length)
  4458.          {
  4459.             _loc9_ = listItems[_loc6_];
  4460.             if((Boolean(_loc9_)) && _loc9_.length > 0)
  4461.             {
  4462.                _loc10_ = 0;
  4463.                while(_loc10_ < _loc9_.length)
  4464.                {
  4465.                   _loc11_ = _loc9_[_loc10_];
  4466.                   if(_loc11_)
  4467.                   {
  4468.                      _loc4_.push(_loc11_);
  4469.                      _loc5_[_loc11_] = true;
  4470.                   }
  4471.                   _loc10_++;
  4472.                }
  4473.             }
  4474.             _loc6_++;
  4475.          }
  4476.          cachedItemsChangeEffect.targets = _loc4_;
  4477.          if(cachedItemsChangeEffect.effectTargetHost != this)
  4478.          {
  4479.             cachedItemsChangeEffect.effectTargetHost = this;
  4480.          }
  4481.          cachedItemsChangeEffect.captureStartValues();
  4482.          modifiedCollectionView.showPreservedState = false;
  4483.          iterator.seek(CursorBookmark.FIRST,_loc3_);
  4484.          itemsSizeChanged = true;
  4485.          updateDisplayList(param1,param2);
  4486.          var _loc7_:Array = [];
  4487.          var _loc8_:Array = cachedItemsChangeEffect.targets;
  4488.          _loc6_ = 0;
  4489.          while(_loc6_ < listItems.length)
  4490.          {
  4491.             _loc9_ = listItems[_loc6_];
  4492.             if((Boolean(_loc9_)) && _loc9_.length > 0)
  4493.             {
  4494.                _loc10_ = 0;
  4495.                while(_loc10_ < _loc9_.length)
  4496.                {
  4497.                   _loc11_ = _loc9_[_loc10_];
  4498.                   if((Boolean(_loc11_)) && !_loc5_[_loc11_])
  4499.                   {
  4500.                      _loc8_.push(_loc11_);
  4501.                      _loc7_.push(_loc11_);
  4502.                   }
  4503.                   _loc10_++;
  4504.                }
  4505.             }
  4506.             _loc6_++;
  4507.          }
  4508.          if(_loc7_.length > 0)
  4509.          {
  4510.             cachedItemsChangeEffect.targets = _loc8_;
  4511.             cachedItemsChangeEffect.captureMoreStartValues(_loc7_);
  4512.          }
  4513.          cachedItemsChangeEffect.captureEndValues();
  4514.          modifiedCollectionView.showPreservedState = true;
  4515.          iterator.seek(CursorBookmark.FIRST,_loc3_);
  4516.          itemsSizeChanged = true;
  4517.          updateDisplayList(param1,param2);
  4518.          initiateSelectionTracking(_loc8_);
  4519.          cachedItemsChangeEffect.addEventListener(EffectEvent.EFFECT_END,finishDataChangeEffect);
  4520.          cachedItemsChangeEffect.play();
  4521.       }
  4522.       
  4523.       [Bindable("labelFunctionChanged")]
  4524.       public function get labelFunction() : Function
  4525.       {
  4526.          return _labelFunction;
  4527.       }
  4528.       
  4529.       [Bindable("dataTipFieldChanged")]
  4530.       public function get dataTipField() : String
  4531.       {
  4532.          return _dataTipField;
  4533.       }
  4534.       
  4535.       protected function adjustListContent(param1:Number = -1, param2:Number = -1) : void
  4536.       {
  4537.          if(param2 < 0)
  4538.          {
  4539.             param2 = oldUnscaledHeight;
  4540.             param1 = oldUnscaledWidth;
  4541.          }
  4542.          var _loc3_:Number = viewMetrics.left + listContent.leftOffset;
  4543.          var _loc4_:Number = viewMetrics.top + listContent.topOffset;
  4544.          listContent.move(_loc3_,_loc4_);
  4545.          var _loc5_:Number = Math.max(0,listContent.rightOffset) - _loc3_ - viewMetrics.right;
  4546.          var _loc6_:Number = Math.max(0,listContent.bottomOffset) - _loc4_ - viewMetrics.bottom;
  4547.          listContent.setActualSize(param1 + _loc5_,param2 + _loc6_);
  4548.       }
  4549.       
  4550.       [Bindable("valueCommit")]
  4551.       [Bindable("change")]
  4552.       public function get selectedIndex() : int
  4553.       {
  4554.          return mx_internal::_selectedIndex;
  4555.       }
  4556.       
  4557.       mx_internal function setBookmarkPendingFailureHandler(param1:Object, param2:Object) : void
  4558.       {
  4559.       }
  4560.       
  4561.       private function insertSelectionDataBefore(param1:String, param2:ListBaseSelectionData, param3:ListBaseSelectionData) : void
  4562.       {
  4563.          if(param3 == null)
  4564.          {
  4565.             firstSelectionData = lastSelectionData = param2;
  4566.          }
  4567.          else
  4568.          {
  4569.             if(param3 == firstSelectionData)
  4570.             {
  4571.                firstSelectionData = param2;
  4572.             }
  4573.             param2.mx_internal::nextSelectionData = param3;
  4574.             param2.mx_internal::prevSelectionData = param3.mx_internal::prevSelectionData;
  4575.             param3.mx_internal::prevSelectionData = param2;
  4576.          }
  4577.          selectedData[param1] = param2;
  4578.       }
  4579.       
  4580.       mx_internal function getCaretIndex() : int
  4581.       {
  4582.          return caretIndex;
  4583.       }
  4584.       
  4585.       mx_internal function removeClipMask() : void
  4586.       {
  4587.          var _loc7_:DisplayObject = null;
  4588.          if(Boolean(listContent) && Boolean(listContent.mask))
  4589.          {
  4590.             return;
  4591.          }
  4592.          var _loc1_:int = int(listItems.length - 1);
  4593.          if(_loc1_ < 0)
  4594.          {
  4595.             return;
  4596.          }
  4597.          var _loc2_:Number = Number(rowInfo[_loc1_].height);
  4598.          var _loc3_:ListRowInfo = rowInfo[_loc1_];
  4599.          var _loc4_:Array = listItems[_loc1_];
  4600.          var _loc5_:int = int(_loc4_.length);
  4601.          var _loc6_:int = 0;
  4602.          while(_loc6_ < _loc5_)
  4603.          {
  4604.             _loc7_ = _loc4_[_loc6_];
  4605.             if(_loc7_ is IUITextField)
  4606.             {
  4607.                if(_loc7_.height != _loc2_ - (_loc7_.y - _loc3_.y))
  4608.                {
  4609.                   _loc7_.height = _loc2_ - (_loc7_.y - _loc3_.y);
  4610.                }
  4611.             }
  4612.             else if(Boolean(_loc7_) && Boolean(_loc7_.mask))
  4613.             {
  4614.                mx_internal::itemMaskFreeList.push(_loc7_.mask);
  4615.                _loc7_.mask = null;
  4616.             }
  4617.             _loc6_++;
  4618.          }
  4619.       }
  4620.       
  4621.       mx_internal function reconstructDataFromListItems() : Array
  4622.       {
  4623.          var _loc1_:Array = null;
  4624.          var _loc2_:int = 0;
  4625.          var _loc3_:IListItemRenderer = null;
  4626.          var _loc4_:Object = null;
  4627.          var _loc5_:Object = null;
  4628.          var _loc6_:int = 0;
  4629.          if(!listItems)
  4630.          {
  4631.             return [];
  4632.          }
  4633.          _loc1_ = [];
  4634.          _loc2_ = 0;
  4635.          while(_loc2_ < listItems.length)
  4636.          {
  4637.             if(listItems[_loc2_])
  4638.             {
  4639.                _loc3_ = listItems[_loc2_][0] as IListItemRenderer;
  4640.                if(_loc3_)
  4641.                {
  4642.                   _loc4_ = _loc3_.data;
  4643.                   _loc1_.push(_loc4_);
  4644.                   _loc6_ = 0;
  4645.                   while(_loc6_ < listItems[_loc2_].length)
  4646.                   {
  4647.                      _loc3_ = listItems[_loc2_][_loc6_] as IListItemRenderer;
  4648.                      if(_loc3_)
  4649.                      {
  4650.                         _loc5_ = _loc3_.data;
  4651.                         if(_loc5_ != _loc4_)
  4652.                         {
  4653.                            _loc1_.push(_loc5_);
  4654.                         }
  4655.                      }
  4656.                      _loc6_++;
  4657.                   }
  4658.                }
  4659.             }
  4660.             _loc2_++;
  4661.          }
  4662.          return _loc1_;
  4663.       }
  4664.       
  4665.       public function set dataTipFunction(param1:Function) : void
  4666.       {
  4667.          _dataTipFunction = param1;
  4668.          itemsSizeChanged = true;
  4669.          invalidateDisplayList();
  4670.          dispatchEvent(new Event("dataTipFunctionChanged"));
  4671.       }
  4672.       
  4673.       private function calculateSelectedIndexAndItem() : void
  4674.       {
  4675.          var _loc2_:String = null;
  4676.          var _loc1_:int = 0;
  4677.          var _loc3_:int = 0;
  4678.          var _loc4_:* = selectedData;
  4679.          for(_loc2_ in _loc4_)
  4680.          {
  4681.             _loc1_ = 1;
  4682.          }
  4683.          if(!_loc1_)
  4684.          {
  4685.             mx_internal::_selectedIndex = -1;
  4686.             _selectedItem = null;
  4687.             return;
  4688.          }
  4689.          mx_internal::_selectedIndex = selectedData[_loc2_].index;
  4690.          _selectedItem = selectedData[_loc2_].data;
  4691.       }
  4692.       
  4693.       protected function scrollPositionToIndex(param1:int, param2:int) : int
  4694.       {
  4695.          return !!iterator ? param2 : -1;
  4696.       }
  4697.       
  4698.       override protected function createChildren() : void
  4699.       {
  4700.          super.createChildren();
  4701.          if(!listContent)
  4702.          {
  4703.             listContent = new ListBaseContentHolder(this);
  4704.             listContent.styleName = new StyleProxy(this,listContentStyleFilters);
  4705.             addChild(listContent);
  4706.          }
  4707.          if(!selectionLayer)
  4708.          {
  4709.             selectionLayer = listContent.selectionLayer;
  4710.          }
  4711.       }
  4712.       
  4713.       public function findString(param1:String) : Boolean
  4714.       {
  4715.          var stopIndex:int;
  4716.          var i:int;
  4717.          var cursorPos:CursorBookmark = null;
  4718.          var bMovedNext:Boolean = false;
  4719.          var str:String = param1;
  4720.          if(!collection || collection.length == 0)
  4721.          {
  4722.             return false;
  4723.          }
  4724.          cursorPos = iterator.bookmark;
  4725.          stopIndex = selectedIndex;
  4726.          i = stopIndex + 1;
  4727.          if(selectedIndex == -1)
  4728.          {
  4729.             try
  4730.             {
  4731.                iterator.seek(CursorBookmark.FIRST,0);
  4732.             }
  4733.             catch(e1:ItemPendingError)
  4734.             {
  4735.                e1.addResponder(new ItemResponder(findPendingResultHandler,findPendingFailureHandler,new ListBaseFindPending(str,cursorPos,CursorBookmark.FIRST,0,0,collection.length)));
  4736.                iteratorValid = false;
  4737.                return false;
  4738.             }
  4739.             stopIndex = collection.length;
  4740.             i = 0;
  4741.          }
  4742.          else
  4743.          {
  4744.             try
  4745.             {
  4746.                iterator.seek(CursorBookmark.FIRST,stopIndex);
  4747.             }
  4748.             catch(e2:ItemPendingError)
  4749.             {
  4750.                if(anchorIndex == collection.length - 1)
  4751.                {
  4752.                   e2.addResponder(new ItemResponder(findPendingResultHandler,findPendingFailureHandler,new ListBaseFindPending(str,cursorPos,CursorBookmark.FIRST,0,0,collection.length)));
  4753.                }
  4754.                else
  4755.                {
  4756.                   e2.addResponder(new ItemResponder(findPendingResultHandler,findPendingFailureHandler,new ListBaseFindPending(str,cursorPos,anchorBookmark,1,anchorIndex + 1,anchorIndex)));
  4757.                }
  4758.                iteratorValid = false;
  4759.                return false;
  4760.             }
  4761.             bMovedNext = false;
  4762.             try
  4763.             {
  4764.                bMovedNext = iterator.moveNext();
  4765.             }
  4766.             catch(e3:ItemPendingError)
  4767.             {
  4768.                e3.addResponder(new ItemResponder(findPendingResultHandler,findPendingFailureHandler,new ListBaseFindPending(str,cursorPos,anchorBookmark,1,anchorIndex + 1,anchorIndex)));
  4769.                iteratorValid = false;
  4770.                return false;
  4771.             }
  4772.             if(!bMovedNext)
  4773.             {
  4774.                try
  4775.                {
  4776.                   iterator.seek(CursorBookmark.FIRST,0);
  4777.                }
  4778.                catch(e4:ItemPendingError)
  4779.                {
  4780.                   e4.addResponder(new ItemResponder(findPendingResultHandler,findPendingFailureHandler,new ListBaseFindPending(str,cursorPos,CursorBookmark.FIRST,0,0,collection.length)));
  4781.                   iteratorValid = false;
  4782.                   return false;
  4783.                }
  4784.                stopIndex = collection.length;
  4785.                i = 0;
  4786.             }
  4787.          }
  4788.          return findStringLoop(str,cursorPos,i,stopIndex);
  4789.       }
  4790.       
  4791.       private function commitSelectedItem(param1:Object, param2:Boolean = true) : void
  4792.       {
  4793.          if(param2)
  4794.          {
  4795.             clearSelected();
  4796.          }
  4797.          if(param1 != null)
  4798.          {
  4799.             commitSelectedItems([param1]);
  4800.          }
  4801.       }
  4802.       
  4803.       [Bindable("selectedItemsCompareFunctionChanged")]
  4804.       public function get selectedItemsCompareFunction() : Function
  4805.       {
  4806.          return _selectedItemsCompareFunction;
  4807.       }
  4808.       
  4809.       mx_internal function commitSelectedIndex(param1:int) : void
  4810.       {
  4811.          var bookmark:CursorBookmark = null;
  4812.          var len:int = 0;
  4813.          var data:Object = null;
  4814.          var selectedBookmark:CursorBookmark = null;
  4815.          var uid:String = null;
  4816.          var value:int = param1;
  4817.          if(value != -1)
  4818.          {
  4819.             value = Math.min(value,collection.length - 1);
  4820.             bookmark = iterator.bookmark;
  4821.             len = value - scrollPositionToIndex(horizontalScrollPosition - offscreenExtraColumnsLeft,verticalScrollPosition - offscreenExtraRowsTop);
  4822.             try
  4823.             {
  4824.                iterator.seek(CursorBookmark.CURRENT,len);
  4825.             }
  4826.             catch(e:ItemPendingError)
  4827.             {
  4828.                iterator.seek(bookmark,0);
  4829.                mx_internal::bSelectedIndexChanged = true;
  4830.                mx_internal::_selectedIndex = value;
  4831.                return;
  4832.             }
  4833.             data = iterator.current;
  4834.             selectedBookmark = iterator.bookmark;
  4835.             uid = itemToUID(data);
  4836.             iterator.seek(bookmark,0);
  4837.             if(!selectedData[uid])
  4838.             {
  4839.                if(Boolean(listContent) && Boolean(UIDToItemRenderer(uid)))
  4840.                {
  4841.                   selectItem(UIDToItemRenderer(uid),false,false);
  4842.                }
  4843.                else
  4844.                {
  4845.                   clearSelected();
  4846.                   insertSelectionDataBefore(uid,new ListBaseSelectionData(data,value,approximate),firstSelectionData);
  4847.                   mx_internal::_selectedIndex = value;
  4848.                   caretIndex = value;
  4849.                   caretBookmark = selectedBookmark;
  4850.                   anchorIndex = value;
  4851.                   anchorBookmark = selectedBookmark;
  4852.                   _selectedItem = data;
  4853.                }
  4854.             }
  4855.          }
  4856.          else
  4857.          {
  4858.             clearSelected();
  4859.          }
  4860.          dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  4861.       }
  4862.       
  4863.       protected function get visibleData() : Object
  4864.       {
  4865.          return listContent.visibleData;
  4866.       }
  4867.       
  4868.       public function set rowHeight(param1:Number) : void
  4869.       {
  4870.          explicitRowHeight = param1;
  4871.          if(_rowHeight != param1)
  4872.          {
  4873.             setRowHeight(param1);
  4874.             invalidateSize();
  4875.             itemsSizeChanged = true;
  4876.             invalidateDisplayList();
  4877.             dispatchEvent(new Event("rowHeightChanged"));
  4878.          }
  4879.       }
  4880.       
  4881.       private function seekNextSafely(param1:IViewCursor, param2:int) : Boolean
  4882.       {
  4883.          var iterator:IViewCursor = param1;
  4884.          var pos:int = param2;
  4885.          try
  4886.          {
  4887.             iterator.moveNext();
  4888.          }
  4889.          catch(e:ItemPendingError)
  4890.          {
  4891.             lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,pos);
  4892.             e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  4893.             iteratorValid = false;
  4894.          }
  4895.          return iteratorValid;
  4896.       }
  4897.       
  4898.       public function showDropFeedback(param1:DragEvent) : void
  4899.       {
  4900.          var _loc6_:Class = null;
  4901.          var _loc7_:EdgeMetrics = null;
  4902.          if(!mx_internal::dropIndicator)
  4903.          {
  4904.             _loc6_ = getStyle("dropIndicatorSkin");
  4905.             if(!_loc6_)
  4906.             {
  4907.                _loc6_ = ListDropIndicator;
  4908.             }
  4909.             mx_internal::dropIndicator = IFlexDisplayObject(new _loc6_());
  4910.             _loc7_ = viewMetrics;
  4911.             drawFocus(true);
  4912.             mx_internal::dropIndicator.x = 2;
  4913.             mx_internal::dropIndicator.setActualSize(listContent.width - 4,4);
  4914.             mx_internal::dropIndicator.visible = true;
  4915.             listContent.addChild(DisplayObject(mx_internal::dropIndicator));
  4916.             if(collection)
  4917.             {
  4918.                if(mx_internal::dragScrollingInterval == 0)
  4919.                {
  4920.                   mx_internal::dragScrollingInterval = setInterval(dragScroll,15);
  4921.                }
  4922.             }
  4923.          }
  4924.          var _loc2_:int = int(listItems.length);
  4925.          var _loc3_:int = rowInfo[_loc2_ - offscreenExtraRowsBottom - 1].y + rowInfo[_loc2_ - offscreenExtraRowsBottom - 1].height > listContent.heightExcludingOffsets - listContent.topOffset ? 1 : 0;
  4926.          var _loc4_:Number = calculateDropIndex(param1);
  4927.          _loc4_ = _loc4_ - verticalScrollPosition;
  4928.          var _loc5_:Number = listItems.length;
  4929.          if(_loc4_ >= _loc5_)
  4930.          {
  4931.             if(_loc3_)
  4932.             {
  4933.                _loc4_ = _loc5_ - 1;
  4934.             }
  4935.             else
  4936.             {
  4937.                _loc4_ = _loc5_;
  4938.             }
  4939.          }
  4940.          if(_loc4_ < 0)
  4941.          {
  4942.             _loc4_ = 0;
  4943.          }
  4944.          mx_internal::dropIndicator.y = calculateDropIndicatorY(_loc5_,_loc4_ + offscreenExtraRowsTop);
  4945.       }
  4946.       
  4947.       public function set data(param1:Object) : void
  4948.       {
  4949.          _data = param1;
  4950.          if(Boolean(_listData) && _listData is DataGridListData)
  4951.          {
  4952.             selectedItem = _data[DataGridListData(_listData).dataField];
  4953.          }
  4954.          else if(_listData is ListData && ListData(_listData).labelField in _data)
  4955.          {
  4956.             selectedItem = _data[ListData(_listData).labelField];
  4957.          }
  4958.          else
  4959.          {
  4960.             selectedItem = _data;
  4961.          }
  4962.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  4963.       }
  4964.       
  4965.       public function get rowCount() : int
  4966.       {
  4967.          return _rowCount;
  4968.       }
  4969.       
  4970.       mx_internal function get rendererArray() : Array
  4971.       {
  4972.          return listItems;
  4973.       }
  4974.       
  4975.       public function get columnCount() : int
  4976.       {
  4977.          return _columnCount;
  4978.       }
  4979.       
  4980.       protected function purgeItemRenderers() : void
  4981.       {
  4982.          var _loc1_:* = undefined;
  4983.          var _loc2_:Array = null;
  4984.          var _loc3_:IListItemRenderer = null;
  4985.          var _loc4_:DisplayObject = null;
  4986.          var _loc5_:Dictionary = null;
  4987.          var _loc6_:* = undefined;
  4988.          rendererChanged = false;
  4989.          while(listItems.length)
  4990.          {
  4991.             _loc2_ = listItems.pop();
  4992.             while(_loc2_.length)
  4993.             {
  4994.                _loc3_ = IListItemRenderer(_loc2_.pop());
  4995.                if(_loc3_)
  4996.                {
  4997.                   listContent.removeChild(DisplayObject(_loc3_));
  4998.                   if(dataItemWrappersByRenderer[_loc3_])
  4999.                   {
  5000.                      delete visibleData[itemToUID(dataItemWrappersByRenderer[_loc3_])];
  5001.                   }
  5002.                   else
  5003.                   {
  5004.                      delete visibleData[itemToUID(_loc3_.data)];
  5005.                   }
  5006.                }
  5007.             }
  5008.          }
  5009.          while(freeItemRenderers.length)
  5010.          {
  5011.             _loc4_ = DisplayObject(freeItemRenderers.pop());
  5012.             if(_loc4_.parent)
  5013.             {
  5014.                listContent.removeChild(_loc4_);
  5015.             }
  5016.          }
  5017.          for(_loc1_ in freeItemRenderersByFactory)
  5018.          {
  5019.             _loc5_ = freeItemRenderersByFactory[_loc1_];
  5020.             for(_loc6_ in _loc5_)
  5021.             {
  5022.                _loc4_ = DisplayObject(_loc6_);
  5023.                delete _loc5_[_loc6_];
  5024.                if(_loc4_.parent)
  5025.                {
  5026.                   listContent.removeChild(_loc4_);
  5027.                }
  5028.             }
  5029.          }
  5030.          rowMap = {};
  5031.          listContent.rowInfo = [];
  5032.       }
  5033.       
  5034.       protected function mouseEventToItemRenderer(param1:MouseEvent) : IListItemRenderer
  5035.       {
  5036.          return mx_internal::mouseEventToItemRendererOrEditor(param1);
  5037.       }
  5038.       
  5039.       protected function UIDToItemRenderer(param1:String) : IListItemRenderer
  5040.       {
  5041.          if(!listContent)
  5042.          {
  5043.             return null;
  5044.          }
  5045.          return visibleData[param1];
  5046.       }
  5047.       
  5048.       public function get dragEnabled() : Boolean
  5049.       {
  5050.          return _dragEnabled;
  5051.       }
  5052.       
  5053.       private function findPendingResultHandler(param1:Object, param2:ListBaseFindPending) : void
  5054.       {
  5055.          iterator.seek(param2.bookmark,param2.offset);
  5056.          findStringLoop(param2.searchString,param2.startingBookmark,param2.currentIndex,param2.stopIndex);
  5057.       }
  5058.       
  5059.       protected function set allowItemSizeChangeNotification(param1:Boolean) : void
  5060.       {
  5061.          listContent.mx_internal::allowItemSizeChangeNotification = param1;
  5062.       }
  5063.       
  5064.       [Bindable("iconFunctionChanged")]
  5065.       public function get iconFunction() : Function
  5066.       {
  5067.          return _iconFunction;
  5068.       }
  5069.       
  5070.       protected function collectionChangeHandler(param1:Event) : void
  5071.       {
  5072.          var len:int = 0;
  5073.          var index:int = 0;
  5074.          var i:int = 0;
  5075.          var data:ListBaseSelectionData = null;
  5076.          var p:String = null;
  5077.          var selectedUID:String = null;
  5078.          var ce:CollectionEvent = null;
  5079.          var emitEvent:Boolean = false;
  5080.          var oldUID:String = null;
  5081.          var sd:ListBaseSelectionData = null;
  5082.          var requiresValueCommit:Boolean = false;
  5083.          var firstUID:String = null;
  5084.          var uid:String = null;
  5085.          var deletedItems:Array = null;
  5086.          var fakeRemove:CollectionEvent = null;
  5087.          var event:Event = param1;
  5088.          if(event is CollectionEvent)
  5089.          {
  5090.             ce = CollectionEvent(event);
  5091.             if(ce.kind == CollectionEventKind.ADD)
  5092.             {
  5093.                prepareDataEffect(ce);
  5094.                if(ce.location == 0 && verticalScrollPosition == 0)
  5095.                {
  5096.                   try
  5097.                   {
  5098.                      iterator.seek(CursorBookmark.FIRST);
  5099.                      if(!iteratorValid)
  5100.                      {
  5101.                         iteratorValid = true;
  5102.                         lastSeekPending = null;
  5103.                      }
  5104.                   }
  5105.                   catch(e:ItemPendingError)
  5106.                   {
  5107.                      lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,0);
  5108.                      e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5109.                      iteratorValid = false;
  5110.                   }
  5111.                }
  5112.                else if(mx_internal::listType == "vertical" && verticalScrollPosition >= ce.location)
  5113.                {
  5114.                   super.verticalScrollPosition += ce.items.length;
  5115.                }
  5116.                emitEvent = adjustAfterAdd(ce.items,ce.location);
  5117.                if(emitEvent)
  5118.                {
  5119.                   dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  5120.                }
  5121.             }
  5122.             else if(ce.kind == CollectionEventKind.REPLACE)
  5123.             {
  5124.                selectedUID = !!selectedItem ? itemToUID(selectedItem) : null;
  5125.                len = int(ce.items.length);
  5126.                i = 0;
  5127.                while(i < len)
  5128.                {
  5129.                   oldUID = itemToUID(ce.items[i].oldValue);
  5130.                   sd = selectedData[oldUID];
  5131.                   if(sd)
  5132.                   {
  5133.                      sd.data = ce.items[i].newValue;
  5134.                      delete selectedData[oldUID];
  5135.                      selectedData[itemToUID(sd.data)] = sd;
  5136.                      if(selectedUID == oldUID)
  5137.                      {
  5138.                         _selectedItem = sd.data;
  5139.                         dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  5140.                      }
  5141.                   }
  5142.                   i++;
  5143.                }
  5144.                prepareDataEffect(ce);
  5145.             }
  5146.             else if(ce.kind == CollectionEventKind.REMOVE)
  5147.             {
  5148.                prepareDataEffect(ce);
  5149.                requiresValueCommit = false;
  5150.                if(Boolean(listItems.length) && Boolean(listItems[0].length))
  5151.                {
  5152.                   firstUID = rowMap[listItems[0][0].name].uid;
  5153.                   selectedUID = !!selectedItem ? itemToUID(selectedItem) : null;
  5154.                   i = 0;
  5155.                   while(i < ce.items.length)
  5156.                   {
  5157.                      uid = itemToUID(ce.items[i]);
  5158.                      if(uid == firstUID && verticalScrollPosition == 0)
  5159.                      {
  5160.                         try
  5161.                         {
  5162.                            iterator.seek(CursorBookmark.FIRST);
  5163.                            if(!iteratorValid)
  5164.                            {
  5165.                               iteratorValid = true;
  5166.                               lastSeekPending = null;
  5167.                            }
  5168.                         }
  5169.                         catch(e1:ItemPendingError)
  5170.                         {
  5171.                            lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,0);
  5172.                            e1.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5173.                            iteratorValid = false;
  5174.                         }
  5175.                      }
  5176.                      if(selectedData[uid])
  5177.                      {
  5178.                         removeSelectionData(uid);
  5179.                      }
  5180.                      if(selectedUID == uid)
  5181.                      {
  5182.                         _selectedItem = null;
  5183.                         mx_internal::_selectedIndex = -1;
  5184.                         requiresValueCommit = true;
  5185.                      }
  5186.                      removeIndicators(uid);
  5187.                      i++;
  5188.                   }
  5189.                   if(mx_internal::listType == "vertical" && verticalScrollPosition >= ce.location)
  5190.                   {
  5191.                      if(verticalScrollPosition > ce.location)
  5192.                      {
  5193.                         super.verticalScrollPosition = verticalScrollPosition - Math.min(ce.items.length,verticalScrollPosition - ce.location);
  5194.                      }
  5195.                      else if(verticalScrollPosition >= collection.length)
  5196.                      {
  5197.                         super.verticalScrollPosition = Math.max(collection.length - 1,0);
  5198.                      }
  5199.                      try
  5200.                      {
  5201.                         offscreenExtraRowsTop = Math.min(offscreenExtraRowsTop,verticalScrollPosition);
  5202.                         index = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition - offscreenExtraRowsTop);
  5203.                         iterator.seek(CursorBookmark.FIRST,index);
  5204.                         if(!iteratorValid)
  5205.                         {
  5206.                            iteratorValid = true;
  5207.                            lastSeekPending = null;
  5208.                         }
  5209.                      }
  5210.                      catch(e2:ItemPendingError)
  5211.                      {
  5212.                         lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,index);
  5213.                         e2.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5214.                         iteratorValid = false;
  5215.                      }
  5216.                   }
  5217.                   emitEvent = adjustAfterRemove(ce.items,ce.location,requiresValueCommit);
  5218.                   if(emitEvent)
  5219.                   {
  5220.                      dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  5221.                   }
  5222.                }
  5223.             }
  5224.             else if(ce.kind == CollectionEventKind.MOVE)
  5225.             {
  5226.                if(ce.oldLocation < ce.location)
  5227.                {
  5228.                   for(p in selectedData)
  5229.                   {
  5230.                      data = selectedData[p];
  5231.                      if(data.index > ce.oldLocation && data.index < ce.location)
  5232.                      {
  5233.                         --data.index;
  5234.                      }
  5235.                      else if(data.index == ce.oldLocation)
  5236.                      {
  5237.                         data.index = ce.location;
  5238.                      }
  5239.                   }
  5240.                   if(mx_internal::_selectedIndex > ce.oldLocation && mx_internal::_selectedIndex < ce.location)
  5241.                   {
  5242.                      --mx_internal::_selectedIndex;
  5243.                   }
  5244.                   else if(mx_internal::_selectedIndex == ce.oldLocation)
  5245.                   {
  5246.                      mx_internal::_selectedIndex = ce.location;
  5247.                   }
  5248.                }
  5249.                else if(ce.location < ce.oldLocation)
  5250.                {
  5251.                   for(p in selectedData)
  5252.                   {
  5253.                      data = selectedData[p];
  5254.                      if(data.index > ce.location && data.index < ce.oldLocation)
  5255.                      {
  5256.                         ++data.index;
  5257.                      }
  5258.                      else if(data.index == ce.oldLocation)
  5259.                      {
  5260.                         data.index = ce.location;
  5261.                      }
  5262.                   }
  5263.                   if(mx_internal::_selectedIndex > ce.location && mx_internal::_selectedIndex < ce.oldLocation)
  5264.                   {
  5265.                      ++mx_internal::_selectedIndex;
  5266.                   }
  5267.                   else if(mx_internal::_selectedIndex == ce.oldLocation)
  5268.                   {
  5269.                      mx_internal::_selectedIndex = ce.location;
  5270.                   }
  5271.                }
  5272.                if(ce.oldLocation == verticalScrollPosition)
  5273.                {
  5274.                   if(ce.location > maxVerticalScrollPosition)
  5275.                   {
  5276.                      iterator.seek(CursorBookmark.CURRENT,maxVerticalScrollPosition - ce.location);
  5277.                   }
  5278.                   super.verticalScrollPosition = Math.min(ce.location,maxVerticalScrollPosition);
  5279.                }
  5280.                else if(ce.location >= verticalScrollPosition && ce.oldLocation < verticalScrollPosition)
  5281.                {
  5282.                   seekNextSafely(iterator,verticalScrollPosition);
  5283.                }
  5284.                else if(ce.location <= verticalScrollPosition && ce.oldLocation > verticalScrollPosition)
  5285.                {
  5286.                   seekPreviousSafely(iterator,verticalScrollPosition);
  5287.                }
  5288.             }
  5289.             else if(ce.kind == CollectionEventKind.REFRESH)
  5290.             {
  5291.                if(anchorBookmark)
  5292.                {
  5293.                   try
  5294.                   {
  5295.                      iterator.seek(anchorBookmark,0);
  5296.                      if(!iteratorValid)
  5297.                      {
  5298.                         iteratorValid = true;
  5299.                         lastSeekPending = null;
  5300.                      }
  5301.                   }
  5302.                   catch(e:ItemPendingError)
  5303.                   {
  5304.                      bSortItemPending = true;
  5305.                      lastSeekPending = new ListBaseSeekPending(anchorBookmark,0);
  5306.                      e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5307.                      iteratorValid = false;
  5308.                   }
  5309.                   catch(cursorError:CursorError)
  5310.                   {
  5311.                      clearSelected();
  5312.                   }
  5313.                   adjustAfterSort();
  5314.                }
  5315.                else
  5316.                {
  5317.                   try
  5318.                   {
  5319.                      index = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  5320.                      iterator.seek(CursorBookmark.FIRST,index);
  5321.                      if(!iteratorValid)
  5322.                      {
  5323.                         iteratorValid = true;
  5324.                         lastSeekPending = null;
  5325.                      }
  5326.                   }
  5327.                   catch(e:ItemPendingError)
  5328.                   {
  5329.                      bSortItemPending = true;
  5330.                      lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,index);
  5331.                      e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5332.                      iteratorValid = false;
  5333.                   }
  5334.                }
  5335.             }
  5336.             else if(ce.kind == CollectionEventKind.RESET)
  5337.             {
  5338.                if(collection.length == 0 || runningDataEffect && actualCollection.length == 0)
  5339.                {
  5340.                   deletedItems = mx_internal::reconstructDataFromListItems();
  5341.                   if(deletedItems.length)
  5342.                   {
  5343.                      fakeRemove = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
  5344.                      fakeRemove.kind = CollectionEventKind.REMOVE;
  5345.                      fakeRemove.items = deletedItems;
  5346.                      fakeRemove.location = 0;
  5347.                      prepareDataEffect(fakeRemove);
  5348.                   }
  5349.                }
  5350.                try
  5351.                {
  5352.                   iterator.seek(CursorBookmark.FIRST);
  5353.                   if(!iteratorValid)
  5354.                   {
  5355.                      iteratorValid = true;
  5356.                      lastSeekPending = null;
  5357.                   }
  5358.                   mx_internal::collectionIterator.seek(CursorBookmark.FIRST);
  5359.                }
  5360.                catch(e:ItemPendingError)
  5361.                {
  5362.                   lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,0);
  5363.                   e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  5364.                   iteratorValid = false;
  5365.                }
  5366.                if(mx_internal::bSelectedIndexChanged || bSelectedItemChanged || bSelectedIndicesChanged || bSelectedItemsChanged)
  5367.                {
  5368.                   mx_internal::bSelectionChanged = true;
  5369.                }
  5370.                else
  5371.                {
  5372.                   mx_internal::commitSelectedIndex(-1);
  5373.                }
  5374.                if(isNaN(verticalScrollPositionPending))
  5375.                {
  5376.                   verticalScrollPositionPending = 0;
  5377.                   super.verticalScrollPosition = 0;
  5378.                }
  5379.                if(isNaN(horizontalScrollPositionPending))
  5380.                {
  5381.                   horizontalScrollPositionPending = 0;
  5382.                   super.horizontalScrollPosition = 0;
  5383.                }
  5384.                invalidateSize();
  5385.             }
  5386.             else if(ce.kind == CollectionEventKind.UPDATE)
  5387.             {
  5388.                selectedUID = !!selectedItem ? itemToUID(selectedItem) : null;
  5389.                len = int(ce.items.length);
  5390.                i = 0;
  5391.                while(i < len)
  5392.                {
  5393.                   if(ce.items[i].property == "uid")
  5394.                   {
  5395.                      oldUID = ce.items[i].oldValue;
  5396.                      sd = selectedData[oldUID];
  5397.                      if(sd)
  5398.                      {
  5399.                         sd.data = ce.items[i].target;
  5400.                         delete selectedData[oldUID];
  5401.                         selectedData[ce.items[i].newValue] = sd;
  5402.                         if(selectedUID == oldUID)
  5403.                         {
  5404.                            _selectedItem = sd.data;
  5405.                            dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  5406.                         }
  5407.                      }
  5408.                   }
  5409.                   i++;
  5410.                }
  5411.             }
  5412.          }
  5413.          itemsSizeChanged = true;
  5414.          invalidateDisplayList();
  5415.       }
  5416.       
  5417.       public function set dataProvider(param1:Object) : void
  5418.       {
  5419.          var _loc3_:XMLList = null;
  5420.          var _loc4_:Array = null;
  5421.          if(collection)
  5422.          {
  5423.             collection.removeEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler);
  5424.          }
  5425.          if(param1 is Array)
  5426.          {
  5427.             collection = new ArrayCollection(param1 as Array);
  5428.          }
  5429.          else if(param1 is ICollectionView)
  5430.          {
  5431.             collection = ICollectionView(param1);
  5432.          }
  5433.          else if(param1 is IList)
  5434.          {
  5435.             collection = new ListCollectionView(IList(param1));
  5436.          }
  5437.          else if(param1 is XMLList)
  5438.          {
  5439.             collection = new XMLListCollection(param1 as XMLList);
  5440.          }
  5441.          else if(param1 is XML)
  5442.          {
  5443.             _loc3_ = new XMLList();
  5444.             _loc3_ += param1;
  5445.             collection = new XMLListCollection(_loc3_);
  5446.          }
  5447.          else
  5448.          {
  5449.             _loc4_ = [];
  5450.             if(param1 != null)
  5451.             {
  5452.                _loc4_.push(param1);
  5453.             }
  5454.             collection = new ArrayCollection(_loc4_);
  5455.          }
  5456.          iterator = collection.createCursor();
  5457.          mx_internal::collectionIterator = collection.createCursor();
  5458.          collection.addEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler,false,0,true);
  5459.          clearSelectionData();
  5460.          var _loc2_:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
  5461.          _loc2_.kind = CollectionEventKind.RESET;
  5462.          collectionChangeHandler(_loc2_);
  5463.          dispatchEvent(_loc2_);
  5464.          itemsNeedMeasurement = true;
  5465.          invalidateProperties();
  5466.          invalidateSize();
  5467.          invalidateDisplayList();
  5468.       }
  5469.       
  5470.       protected function destroyRow(param1:int, param2:int) : void
  5471.       {
  5472.          var _loc3_:IListItemRenderer = null;
  5473.          var _loc4_:String = rowInfo[param1].uid;
  5474.          removeIndicators(_loc4_);
  5475.          var _loc5_:int = 0;
  5476.          while(_loc5_ < param2)
  5477.          {
  5478.             _loc3_ = listItems[param1][_loc5_];
  5479.             if(_loc3_.data)
  5480.             {
  5481.                delete visibleData[_loc4_];
  5482.             }
  5483.             addToFreeItemRenderers(_loc3_);
  5484.             _loc5_++;
  5485.          }
  5486.       }
  5487.       
  5488.       protected function dragDropHandler(param1:DragEvent) : void
  5489.       {
  5490.          var _loc2_:Array = null;
  5491.          var _loc3_:int = 0;
  5492.          var _loc4_:Array = null;
  5493.          var _loc5_:int = 0;
  5494.          if(param1.isDefaultPrevented())
  5495.          {
  5496.             return;
  5497.          }
  5498.          hideDropFeedback(param1);
  5499.          mx_internal::lastDragEvent = null;
  5500.          mx_internal::resetDragScrolling();
  5501.          if(enabled && param1.dragSource.hasFormat("items"))
  5502.          {
  5503.             if(!dataProvider)
  5504.             {
  5505.                dataProvider = [];
  5506.             }
  5507.             _loc2_ = param1.dragSource.dataForFormat("items") as Array;
  5508.             _loc3_ = calculateDropIndex(param1);
  5509.             if(param1.action == DragManager.MOVE && dragMoveEnabled)
  5510.             {
  5511.                if(param1.dragInitiator == this)
  5512.                {
  5513.                   _loc4_ = selectedIndices;
  5514.                   _loc4_.sort(Array.NUMERIC);
  5515.                   _loc5_ = int(_loc4_.length - 1);
  5516.                   while(_loc5_ >= 0)
  5517.                   {
  5518.                      mx_internal::collectionIterator.seek(CursorBookmark.FIRST,_loc4_[_loc5_]);
  5519.                      if(_loc4_[_loc5_] < _loc3_)
  5520.                      {
  5521.                         _loc3_--;
  5522.                      }
  5523.                      mx_internal::collectionIterator.remove();
  5524.                      _loc5_--;
  5525.                   }
  5526.                   clearSelected(false);
  5527.                }
  5528.             }
  5529.             mx_internal::collectionIterator.seek(CursorBookmark.FIRST,_loc3_);
  5530.             _loc5_ = int(_loc2_.length - 1);
  5531.             while(_loc5_ >= 0)
  5532.             {
  5533.                if(param1.action == DragManager.COPY)
  5534.                {
  5535.                   mx_internal::collectionIterator.insert(copyItemWithUID(_loc2_[_loc5_]));
  5536.                }
  5537.                else if(param1.action == DragManager.MOVE)
  5538.                {
  5539.                   mx_internal::collectionIterator.insert(_loc2_[_loc5_]);
  5540.                }
  5541.                _loc5_--;
  5542.             }
  5543.          }
  5544.          mx_internal::lastDragEvent = null;
  5545.       }
  5546.       
  5547.       [Bindable("dataTipFunctionChanged")]
  5548.       public function get dataTipFunction() : Function
  5549.       {
  5550.          return _dataTipFunction;
  5551.       }
  5552.       
  5553.       public function scrollToIndex(param1:int) : Boolean
  5554.       {
  5555.          var _loc2_:int = 0;
  5556.          if(param1 >= verticalScrollPosition + listItems.length - offscreenExtraRowsBottom || param1 < verticalScrollPosition)
  5557.          {
  5558.             _loc2_ = Math.min(param1,maxVerticalScrollPosition);
  5559.             verticalScrollPosition = _loc2_;
  5560.             return true;
  5561.          }
  5562.          return false;
  5563.       }
  5564.       
  5565.       protected function addToFreeItemRenderers(param1:IListItemRenderer) : void
  5566.       {
  5567.          DisplayObject(param1).visible = false;
  5568.          var _loc2_:IFactory = factoryMap[param1];
  5569.          var _loc3_:ItemWrapper = dataItemWrappersByRenderer[param1];
  5570.          var _loc4_:String = !!_loc3_ ? itemToUID(_loc3_) : itemToUID(param1.data);
  5571.          if(visibleData[_loc4_] == param1)
  5572.          {
  5573.             delete visibleData[_loc4_];
  5574.          }
  5575.          if(_loc3_)
  5576.          {
  5577.             reservedItemRenderers[itemToUID(_loc3_)] = param1;
  5578.          }
  5579.          else
  5580.          {
  5581.             if(!freeItemRenderersByFactory)
  5582.             {
  5583.                freeItemRenderersByFactory = new Dictionary(true);
  5584.             }
  5585.             if(freeItemRenderersByFactory[_loc2_] == undefined)
  5586.             {
  5587.                freeItemRenderersByFactory[_loc2_] = new Dictionary(true);
  5588.             }
  5589.             freeItemRenderersByFactory[_loc2_][param1] = 1;
  5590.             if(_loc2_ == itemRenderer)
  5591.             {
  5592.                freeItemRenderers.push(param1);
  5593.             }
  5594.          }
  5595.          delete rowMap[param1.name];
  5596.       }
  5597.       
  5598.       override protected function initializeAccessibility() : void
  5599.       {
  5600.          if(ListBase.mx_internal::createAccessibilityImplementation != null)
  5601.          {
  5602.             ListBase.mx_internal::createAccessibilityImplementation(this);
  5603.          }
  5604.       }
  5605.       
  5606.       public function isItemSelectable(param1:Object) : Boolean
  5607.       {
  5608.          if(!selectable)
  5609.          {
  5610.             return false;
  5611.          }
  5612.          if(param1 == null)
  5613.          {
  5614.             return false;
  5615.          }
  5616.          return true;
  5617.       }
  5618.       
  5619.       private function findPendingFailureHandler(param1:Object, param2:ListBaseFindPending) : void
  5620.       {
  5621.       }
  5622.       
  5623.       public function get rowHeight() : Number
  5624.       {
  5625.          return _rowHeight;
  5626.       }
  5627.       
  5628.       [Bindable("dataChange")]
  5629.       public function get data() : Object
  5630.       {
  5631.          return _data;
  5632.       }
  5633.       
  5634.       mx_internal function adjustOffscreenRowsAndColumns() : void
  5635.       {
  5636.          offscreenExtraColumns = 0;
  5637.          offscreenExtraRows = offscreenExtraRowsOrColumns;
  5638.       }
  5639.       
  5640.       protected function indexToRow(param1:int) : int
  5641.       {
  5642.          return param1;
  5643.       }
  5644.       
  5645.       protected function get dragImageOffsets() : Point
  5646.       {
  5647.          var _loc1_:Point = new Point();
  5648.          var _loc2_:int = int(listItems.length);
  5649.          var _loc3_:int = 0;
  5650.          while(_loc3_ < _loc2_)
  5651.          {
  5652.             if(selectedData[rowInfo[_loc3_].uid])
  5653.             {
  5654.                _loc1_.x = listItems[_loc3_][0].x;
  5655.                _loc1_.y = listItems[_loc3_][0].y;
  5656.             }
  5657.             _loc3_++;
  5658.          }
  5659.          return _loc1_;
  5660.       }
  5661.       
  5662.       [Bindable("collectionChange")]
  5663.       public function get dataProvider() : Object
  5664.       {
  5665.          if(actualCollection)
  5666.          {
  5667.             return actualCollection;
  5668.          }
  5669.          return collection;
  5670.       }
  5671.       
  5672.       override public function styleChanged(param1:String) : void
  5673.       {
  5674.          var _loc2_:int = 0;
  5675.          var _loc3_:int = 0;
  5676.          var _loc4_:int = 0;
  5677.          var _loc5_:int = 0;
  5678.          if(IS_ITEM_STYLE[param1])
  5679.          {
  5680.             itemsSizeChanged = true;
  5681.             invalidateDisplayList();
  5682.          }
  5683.          else if(param1 == "paddingTop")
  5684.          {
  5685.             cachedPaddingTopInvalid = true;
  5686.             invalidateProperties();
  5687.          }
  5688.          else if(param1 == "paddingBottom")
  5689.          {
  5690.             cachedPaddingBottomInvalid = true;
  5691.             invalidateProperties();
  5692.          }
  5693.          else if(param1 == "verticalAlign")
  5694.          {
  5695.             cachedVerticalAlignInvalid = true;
  5696.             invalidateProperties();
  5697.          }
  5698.          else if(param1 == "itemsChangeEffect")
  5699.          {
  5700.             cachedItemsChangeEffect = null;
  5701.          }
  5702.          else if(Boolean(listContent) && Boolean(listItems))
  5703.          {
  5704.             _loc2_ = int(listItems.length);
  5705.             _loc3_ = 0;
  5706.             while(_loc3_ < _loc2_)
  5707.             {
  5708.                _loc4_ = int(listItems[_loc3_].length);
  5709.                _loc5_ = 0;
  5710.                while(_loc5_ < _loc4_)
  5711.                {
  5712.                   if(listItems[_loc3_][_loc5_])
  5713.                   {
  5714.                      listItems[_loc3_][_loc5_].styleChanged(param1);
  5715.                   }
  5716.                   _loc5_++;
  5717.                }
  5718.                _loc3_++;
  5719.             }
  5720.          }
  5721.          super.styleChanged(param1);
  5722.          if(mx_internal::invalidateSizeFlag)
  5723.          {
  5724.             itemsNeedMeasurement = true;
  5725.             invalidateProperties();
  5726.          }
  5727.          if(StyleManager.isSizeInvalidatingStyle(param1))
  5728.          {
  5729.             scrollAreaChanged = true;
  5730.          }
  5731.       }
  5732.       
  5733.       private function selectionPendingResultHandler(param1:Object, param2:ListBaseSelectionPending) : void
  5734.       {
  5735.          iterator.seek(param2.bookmark,param2.offset);
  5736.          shiftSelectionLoop(param2.incrementing,param2.index,param2.stopData,param2.transition,param2.placeHolder);
  5737.       }
  5738.       
  5739.       public function set selectedItems(param1:Array) : void
  5740.       {
  5741.          if(!collection || collection.length == 0)
  5742.          {
  5743.             _selectedItems = param1;
  5744.             bSelectedItemsChanged = true;
  5745.             mx_internal::bSelectionChanged = true;
  5746.             invalidateDisplayList();
  5747.             return;
  5748.          }
  5749.          commitSelectedItems(param1);
  5750.       }
  5751.       
  5752.       public function itemToDataTip(param1:Object) : String
  5753.       {
  5754.          var data:Object = param1;
  5755.          if(data == null)
  5756.          {
  5757.             return " ";
  5758.          }
  5759.          if(dataTipFunction != null)
  5760.          {
  5761.             return dataTipFunction(data);
  5762.          }
  5763.          if(data is XML)
  5764.          {
  5765.             try
  5766.             {
  5767.                if(data[dataTipField].length() != 0)
  5768.                {
  5769.                   data = data[dataTipField];
  5770.                }
  5771.             }
  5772.             catch(e:Error)
  5773.             {
  5774.             }
  5775.          }
  5776.          else if(data is Object)
  5777.          {
  5778.             try
  5779.             {
  5780.                if(data[dataTipField] != null)
  5781.                {
  5782.                   data = data[dataTipField];
  5783.                }
  5784.                else if(data.label != null)
  5785.                {
  5786.                   data = data.label;
  5787.                }
  5788.             }
  5789.             catch(e:Error)
  5790.             {
  5791.             }
  5792.          }
  5793.          if(data is String)
  5794.          {
  5795.             return String(data);
  5796.          }
  5797.          try
  5798.          {
  5799.             return data.toString();
  5800.          }
  5801.          catch(e:Error)
  5802.          {
  5803.          }
  5804.          return " ";
  5805.       }
  5806.       
  5807.       protected function dragStartHandler(param1:DragEvent) : void
  5808.       {
  5809.          var _loc2_:DragSource = null;
  5810.          if(param1.isDefaultPrevented())
  5811.          {
  5812.             return;
  5813.          }
  5814.          _loc2_ = new DragSource();
  5815.          addDragData(_loc2_);
  5816.          DragManager.doDrag(this,_loc2_,param1,dragImage,0,0,0.5,dragMoveEnabled);
  5817.       }
  5818.       
  5819.       private function cleanupAfterDataChangeEffect() : void
  5820.       {
  5821.          if(runningDataEffect || runDataEffectNextUpdate)
  5822.          {
  5823.             return;
  5824.          }
  5825.          var _loc1_:int = scrollPositionToIndex(horizontalScrollPosition - offscreenExtraColumnsLeft,verticalScrollPosition - offscreenExtraRowsTop);
  5826.          iterator.seek(CursorBookmark.FIRST,_loc1_);
  5827.          dataEffectCompleted = true;
  5828.          itemsSizeChanged = true;
  5829.          invalidateList();
  5830.          dataItemWrappersByRenderer = new Dictionary();
  5831.       }
  5832.       
  5833.       mx_internal function setBookmarkPendingResultHandler(param1:Object, param2:Object) : void
  5834.       {
  5835.          var placeHolder:CursorBookmark = null;
  5836.          var data:Object = param1;
  5837.          var info:Object = param2;
  5838.          placeHolder = iterator.bookmark;
  5839.          try
  5840.          {
  5841.             iterator.seek(CursorBookmark.FIRST,info.value);
  5842.             this[info.property] = iterator.bookmark;
  5843.          }
  5844.          catch(e:ItemPendingError)
  5845.          {
  5846.             e.addResponder(new ItemResponder(mx_internal::setBookmarkPendingResultHandler,mx_internal::setBookmarkPendingFailureHandler,info));
  5847.          }
  5848.          iterator.seek(placeHolder);
  5849.       }
  5850.       
  5851.       protected function removeIndicators(param1:String) : void
  5852.       {
  5853.          if(selectionTweens[param1])
  5854.          {
  5855.             selectionTweens[param1].removeEventListener(TweenEvent.TWEEN_UPDATE,mx_internal::selectionTween_updateHandler);
  5856.             selectionTweens[param1].removeEventListener(TweenEvent.TWEEN_END,mx_internal::selectionTween_endHandler);
  5857.             if(selectionIndicators[param1].alpha < 1)
  5858.             {
  5859.                Tween.mx_internal::removeTween(selectionTweens[param1]);
  5860.             }
  5861.             delete selectionTweens[param1];
  5862.          }
  5863.          if(selectionIndicators[param1])
  5864.          {
  5865.             selectionIndicators[param1].parent.removeChild(selectionIndicators[param1]);
  5866.             selectionIndicators[param1] = null;
  5867.          }
  5868.          if(param1 == highlightUID)
  5869.          {
  5870.             highlightItemRenderer = null;
  5871.             highlightUID = null;
  5872.             clearHighlightIndicator(highlightIndicator,UIDToItemRenderer(param1));
  5873.          }
  5874.          if(param1 == caretUID)
  5875.          {
  5876.             caretItemRenderer = null;
  5877.             caretUID = null;
  5878.             clearCaretIndicator(caretIndicator,UIDToItemRenderer(param1));
  5879.          }
  5880.       }
  5881.       
  5882.       private function mouseIsUp() : void
  5883.       {
  5884.          systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler,true);
  5885.          systemManager.getSandboxRoot().removeEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE,mouseLeaveHandler);
  5886.          if(!dragEnabled && mx_internal::dragScrollingInterval != 0)
  5887.          {
  5888.             clearInterval(mx_internal::dragScrollingInterval);
  5889.             mx_internal::dragScrollingInterval = 0;
  5890.          }
  5891.       }
  5892.       
  5893.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  5894.       {
  5895.          var _loc3_:CursorBookmark = null;
  5896.          var _loc6_:int = 0;
  5897.          super.updateDisplayList(param1,param2);
  5898.          if(oldUnscaledWidth == param1 && oldUnscaledHeight == param2 && !itemsSizeChanged && !mx_internal::bSelectionChanged && !scrollAreaChanged)
  5899.          {
  5900.             return;
  5901.          }
  5902.          if(oldUnscaledWidth != param1)
  5903.          {
  5904.             itemsSizeChanged = true;
  5905.          }
  5906.          mx_internal::removeClipMask();
  5907.          var _loc4_:Graphics = selectionLayer.graphics;
  5908.          _loc4_.clear();
  5909.          if(listContent.width > 0 && listContent.height > 0)
  5910.          {
  5911.             _loc4_.beginFill(8421504,0);
  5912.             _loc4_.drawRect(0,0,listContent.width,listContent.height);
  5913.             _loc4_.endFill();
  5914.          }
  5915.          if(rendererChanged)
  5916.          {
  5917.             purgeItemRenderers();
  5918.          }
  5919.          else if(dataEffectCompleted)
  5920.          {
  5921.             partialPurgeItemRenderers();
  5922.          }
  5923.          adjustListContent(param1,param2);
  5924.          var _loc5_:Boolean = Boolean(collection) && collection.length > 0;
  5925.          if(_loc5_)
  5926.          {
  5927.             adjustScrollPosition();
  5928.          }
  5929.          if(oldUnscaledWidth == param1 && !scrollAreaChanged && !itemsSizeChanged && listItems.length > 0 && iterator && columnCount == 1)
  5930.          {
  5931.             _loc6_ = int(listItems.length - 1);
  5932.             if(oldUnscaledHeight > param2)
  5933.             {
  5934.                reduceRows(_loc6_);
  5935.             }
  5936.             else
  5937.             {
  5938.                makeAdditionalRows(_loc6_);
  5939.             }
  5940.          }
  5941.          else
  5942.          {
  5943.             if(iterator)
  5944.             {
  5945.                _loc3_ = iterator.bookmark;
  5946.             }
  5947.             clearIndicators();
  5948.             rendererTrackingSuspended = true;
  5949.             if(iterator)
  5950.             {
  5951.                if(Boolean(offscreenExtraColumns) || Boolean(offscreenExtraColumnsLeft) || Boolean(offscreenExtraColumnsRight))
  5952.                {
  5953.                   makeRowsAndColumnsWithExtraColumns(param1,param2);
  5954.                }
  5955.                else
  5956.                {
  5957.                   makeRowsAndColumnsWithExtraRows(param1,param2);
  5958.                }
  5959.             }
  5960.             else
  5961.             {
  5962.                makeRowsAndColumns(0,0,listContent.width,listContent.height,0,0);
  5963.             }
  5964.             rendererTrackingSuspended = false;
  5965.             seekPositionIgnoreError(iterator,_loc3_);
  5966.          }
  5967.          oldUnscaledWidth = param1;
  5968.          oldUnscaledHeight = param2;
  5969.          configureScrollBars();
  5970.          mx_internal::addClipMask(true);
  5971.          itemsSizeChanged = false;
  5972.          wordWrapChanged = false;
  5973.          adjustSelectionSettings(_loc5_);
  5974.          if(keySelectionPending && iteratorValid)
  5975.          {
  5976.             keySelectionPending = false;
  5977.             finishKeySelection();
  5978.          }
  5979.       }
  5980.       
  5981.       protected function dragCompleteHandler(param1:DragEvent) : void
  5982.       {
  5983.          var _loc2_:Array = null;
  5984.          var _loc3_:int = 0;
  5985.          var _loc4_:int = 0;
  5986.          mx_internal::isPressed = false;
  5987.          if(param1.isDefaultPrevented())
  5988.          {
  5989.             return;
  5990.          }
  5991.          if(param1.action == DragManager.MOVE && dragMoveEnabled)
  5992.          {
  5993.             if(param1.relatedObject != this)
  5994.             {
  5995.                _loc2_ = selectedIndices;
  5996.                _loc2_.sort(Array.NUMERIC);
  5997.                _loc3_ = int(_loc2_.length);
  5998.                _loc4_ = _loc3_ - 1;
  5999.                while(_loc4_ >= 0)
  6000.                {
  6001.                   mx_internal::collectionIterator.seek(CursorBookmark.FIRST,_loc2_[_loc4_]);
  6002.                   mx_internal::collectionIterator.remove();
  6003.                   _loc4_--;
  6004.                }
  6005.                clearSelected(false);
  6006.             }
  6007.          }
  6008.          mx_internal::lastDragEvent = null;
  6009.          mx_internal::resetDragScrolling();
  6010.       }
  6011.       
  6012.       public function getItemRendererFactory(param1:Object) : IFactory
  6013.       {
  6014.          if(param1 == null)
  6015.          {
  6016.             return nullItemRenderer;
  6017.          }
  6018.          return itemRenderer;
  6019.       }
  6020.    }
  6021. }
  6022.  
  6023.