home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Darbas / kidoz_v1.air / kidoz.swf / scripts / mx / controls / listClasses / ListBase.as < prev    next >
Encoding:
Text File  |  2009-05-06  |  202.5 KB  |  5,958 lines

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