home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / controls / listClasses / TileBase.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  85.9 KB  |  2,309 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.geom.Point;
  10.    import flash.ui.Keyboard;
  11.    import flash.utils.Dictionary;
  12.    import flash.utils.setInterval;
  13.    import mx.collections.CursorBookmark;
  14.    import mx.collections.ItemResponder;
  15.    import mx.collections.ItemWrapper;
  16.    import mx.collections.ModifiedCollectionView;
  17.    import mx.collections.errors.ItemPendingError;
  18.    import mx.controls.scrollClasses.ScrollBar;
  19.    import mx.core.ClassFactory;
  20.    import mx.core.EdgeMetrics;
  21.    import mx.core.FlexShape;
  22.    import mx.core.FlexSprite;
  23.    import mx.core.IFactory;
  24.    import mx.core.IFlexDisplayObject;
  25.    import mx.core.UIComponentGlobals;
  26.    import mx.core.mx_internal;
  27.    import mx.events.CollectionEvent;
  28.    import mx.events.CollectionEventKind;
  29.    import mx.events.DragEvent;
  30.    import mx.events.ListEvent;
  31.    import mx.events.ScrollEvent;
  32.    import mx.events.ScrollEventDetail;
  33.    import mx.events.ScrollEventDirection;
  34.    import mx.skins.halo.ListDropIndicator;
  35.    import mx.styles.StyleManager;
  36.    
  37.    use namespace mx_internal;
  38.    
  39.    public class TileBase extends ListBase
  40.    {
  41.       mx_internal static const VERSION:String = "3.5.0.12683";
  42.       
  43.       private var _direction:String = "horizontal";
  44.       
  45.       private var lastRowCount:int = 0;
  46.       
  47.       private var _maxRows:int = 0;
  48.       
  49.       private var bSelectItem:Boolean = false;
  50.       
  51.       private var bCtrlKey:Boolean = false;
  52.       
  53.       private var lastColumnCount:int = 0;
  54.       
  55.       private var lastKey:uint = 0;
  56.       
  57.       private var _maxColumns:int = 0;
  58.       
  59.       protected var measuringObjects:Dictionary;
  60.       
  61.       private var bShiftKey:Boolean = false;
  62.       
  63.       public function TileBase()
  64.       {
  65.          super();
  66.          itemRenderer = new ClassFactory(TileListItemRenderer);
  67.          setRowHeight(50);
  68.          mx_internal::setColumnWidth(50);
  69.       }
  70.       
  71.       override public function measureWidthOfItems(param1:int = -1, param2:int = 0) : Number
  72.       {
  73.          var _loc3_:IListItemRenderer = null;
  74.          var _loc4_:Number = NaN;
  75.          var _loc5_:ListData = null;
  76.          var _loc7_:Object = null;
  77.          var _loc8_:Object = null;
  78.          var _loc9_:IFactory = null;
  79.          var _loc6_:Boolean = false;
  80.          if(Boolean(collection) && Boolean(collection.length))
  81.          {
  82.             _loc7_ = iterator.current;
  83.             _loc8_ = _loc7_ is ItemWrapper ? _loc7_.data : _loc7_;
  84.             if(!measuringObjects)
  85.             {
  86.                measuringObjects = new Dictionary(true);
  87.             }
  88.             _loc9_ = getItemRendererFactory(_loc8_);
  89.             _loc3_ = measuringObjects[_loc9_];
  90.             if(!_loc3_)
  91.             {
  92.                _loc3_ = mx_internal::getMeasuringRenderer(_loc8_);
  93.                _loc6_ = true;
  94.             }
  95.             _loc5_ = ListData(makeListData(_loc8_,uid,0,0));
  96.             if(_loc3_ is IDropInListItemRenderer)
  97.             {
  98.                IDropInListItemRenderer(_loc3_).listData = !!_loc8_ ? _loc5_ : null;
  99.             }
  100.             _loc3_.data = _loc8_;
  101.             UIComponentGlobals.mx_internal::layoutManager.validateClient(_loc3_,true);
  102.             _loc4_ = Number(_loc3_.getExplicitOrMeasuredWidth());
  103.             if(_loc6_)
  104.             {
  105.                _loc3_.setActualSize(_loc4_,_loc3_.getExplicitOrMeasuredHeight());
  106.                _loc6_ = false;
  107.             }
  108.          }
  109.          if(isNaN(_loc4_) || _loc4_ == 0)
  110.          {
  111.             _loc4_ = 50;
  112.          }
  113.          return _loc4_ * param2;
  114.       }
  115.       
  116.       override public function indexToItemRenderer(param1:int) : IListItemRenderer
  117.       {
  118.          var _loc2_:int = indexToRow(param1);
  119.          if(_loc2_ < verticalScrollPosition || _loc2_ >= verticalScrollPosition + rowCount)
  120.          {
  121.             return null;
  122.          }
  123.          var _loc3_:int = indexToColumn(param1);
  124.          if(_loc3_ < horizontalScrollPosition || _loc3_ >= horizontalScrollPosition + columnCount)
  125.          {
  126.             return null;
  127.          }
  128.          return listItems[_loc2_ - verticalScrollPosition][_loc3_ - horizontalScrollPosition];
  129.       }
  130.       
  131.       public function set direction(param1:String) : void
  132.       {
  133.          _direction = param1;
  134.          itemsSizeChanged = true;
  135.          offscreenExtraRowsOrColumnsChanged = true;
  136.          if(listContent)
  137.          {
  138.             if(direction == TileBaseDirection.HORIZONTAL)
  139.             {
  140.                listContent.leftOffset = listContent.rightOffset = 0;
  141.                offscreenExtraColumnsLeft = offscreenExtraColumnsRight = 0;
  142.             }
  143.             else
  144.             {
  145.                listContent.topOffset = listContent.bottomOffset = 0;
  146.                offscreenExtraRowsTop = offscreenExtraRowsBottom = 0;
  147.             }
  148.          }
  149.          invalidateProperties();
  150.          invalidateSize();
  151.          invalidateDisplayList();
  152.          dispatchEvent(new Event("directionChanged"));
  153.       }
  154.       
  155.       [Bindable("directionChanged")]
  156.       public function get direction() : String
  157.       {
  158.          return _direction;
  159.       }
  160.       
  161.       override mx_internal function reconstructDataFromListItems() : Array
  162.       {
  163.          var _loc2_:int = 0;
  164.          var _loc3_:int = 0;
  165.          var _loc4_:IListItemRenderer = null;
  166.          var _loc5_:Object = null;
  167.          if(direction == TileBaseDirection.HORIZONTAL || !listItems)
  168.          {
  169.             return super.mx_internal::reconstructDataFromListItems();
  170.          }
  171.          var _loc1_:Array = [];
  172.          if(listItems.length > 0)
  173.          {
  174.             _loc2_ = 0;
  175.             while(_loc2_ < listItems[0].length)
  176.             {
  177.                _loc3_ = 0;
  178.                while(_loc3_ < listItems.length)
  179.                {
  180.                   if(Boolean(listItems[_loc3_]) && listItems[_loc3_].length > _loc2_)
  181.                   {
  182.                      _loc4_ = listItems[_loc3_][_loc2_] as IListItemRenderer;
  183.                      if(_loc4_)
  184.                      {
  185.                         _loc5_ = _loc4_.data;
  186.                         _loc1_.push(_loc5_);
  187.                      }
  188.                   }
  189.                   _loc3_++;
  190.                }
  191.                _loc2_++;
  192.             }
  193.          }
  194.          return _loc1_;
  195.       }
  196.       
  197.       override protected function moveSelectionHorizontally(param1:uint, param2:Boolean, param3:Boolean) : void
  198.       {
  199.          var _loc4_:Number = NaN;
  200.          var _loc5_:Number = NaN;
  201.          var _loc6_:IListItemRenderer = null;
  202.          var _loc7_:String = null;
  203.          var _loc8_:int = 0;
  204.          var _loc9_:Boolean = false;
  205.          var _loc10_:int = 0;
  206.          var _loc11_:int = 0;
  207.          var _loc16_:ScrollEvent = null;
  208.          var _loc12_:int = listItems[0].length - offscreenExtraColumnsLeft - offscreenExtraColumnsRight;
  209.          var _loc13_:int = maxColumns > 0 && direction != TileBaseDirection.VERTICAL ? maxColumns : _loc12_;
  210.          var _loc14_:int = displayingPartialRow() ? 1 : 0;
  211.          var _loc15_:int = displayingPartialColumn() ? 1 : 0;
  212.          if(!collection)
  213.          {
  214.             return;
  215.          }
  216.          showCaret = true;
  217.          switch(param1)
  218.          {
  219.             case Keyboard.LEFT:
  220.                if(caretIndex > 0)
  221.                {
  222.                   if(direction == TileBaseDirection.HORIZONTAL)
  223.                   {
  224.                      --caretIndex;
  225.                   }
  226.                   else
  227.                   {
  228.                      _loc10_ = indexToRow(caretIndex);
  229.                      _loc11_ = indexToColumn(caretIndex);
  230.                      if(_loc11_ == 0)
  231.                      {
  232.                         _loc10_--;
  233.                         _loc11_ = lastColumnInRow(_loc10_);
  234.                      }
  235.                      else
  236.                      {
  237.                         _loc11_--;
  238.                      }
  239.                      caretIndex = Math.min(indicesToIndex(_loc10_,_loc11_),collection.length - 1);
  240.                   }
  241.                   _loc10_ = indexToRow(caretIndex);
  242.                   _loc11_ = indexToColumn(caretIndex);
  243.                   if(direction == TileBaseDirection.HORIZONTAL)
  244.                   {
  245.                      if(_loc10_ < verticalScrollPosition)
  246.                      {
  247.                         _loc4_ = verticalScrollPosition - 1;
  248.                      }
  249.                      else if(_loc10_ > verticalScrollPosition + rowCount - _loc14_)
  250.                      {
  251.                         _loc4_ = maxVerticalScrollPosition;
  252.                      }
  253.                   }
  254.                   else if(_loc11_ < horizontalScrollPosition)
  255.                   {
  256.                      _loc5_ = horizontalScrollPosition - 1;
  257.                   }
  258.                   else if(_loc11_ > horizontalScrollPosition + _loc12_ - 1 - _loc15_)
  259.                   {
  260.                      _loc5_ = maxHorizontalScrollPosition;
  261.                   }
  262.                }
  263.                break;
  264.             case Keyboard.RIGHT:
  265.                if(caretIndex < collection.length - 1)
  266.                {
  267.                   if(direction == TileBaseDirection.HORIZONTAL || caretIndex == -1)
  268.                   {
  269.                      ++caretIndex;
  270.                   }
  271.                   else
  272.                   {
  273.                      _loc10_ = indexToRow(caretIndex);
  274.                      _loc11_ = indexToColumn(caretIndex);
  275.                      if(_loc11_ == lastColumnInRow(_loc10_))
  276.                      {
  277.                         _loc11_ = 0;
  278.                         _loc10_++;
  279.                      }
  280.                      else
  281.                      {
  282.                         _loc11_++;
  283.                      }
  284.                      caretIndex = Math.min(indicesToIndex(_loc10_,_loc11_),collection.length - 1);
  285.                   }
  286.                   _loc10_ = indexToRow(caretIndex);
  287.                   _loc11_ = indexToColumn(caretIndex);
  288.                   if(direction == TileBaseDirection.HORIZONTAL)
  289.                   {
  290.                      if(_loc10_ >= verticalScrollPosition + rowCount - _loc14_ && verticalScrollPosition < maxVerticalScrollPosition)
  291.                      {
  292.                         _loc4_ = verticalScrollPosition + 1;
  293.                      }
  294.                      if(_loc10_ < verticalScrollPosition)
  295.                      {
  296.                         _loc4_ = _loc10_;
  297.                      }
  298.                   }
  299.                   else
  300.                   {
  301.                      if(_loc11_ >= horizontalScrollPosition + _loc12_ - _loc15_ && horizontalScrollPosition < maxHorizontalScrollPosition)
  302.                      {
  303.                         _loc5_ = horizontalScrollPosition + 1;
  304.                      }
  305.                      if(_loc11_ < horizontalScrollPosition)
  306.                      {
  307.                         _loc5_ = _loc11_;
  308.                      }
  309.                   }
  310.                }
  311.                break;
  312.             case Keyboard.PAGE_UP:
  313.                if(caretIndex < 0)
  314.                {
  315.                   caretIndex = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  316.                }
  317.                _loc10_ = indexToRow(caretIndex);
  318.                _loc11_ = indexToColumn(caretIndex);
  319.                if(_loc11_ > 0)
  320.                {
  321.                   caretIndex = indicesToIndex(_loc10_,_loc5_ = int(Math.max(horizontalScrollPosition - (_loc12_ - _loc15_),0)));
  322.                }
  323.                break;
  324.             case Keyboard.PAGE_DOWN:
  325.                if(caretIndex < 0)
  326.                {
  327.                   caretIndex = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  328.                }
  329.                _loc10_ = indexToRow(caretIndex);
  330.                _loc11_ = indexToColumn(caretIndex);
  331.                if(_loc11_ < maxHorizontalScrollPosition)
  332.                {
  333.                   _loc11_ = Math.min(horizontalScrollPosition + _loc12_ - _loc15_,indexToColumn(collection.length - 1));
  334.                   if(_loc11_ > horizontalScrollPosition)
  335.                   {
  336.                      _loc5_ = Math.min(_loc11_,maxHorizontalScrollPosition);
  337.                   }
  338.                   caretIndex = indicesToIndex(_loc10_,_loc11_);
  339.                }
  340.                break;
  341.             case Keyboard.HOME:
  342.                if(collection.length)
  343.                {
  344.                   caretIndex = 0;
  345.                   _loc5_ = 0;
  346.                   _loc4_ = 0;
  347.                }
  348.                break;
  349.             case Keyboard.END:
  350.                if(caretIndex < collection.length)
  351.                {
  352.                   caretIndex = collection.length - 1;
  353.                   _loc5_ = maxHorizontalScrollPosition;
  354.                   _loc4_ = maxVerticalScrollPosition;
  355.                }
  356.          }
  357.          if(!isNaN(_loc4_))
  358.          {
  359.             if(_loc4_ != verticalScrollPosition)
  360.             {
  361.                _loc16_ = new ScrollEvent(ScrollEvent.SCROLL);
  362.                _loc16_.detail = ScrollEventDetail.THUMB_POSITION;
  363.                _loc16_.direction = ScrollEventDirection.VERTICAL;
  364.                _loc16_.delta = _loc4_ - verticalScrollPosition;
  365.                _loc16_.position = _loc4_;
  366.                verticalScrollPosition = _loc4_;
  367.                dispatchEvent(_loc16_);
  368.             }
  369.          }
  370.          if(iteratorValid)
  371.          {
  372.             if(!isNaN(_loc5_))
  373.             {
  374.                if(_loc5_ != horizontalScrollPosition)
  375.                {
  376.                   _loc16_ = new ScrollEvent(ScrollEvent.SCROLL);
  377.                   _loc16_.detail = ScrollEventDetail.THUMB_POSITION;
  378.                   _loc16_.direction = ScrollEventDirection.HORIZONTAL;
  379.                   _loc16_.delta = _loc5_ - horizontalScrollPosition;
  380.                   _loc16_.position = _loc5_;
  381.                   horizontalScrollPosition = _loc5_;
  382.                   dispatchEvent(_loc16_);
  383.                }
  384.             }
  385.          }
  386.          if(!iteratorValid)
  387.          {
  388.             keySelectionPending = true;
  389.             return;
  390.          }
  391.          bShiftKey = param2;
  392.          bCtrlKey = param3;
  393.          lastKey = param1;
  394.          finishKeySelection();
  395.       }
  396.       
  397.       override mx_internal function removeClipMask() : void
  398.       {
  399.       }
  400.       
  401.       override protected function commitProperties() : void
  402.       {
  403.          super.commitProperties();
  404.          if(itemsNeedMeasurement)
  405.          {
  406.             itemsNeedMeasurement = false;
  407.             if(isNaN(explicitRowHeight))
  408.             {
  409.                setRowHeight(measureHeightOfItems(0,1));
  410.             }
  411.             if(isNaN(explicitColumnWidth))
  412.             {
  413.                mx_internal::setColumnWidth(measureWidthOfItems(0,1));
  414.             }
  415.          }
  416.       }
  417.       
  418.       override public function scrollToIndex(param1:int) : Boolean
  419.       {
  420.          var newVPos:int = 0;
  421.          var newHPos:int = 0;
  422.          var index:int = param1;
  423.          var firstIndex:int = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  424.          var numItemsVisible:int = (listItems.length - offscreenExtraRowsTop - offscreenExtraRowsBottom) * (listItems[0].length - offscreenExtraColumnsLeft - offscreenExtraColumnsRight);
  425.          if(index >= firstIndex + numItemsVisible || index < firstIndex)
  426.          {
  427.             newVPos = Math.min(indexToRow(index),maxVerticalScrollPosition);
  428.             newHPos = Math.min(indexToColumn(index),maxHorizontalScrollPosition);
  429.             try
  430.             {
  431.                iterator.seek(CursorBookmark.FIRST,scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition));
  432.                super.horizontalScrollPosition = newHPos;
  433.                super.verticalScrollPosition = newVPos;
  434.             }
  435.             catch(e:ItemPendingError)
  436.             {
  437.             }
  438.             return true;
  439.          }
  440.          return false;
  441.       }
  442.       
  443.       override public function createItemRenderer(param1:Object) : IListItemRenderer
  444.       {
  445.          var _loc2_:IFactory = null;
  446.          var _loc3_:IListItemRenderer = null;
  447.          var _loc4_:Dictionary = null;
  448.          var _loc5_:* = undefined;
  449.          _loc2_ = getItemRendererFactory(param1);
  450.          if(!_loc2_)
  451.          {
  452.             if(!param1)
  453.             {
  454.                _loc2_ = nullItemRenderer;
  455.             }
  456.             if(!_loc2_)
  457.             {
  458.                _loc2_ = itemRenderer;
  459.             }
  460.          }
  461.          if(_loc2_ == itemRenderer)
  462.          {
  463.             if(freeItemRenderers && freeItemRenderers.length && Boolean(freeItemRenderersByFactory[_loc2_]))
  464.             {
  465.                _loc3_ = freeItemRenderers.pop();
  466.                delete freeItemRenderersByFactory[_loc2_][_loc3_];
  467.             }
  468.          }
  469.          else if(freeItemRenderersByFactory)
  470.          {
  471.             _loc4_ = freeItemRenderersByFactory[_loc2_];
  472.             if(_loc4_)
  473.             {
  474.                var _loc6_:int = 0;
  475.                var _loc7_:* = _loc4_;
  476.                for(_loc5_ in _loc7_)
  477.                {
  478.                   _loc3_ = IListItemRenderer(_loc5_);
  479.                   delete _loc4_[_loc5_];
  480.                }
  481.             }
  482.          }
  483.          if(!_loc3_)
  484.          {
  485.             _loc3_ = _loc2_.newInstance();
  486.             _loc3_.styleName = this;
  487.             factoryMap[_loc3_] = _loc2_;
  488.          }
  489.          _loc3_.owner = this;
  490.          return _loc3_;
  491.       }
  492.       
  493.       protected function drawTileBackgrounds() : void
  494.       {
  495.          var _loc2_:Array = null;
  496.          var _loc5_:int = 0;
  497.          var _loc6_:int = 0;
  498.          var _loc7_:Number = NaN;
  499.          var _loc8_:Number = NaN;
  500.          var _loc9_:IListItemRenderer = null;
  501.          var _loc10_:int = 0;
  502.          var _loc11_:DisplayObject = null;
  503.          var _loc1_:Sprite = Sprite(listContent.getChildByName("tileBGs"));
  504.          if(!_loc1_)
  505.          {
  506.             _loc1_ = new FlexSprite();
  507.             _loc1_.mouseEnabled = false;
  508.             _loc1_.name = "tileBGs";
  509.             listContent.addChildAt(_loc1_,0);
  510.          }
  511.          _loc2_ = getStyle("alternatingItemColors");
  512.          if(!_loc2_ || _loc2_.length == 0)
  513.          {
  514.             while(_loc1_.numChildren > _loc5_)
  515.             {
  516.                _loc1_.removeChildAt(_loc1_.numChildren - 1);
  517.             }
  518.             return;
  519.          }
  520.          StyleManager.getColorNames(_loc2_);
  521.          var _loc3_:int = 0;
  522.          var _loc4_:int = 0;
  523.          while(_loc4_ < rowCount)
  524.          {
  525.             _loc6_ = 0;
  526.             while(_loc6_ < columnCount)
  527.             {
  528.                _loc7_ = _loc4_ < rowCount - 1 ? rowHeight : Math.min(rowHeight,listContent.height - (rowCount - 1) * rowHeight);
  529.                _loc8_ = _loc6_ < columnCount - 1 ? columnWidth : Math.min(columnWidth,listContent.width - (columnCount - 1) * columnWidth);
  530.                _loc9_ = !!listItems[_loc4_] ? listItems[_loc4_][_loc6_] : null;
  531.                _loc10_ = (verticalScrollPosition + _loc4_) * columnCount + (horizontalScrollPosition + _loc6_);
  532.                _loc11_ = drawTileBackground(_loc1_,_loc4_,_loc6_,_loc8_,_loc7_,_loc2_[_loc10_ % _loc2_.length],_loc9_);
  533.                _loc11_.y = _loc4_ * rowHeight;
  534.                _loc11_.x = _loc6_ * columnWidth;
  535.                _loc6_++;
  536.             }
  537.             _loc4_++;
  538.          }
  539.          _loc5_ = rowCount * columnCount;
  540.          while(_loc1_.numChildren > _loc5_)
  541.          {
  542.             _loc1_.removeChildAt(_loc1_.numChildren - 1);
  543.          }
  544.       }
  545.       
  546.       private function displayingPartialRow() : Boolean
  547.       {
  548.          var _loc2_:IListItemRenderer = null;
  549.          var _loc1_:Array = listItems[listItems.length - 1 - offscreenExtraRowsBottom];
  550.          if(Boolean(_loc1_) && _loc1_.length > 0)
  551.          {
  552.             _loc2_ = _loc1_[0];
  553.             if(!_loc2_ || _loc2_.y + _loc2_.height > listContent.heightExcludingOffsets - listContent.topOffset)
  554.             {
  555.                return true;
  556.             }
  557.          }
  558.          return false;
  559.       }
  560.       
  561.       override protected function createChildren() : void
  562.       {
  563.          super.createChildren();
  564.          listContent.mask = maskShape;
  565.       }
  566.       
  567.       override mx_internal function addClipMask(param1:Boolean) : void
  568.       {
  569.       }
  570.       
  571.       override protected function finishKeySelection() : void
  572.       {
  573.          var _loc1_:String = null;
  574.          var _loc3_:int = 0;
  575.          var _loc4_:int = 0;
  576.          var _loc5_:IListItemRenderer = null;
  577.          var _loc6_:ListEvent = null;
  578.          var _loc2_:Boolean = false;
  579.          if(caretIndex < 0)
  580.          {
  581.             return;
  582.          }
  583.          _loc3_ = indexToRow(caretIndex);
  584.          _loc4_ = indexToColumn(caretIndex);
  585.          _loc5_ = listItems[_loc3_ - verticalScrollPosition + offscreenExtraRowsTop][_loc4_ - horizontalScrollPosition + offscreenExtraColumnsLeft];
  586.          if(!bCtrlKey)
  587.          {
  588.             selectItem(_loc5_,bShiftKey,bCtrlKey);
  589.             _loc2_ = true;
  590.          }
  591.          if(bCtrlKey)
  592.          {
  593.             _loc1_ = itemToUID(_loc5_.data);
  594.             drawItem(visibleData[_loc1_],selectedData[_loc1_] != null,false,true);
  595.          }
  596.          if(_loc2_)
  597.          {
  598.             _loc6_ = new ListEvent(ListEvent.CHANGE);
  599.             _loc6_.itemRenderer = _loc5_;
  600.             _loc6_.rowIndex = _loc3_;
  601.             _loc6_.columnIndex = _loc4_;
  602.             dispatchEvent(_loc6_);
  603.          }
  604.       }
  605.       
  606.       override protected function scrollPositionToIndex(param1:int, param2:int) : int
  607.       {
  608.          var _loc3_:int = 0;
  609.          if(iterator)
  610.          {
  611.             if(direction == TileBaseDirection.HORIZONTAL)
  612.             {
  613.                _loc3_ = param2 * columnCount + param1;
  614.             }
  615.             else
  616.             {
  617.                _loc3_ = param1 * rowCount + param2;
  618.             }
  619.             return _loc3_;
  620.          }
  621.          return -1;
  622.       }
  623.       
  624.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  625.       {
  626.          var _loc2_:IListItemRenderer = null;
  627.          var _loc3_:int = 0;
  628.          var _loc4_:int = 0;
  629.          if(!iteratorValid)
  630.          {
  631.             return;
  632.          }
  633.          if(!collection)
  634.          {
  635.             return;
  636.          }
  637.          switch(param1.keyCode)
  638.          {
  639.             case Keyboard.UP:
  640.             case Keyboard.DOWN:
  641.                moveSelectionVertically(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  642.                param1.stopPropagation();
  643.                break;
  644.             case Keyboard.LEFT:
  645.             case Keyboard.RIGHT:
  646.                moveSelectionHorizontally(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  647.                param1.stopPropagation();
  648.                break;
  649.             case Keyboard.END:
  650.             case Keyboard.HOME:
  651.             case Keyboard.PAGE_UP:
  652.             case Keyboard.PAGE_DOWN:
  653.                if(direction == TileBaseDirection.VERTICAL)
  654.                {
  655.                   moveSelectionHorizontally(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  656.                }
  657.                else
  658.                {
  659.                   moveSelectionVertically(param1.keyCode,param1.shiftKey,param1.ctrlKey);
  660.                }
  661.                param1.stopPropagation();
  662.                break;
  663.             case Keyboard.SPACE:
  664.                if(caretIndex < 0)
  665.                {
  666.                   break;
  667.                }
  668.                _loc3_ = indexToRow(caretIndex);
  669.                _loc4_ = indexToColumn(caretIndex);
  670.                _loc2_ = listItems[_loc3_ - verticalScrollPosition][_loc4_ - horizontalScrollPosition];
  671.                selectItem(_loc2_,param1.shiftKey,param1.ctrlKey);
  672.                break;
  673.             default:
  674.                if(findKey(param1.keyCode))
  675.                {
  676.                   param1.stopPropagation();
  677.                }
  678.          }
  679.       }
  680.       
  681.       override protected function indexToColumn(param1:int) : int
  682.       {
  683.          var _loc3_:int = 0;
  684.          if(direction == TileBaseDirection.VERTICAL)
  685.          {
  686.             _loc3_ = maxRows > 0 ? maxRows : rowCount;
  687.             return Math.floor(param1 / _loc3_);
  688.          }
  689.          var _loc2_:int = maxColumns > 0 ? maxColumns : columnCount;
  690.          return param1 % _loc2_;
  691.       }
  692.       
  693.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  694.       {
  695.          if(explicitColumnCount > 0 && isNaN(explicitColumnWidth))
  696.          {
  697.             mx_internal::setColumnWidth(Math.floor((width - viewMetrics.left - viewMetrics.right) / explicitColumnCount));
  698.          }
  699.          if(explicitRowCount > 0 && isNaN(explicitRowHeight))
  700.          {
  701.             setRowHeight(Math.floor((height - viewMetrics.top - viewMetrics.bottom) / explicitRowCount));
  702.          }
  703.          super.updateDisplayList(param1,param2);
  704.          drawTileBackgrounds();
  705.       }
  706.       
  707.       override protected function scrollHorizontally(param1:int, param2:int, param3:Boolean) : void
  708.       {
  709.          var _loc4_:int = 0;
  710.          var _loc5_:int = 0;
  711.          var _loc6_:Number = NaN;
  712.          var _loc7_:String = null;
  713.          var _loc8_:int = 0;
  714.          var _loc9_:Number = NaN;
  715.          var _loc14_:int = 0;
  716.          var _loc15_:int = 0;
  717.          var _loc16_:int = 0;
  718.          var _loc20_:int = 0;
  719.          var _loc21_:int = 0;
  720.          var _loc22_:IListItemRenderer = null;
  721.          var _loc23_:int = 0;
  722.          var _loc24_:int = 0;
  723.          var _loc25_:Point = null;
  724.          var _loc26_:int = 0;
  725.          var _loc27_:IListItemRenderer = null;
  726.          var _loc28_:int = 0;
  727.          var _loc29_:int = 0;
  728.          if(param2 == 0)
  729.          {
  730.             return;
  731.          }
  732.          mx_internal::removeClipMask();
  733.          var _loc10_:int = offscreenExtraColumnsRight;
  734.          var _loc11_:int = offscreenExtraColumnsLeft;
  735.          var _loc12_:int = offscreenExtraColumns / 2;
  736.          var _loc13_:int = offscreenExtraColumns / 2;
  737.          if(param3)
  738.          {
  739.             offscreenExtraColumnsLeft = Math.min(_loc12_,offscreenExtraColumnsLeft + param2);
  740.             _loc15_ = _loc14_ = param2 - (offscreenExtraColumnsLeft - _loc11_);
  741.          }
  742.          else
  743.          {
  744.             _loc20_ = offscreenExtraColumnsRight == 0 && listItems[0] && listItems[0].length > 0 && Boolean(listItems[0][listItems[0].length - 1]) && listItems[0][listItems[0].length - 1].x + columnWidth < listContent.widthExcludingOffsets - listContent.leftOffset ? 1 : 0;
  745.             offscreenExtraColumnsLeft = Math.min(_loc12_,param1);
  746.             offscreenExtraColumnsRight = Math.min(offscreenExtraColumnsRight + param2 - _loc20_,_loc13_);
  747.             _loc14_ = param2 - (_loc11_ - offscreenExtraColumnsLeft);
  748.             _loc16_ = offscreenExtraColumnsLeft - _loc11_ + _loc20_ + (offscreenExtraColumnsRight - _loc10_);
  749.             _loc15_ = param2 - (offscreenExtraColumnsRight - _loc10_) - _loc20_;
  750.          }
  751.          var _loc17_:int = int(listItems[0].length);
  752.          var _loc18_:int = 0;
  753.          while(_loc18_ < _loc15_)
  754.          {
  755.             _loc21_ = 0;
  756.             while(_loc21_ < rowCount)
  757.             {
  758.                _loc22_ = param3 ? listItems[_loc21_][_loc18_] : listItems[_loc21_][_loc17_ - _loc18_ - 1];
  759.                if(_loc22_)
  760.                {
  761.                   delete visibleData[rowMap[_loc22_.name].uid];
  762.                   removeIndicators(rowMap[_loc22_.name].uid);
  763.                   addToFreeItemRenderers(_loc22_);
  764.                   delete rowMap[_loc22_.name];
  765.                   if(param3)
  766.                   {
  767.                      listItems[_loc21_][_loc18_] = null;
  768.                   }
  769.                   else
  770.                   {
  771.                      listItems[_loc21_][_loc17_ - _loc18_ - 1] = null;
  772.                   }
  773.                }
  774.                _loc21_++;
  775.             }
  776.             _loc18_++;
  777.          }
  778.          if(param3)
  779.          {
  780.             _loc9_ = _loc14_ * columnWidth;
  781.             _loc6_ = 0;
  782.             _loc18_ = _loc14_;
  783.             while(_loc18_ < _loc17_)
  784.             {
  785.                _loc21_ = 0;
  786.                while(_loc21_ < rowCount)
  787.                {
  788.                   _loc27_ = listItems[_loc21_][_loc18_];
  789.                   if(_loc27_)
  790.                   {
  791.                      _loc22_ = _loc27_;
  792.                      _loc22_.x -= _loc9_;
  793.                      _loc7_ = rowMap[_loc22_.name].uid;
  794.                      listItems[_loc21_][_loc18_ - _loc14_] = _loc22_;
  795.                      rowMap[_loc22_.name].columnIndex -= _loc14_;
  796.                      moveIndicatorsHorizontally(_loc7_,-_loc9_);
  797.                   }
  798.                   else
  799.                   {
  800.                      listItems[_loc21_][_loc18_ - _loc14_] = null;
  801.                   }
  802.                   _loc21_++;
  803.                }
  804.                _loc6_ += columnWidth;
  805.                _loc18_++;
  806.             }
  807.             _loc18_ = 0;
  808.             while(_loc18_ < _loc14_)
  809.             {
  810.                _loc21_ = 0;
  811.                while(_loc21_ < rowCount)
  812.                {
  813.                   listItems[_loc21_][_loc17_ - _loc18_ - 1] = null;
  814.                   _loc21_++;
  815.                }
  816.                _loc18_++;
  817.             }
  818.             _loc8_ = indicesToIndex(verticalScrollPosition,horizontalScrollPosition + _loc17_ - offscreenExtraColumnsLeft - _loc14_);
  819.             seekPositionSafely(_loc8_);
  820.             _loc23_ = param2 + (_loc13_ - _loc10_);
  821.             _loc24_ = !!listItems.length ? int(listItems[0].length - _loc14_) : 0;
  822.             mx_internal::allowRendererStealingDuringLayout = false;
  823.             _loc25_ = makeRowsAndColumns(_loc6_,0,listContent.width,listContent.height,_loc17_ - _loc14_,0,true,_loc23_);
  824.             mx_internal::allowRendererStealingDuringLayout = true;
  825.             _loc26_ = listItems[0].length - (_loc24_ + _loc25_.x);
  826.             if(_loc26_)
  827.             {
  828.                _loc18_ = 0;
  829.                while(_loc18_ < listItems.length)
  830.                {
  831.                   _loc21_ = 0;
  832.                   while(_loc21_ < _loc26_)
  833.                   {
  834.                      listItems[_loc18_].pop();
  835.                      _loc21_++;
  836.                   }
  837.                   _loc18_++;
  838.                }
  839.             }
  840.             _loc8_ = indicesToIndex(verticalScrollPosition,horizontalScrollPosition - offscreenExtraColumnsLeft);
  841.             seekPositionSafely(_loc8_);
  842.             offscreenExtraColumnsRight = Math.max(0,_loc13_ - (_loc25_.x < param2 ? _loc23_ - _loc25_.x : 0));
  843.          }
  844.          else
  845.          {
  846.             if(_loc16_ < 0)
  847.             {
  848.                _loc29_ = listItems[0].length + _loc16_;
  849.                _loc21_ = 0;
  850.                while(_loc21_ < rowCount)
  851.                {
  852.                   while(listItems[_loc21_].length > _loc29_)
  853.                   {
  854.                      listItems[_loc21_].pop();
  855.                   }
  856.                   _loc21_++;
  857.                }
  858.             }
  859.             _loc9_ = _loc14_ * columnWidth;
  860.             if(_loc14_)
  861.             {
  862.                _loc6_ = _loc9_;
  863.             }
  864.             _loc28_ = _loc17_ + _loc16_;
  865.             _loc18_ = _loc28_ - _loc14_ - 1;
  866.             while(_loc18_ >= 0)
  867.             {
  868.                _loc21_ = 0;
  869.                while(_loc21_ < rowCount)
  870.                {
  871.                   _loc22_ = listItems[_loc21_][_loc18_];
  872.                   if(_loc22_)
  873.                   {
  874.                      _loc22_.x += _loc9_;
  875.                      _loc7_ = rowMap[_loc22_.name].uid;
  876.                      listItems[_loc21_][_loc18_ + _loc14_] = _loc22_;
  877.                      rowMap[_loc22_.name].columnIndex += _loc14_;
  878.                      moveIndicatorsHorizontally(_loc7_,_loc9_);
  879.                   }
  880.                   else
  881.                   {
  882.                      listItems[_loc21_][_loc18_ + _loc14_] = null;
  883.                   }
  884.                   _loc21_++;
  885.                }
  886.                _loc18_--;
  887.             }
  888.             _loc18_ = 0;
  889.             while(_loc18_ < _loc14_)
  890.             {
  891.                _loc21_ = 0;
  892.                while(_loc21_ < rowCount)
  893.                {
  894.                   listItems[_loc21_][_loc18_] = null;
  895.                   _loc21_++;
  896.                }
  897.                _loc18_++;
  898.             }
  899.             _loc8_ = indicesToIndex(verticalScrollPosition,horizontalScrollPosition - offscreenExtraColumnsLeft);
  900.             seekPositionSafely(_loc8_);
  901.             mx_internal::allowRendererStealingDuringLayout = false;
  902.             makeRowsAndColumns(0,0,_loc6_,listContent.height,0,0,true,_loc14_);
  903.             mx_internal::allowRendererStealingDuringLayout = true;
  904.             seekPositionSafely(_loc8_);
  905.          }
  906.          var _loc19_:Number = listContent.widthExcludingOffsets;
  907.          listContent.leftOffset = -columnWidth * offscreenExtraColumnsLeft;
  908.          listContent.rightOffset = !!offscreenExtraColumnsRight ? listItems[0][listItems[0].length - 1].x + listItems[0][listItems[0].length - 1].width + listContent.leftOffset - _loc19_ : 0;
  909.          adjustListContent();
  910.          mx_internal::addClipMask(false);
  911.       }
  912.       
  913.       override mx_internal function adjustOffscreenRowsAndColumns() : void
  914.       {
  915.          if(direction == TileBaseDirection.VERTICAL)
  916.          {
  917.             offscreenExtraRows = 0;
  918.             offscreenExtraColumns = offscreenExtraRowsOrColumns;
  919.          }
  920.          else
  921.          {
  922.             offscreenExtraColumns = 0;
  923.             offscreenExtraRows = offscreenExtraRowsOrColumns;
  924.          }
  925.       }
  926.       
  927.       override protected function moveSelectionVertically(param1:uint, param2:Boolean, param3:Boolean) : void
  928.       {
  929.          var _loc4_:Number = NaN;
  930.          var _loc5_:Number = NaN;
  931.          var _loc6_:IListItemRenderer = null;
  932.          var _loc7_:String = null;
  933.          var _loc8_:int = 0;
  934.          var _loc9_:Boolean = false;
  935.          var _loc11_:int = 0;
  936.          var _loc12_:int = 0;
  937.          var _loc17_:ScrollEvent = null;
  938.          var _loc10_:Boolean = false;
  939.          var _loc13_:int = listItems.length - offscreenExtraRowsTop - offscreenExtraRowsBottom;
  940.          var _loc14_:int = maxRows > 0 && direction != TileBaseDirection.HORIZONTAL ? maxRows : _loc13_;
  941.          var _loc15_:int = displayingPartialRow() ? 1 : 0;
  942.          var _loc16_:int = displayingPartialColumn() ? 1 : 0;
  943.          if(!collection)
  944.          {
  945.             return;
  946.          }
  947.          showCaret = true;
  948.          switch(param1)
  949.          {
  950.             case Keyboard.UP:
  951.                if(caretIndex > 0)
  952.                {
  953.                   if(direction == TileBaseDirection.VERTICAL)
  954.                   {
  955.                      --caretIndex;
  956.                   }
  957.                   else
  958.                   {
  959.                      _loc11_ = indexToRow(caretIndex);
  960.                      _loc12_ = indexToColumn(caretIndex);
  961.                      if(_loc11_ == 0)
  962.                      {
  963.                         _loc12_--;
  964.                         _loc11_ = lastRowInColumn(_loc12_);
  965.                      }
  966.                      else
  967.                      {
  968.                         _loc11_--;
  969.                      }
  970.                      caretIndex = Math.min(indicesToIndex(_loc11_,_loc12_),collection.length - 1);
  971.                   }
  972.                   _loc11_ = indexToRow(caretIndex);
  973.                   _loc12_ = indexToColumn(caretIndex);
  974.                   if(_loc11_ < verticalScrollPosition)
  975.                   {
  976.                      _loc4_ = verticalScrollPosition - 1;
  977.                   }
  978.                   if(_loc11_ > verticalScrollPosition + _loc13_ - _loc15_)
  979.                   {
  980.                      _loc4_ = maxVerticalScrollPosition;
  981.                   }
  982.                   if(_loc12_ < horizontalScrollPosition)
  983.                   {
  984.                      _loc5_ = horizontalScrollPosition - 1;
  985.                   }
  986.                }
  987.                break;
  988.             case Keyboard.DOWN:
  989.                if(caretIndex < collection.length - 1)
  990.                {
  991.                   if(direction == TileBaseDirection.VERTICAL || caretIndex == -1)
  992.                   {
  993.                      ++caretIndex;
  994.                   }
  995.                   else
  996.                   {
  997.                      _loc11_ = indexToRow(caretIndex);
  998.                      _loc12_ = indexToColumn(caretIndex);
  999.                      if(_loc11_ == lastRowInColumn(_loc12_))
  1000.                      {
  1001.                         _loc11_ = 0;
  1002.                         _loc12_++;
  1003.                      }
  1004.                      else
  1005.                      {
  1006.                         _loc11_++;
  1007.                      }
  1008.                      caretIndex = Math.min(indicesToIndex(_loc11_,_loc12_),collection.length - 1);
  1009.                   }
  1010.                   _loc11_ = indexToRow(caretIndex);
  1011.                   _loc12_ = indexToColumn(caretIndex);
  1012.                   if(_loc11_ >= verticalScrollPosition + _loc13_ - _loc15_ && verticalScrollPosition < maxVerticalScrollPosition)
  1013.                   {
  1014.                      _loc4_ = verticalScrollPosition + 1;
  1015.                   }
  1016.                   if(_loc11_ < verticalScrollPosition)
  1017.                   {
  1018.                      _loc4_ = _loc11_;
  1019.                   }
  1020.                   if(_loc12_ > horizontalScrollPosition + columnCount - 1)
  1021.                   {
  1022.                      _loc5_ = horizontalScrollPosition + 1;
  1023.                   }
  1024.                }
  1025.                break;
  1026.             case Keyboard.PAGE_UP:
  1027.                if(caretIndex < 0)
  1028.                {
  1029.                   caretIndex = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  1030.                }
  1031.                _loc11_ = indexToRow(caretIndex);
  1032.                _loc12_ = indexToColumn(caretIndex);
  1033.                if(verticalScrollPosition > 0)
  1034.                {
  1035.                   if(_loc11_ == verticalScrollPosition)
  1036.                   {
  1037.                      _loc4_ = _loc11_ = Math.max(verticalScrollPosition - (_loc13_ - _loc15_),0);
  1038.                   }
  1039.                   else
  1040.                   {
  1041.                      _loc11_ = verticalScrollPosition;
  1042.                   }
  1043.                   caretIndex = indicesToIndex(_loc11_,_loc12_);
  1044.                   break;
  1045.                }
  1046.             case Keyboard.HOME:
  1047.                if(collection.length)
  1048.                {
  1049.                   caretIndex = 0;
  1050.                   _loc4_ = 0;
  1051.                   _loc5_ = 0;
  1052.                }
  1053.                break;
  1054.             case Keyboard.PAGE_DOWN:
  1055.                if(caretIndex < 0)
  1056.                {
  1057.                   caretIndex = scrollPositionToIndex(horizontalScrollPosition,verticalScrollPosition);
  1058.                }
  1059.                _loc11_ = indexToRow(caretIndex);
  1060.                _loc12_ = indexToColumn(caretIndex);
  1061.                if(_loc11_ < maxVerticalScrollPosition)
  1062.                {
  1063.                   if(_loc11_ == verticalScrollPosition + (_loc13_ - _loc15_))
  1064.                   {
  1065.                      _loc4_ = Math.min(verticalScrollPosition + _loc13_ - _loc15_,maxVerticalScrollPosition);
  1066.                      _loc11_ = verticalScrollPosition + _loc13_;
  1067.                   }
  1068.                   else
  1069.                   {
  1070.                      _loc11_ = Math.min(verticalScrollPosition + _loc13_ - _loc15_,indexToRow(collection.length - 1));
  1071.                      if(_loc11_ == verticalScrollPosition + _loc13_ - _loc15_)
  1072.                      {
  1073.                         _loc4_ = Math.min(verticalScrollPosition + _loc13_ - _loc15_,maxVerticalScrollPosition);
  1074.                      }
  1075.                   }
  1076.                   caretIndex = Math.min(indicesToIndex(_loc11_,_loc12_),collection.length - 1);
  1077.                   break;
  1078.                }
  1079.             case Keyboard.END:
  1080.                if(caretIndex < collection.length)
  1081.                {
  1082.                   caretIndex = collection.length - 1;
  1083.                   _loc4_ = maxVerticalScrollPosition;
  1084.                   _loc5_ = maxHorizontalScrollPosition;
  1085.                }
  1086.          }
  1087.          if(!isNaN(_loc4_))
  1088.          {
  1089.             if(_loc4_ != verticalScrollPosition)
  1090.             {
  1091.                _loc17_ = new ScrollEvent(ScrollEvent.SCROLL);
  1092.                _loc17_.detail = ScrollEventDetail.THUMB_POSITION;
  1093.                _loc17_.direction = ScrollEventDirection.VERTICAL;
  1094.                _loc17_.delta = _loc4_ - verticalScrollPosition;
  1095.                _loc17_.position = _loc4_;
  1096.                verticalScrollPosition = _loc4_;
  1097.                dispatchEvent(_loc17_);
  1098.             }
  1099.          }
  1100.          if(iteratorValid)
  1101.          {
  1102.             if(!isNaN(_loc5_))
  1103.             {
  1104.                if(_loc5_ != horizontalScrollPosition)
  1105.                {
  1106.                   _loc17_ = new ScrollEvent(ScrollEvent.SCROLL);
  1107.                   _loc17_.detail = ScrollEventDetail.THUMB_POSITION;
  1108.                   _loc17_.direction = ScrollEventDirection.HORIZONTAL;
  1109.                   _loc17_.delta = _loc5_ - horizontalScrollPosition;
  1110.                   _loc17_.position = _loc5_;
  1111.                   horizontalScrollPosition = _loc5_;
  1112.                   dispatchEvent(_loc17_);
  1113.                }
  1114.             }
  1115.          }
  1116.          if(!iteratorValid)
  1117.          {
  1118.             keySelectionPending = true;
  1119.             return;
  1120.          }
  1121.          bShiftKey = param2;
  1122.          bCtrlKey = param3;
  1123.          lastKey = param1;
  1124.          finishKeySelection();
  1125.       }
  1126.       
  1127.       override protected function scrollVertically(param1:int, param2:int, param3:Boolean) : void
  1128.       {
  1129.          var _loc4_:int = 0;
  1130.          var _loc5_:int = 0;
  1131.          var _loc6_:Number = NaN;
  1132.          var _loc7_:String = null;
  1133.          var _loc8_:int = 0;
  1134.          var _loc9_:Number = NaN;
  1135.          var _loc14_:int = 0;
  1136.          var _loc15_:int = 0;
  1137.          var _loc16_:int = 0;
  1138.          var _loc21_:int = 0;
  1139.          var _loc22_:int = 0;
  1140.          var _loc23_:IListItemRenderer = null;
  1141.          var _loc24_:int = 0;
  1142.          var _loc25_:Point = null;
  1143.          var _loc26_:int = 0;
  1144.          mx_internal::removeClipMask();
  1145.          var _loc10_:int = offscreenExtraRowsBottom;
  1146.          var _loc11_:int = offscreenExtraRowsTop;
  1147.          var _loc12_:int = offscreenExtraRows / 2;
  1148.          var _loc13_:int = offscreenExtraRows / 2;
  1149.          if(param3)
  1150.          {
  1151.             offscreenExtraRowsTop = Math.min(_loc12_,offscreenExtraRowsTop + param2);
  1152.             _loc15_ = _loc14_ = param2 - (offscreenExtraRowsTop - _loc11_);
  1153.          }
  1154.          else
  1155.          {
  1156.             _loc21_ = offscreenExtraRowsBottom == 0 && listItems.length && Boolean(listItems[listItems.length - 1][0]) && listItems[listItems.length - 1][0].y + rowHeight < listContent.heightExcludingOffsets - listContent.topOffset ? 1 : 0;
  1157.             offscreenExtraRowsTop = Math.min(_loc12_,param1);
  1158.             offscreenExtraRowsBottom = Math.min(offscreenExtraRowsBottom + param2 - _loc21_,_loc13_);
  1159.             _loc14_ = param2 - (_loc11_ - offscreenExtraRowsTop);
  1160.             _loc16_ = offscreenExtraRowsTop - _loc11_ + _loc21_ + (offscreenExtraRowsBottom - _loc10_);
  1161.             _loc15_ = param2 - (offscreenExtraRowsBottom - _loc10_) - _loc21_;
  1162.          }
  1163.          var _loc17_:int = int(listItems.length);
  1164.          var _loc18_:int = 0;
  1165.          while(_loc18_ < _loc15_)
  1166.          {
  1167.             _loc5_ = param3 ? int(listItems[_loc18_].length) : int(listItems[_loc17_ - _loc18_ - 1].length);
  1168.             _loc22_ = 0;
  1169.             while(_loc22_ < columnCount && _loc22_ < _loc5_)
  1170.             {
  1171.                _loc23_ = param3 ? listItems[_loc18_][_loc22_] : listItems[_loc17_ - _loc18_ - 1][_loc22_];
  1172.                if(_loc23_)
  1173.                {
  1174.                   delete visibleData[rowMap[_loc23_.name].uid];
  1175.                   removeIndicators(rowMap[_loc23_.name].uid);
  1176.                   addToFreeItemRenderers(_loc23_);
  1177.                   delete rowMap[_loc23_.name];
  1178.                   if(param3)
  1179.                   {
  1180.                      listItems[_loc18_][_loc22_] = null;
  1181.                   }
  1182.                   else
  1183.                   {
  1184.                      listItems[_loc17_ - _loc18_ - 1][_loc22_] = null;
  1185.                   }
  1186.                }
  1187.                _loc22_++;
  1188.             }
  1189.             _loc18_++;
  1190.          }
  1191.          var _loc19_:int = int(listItems.length);
  1192.          if(param3)
  1193.          {
  1194.             _loc9_ = _loc14_ * rowHeight;
  1195.             _loc6_ = 0;
  1196.             _loc18_ = _loc14_;
  1197.             while(_loc18_ < _loc19_)
  1198.             {
  1199.                _loc5_ = int(listItems[_loc18_].length);
  1200.                _loc22_ = 0;
  1201.                while(_loc22_ < columnCount && _loc22_ < _loc5_)
  1202.                {
  1203.                   _loc23_ = listItems[_loc18_][_loc22_];
  1204.                   listItems[_loc18_ - _loc14_][_loc22_] = _loc23_;
  1205.                   if(_loc23_)
  1206.                   {
  1207.                      _loc23_.y -= _loc9_;
  1208.                      rowMap[_loc23_.name].rowIndex -= _loc14_;
  1209.                      moveIndicatorsVertically(rowMap[_loc23_.name].uid,-_loc9_);
  1210.                   }
  1211.                   _loc22_++;
  1212.                }
  1213.                if(_loc5_ < columnCount)
  1214.                {
  1215.                   _loc22_ = _loc5_;
  1216.                   while(_loc22_ < columnCount)
  1217.                   {
  1218.                      listItems[_loc18_ - _loc14_][_loc22_] = null;
  1219.                      _loc22_++;
  1220.                   }
  1221.                }
  1222.                rowInfo[_loc18_ - _loc14_] = rowInfo[_loc18_];
  1223.                rowInfo[_loc18_ - _loc14_].y -= _loc9_;
  1224.                _loc6_ = rowInfo[_loc18_ - _loc14_].y + rowHeight;
  1225.                _loc18_++;
  1226.             }
  1227.             listItems.splice(_loc19_ - _loc14_ - 1,_loc14_);
  1228.             rowInfo.splice(_loc19_ - _loc14_ - 1,_loc14_);
  1229.             _loc8_ = indicesToIndex(verticalScrollPosition - offscreenExtraRowsTop + _loc19_ - _loc14_,horizontalScrollPosition);
  1230.             seekPositionSafely(_loc8_);
  1231.             _loc24_ = param2 + (_loc13_ - _loc10_);
  1232.             _loc25_ = makeRowsAndColumns(0,_loc6_,listContent.width,_loc6_ + param2 * rowHeight,0,_loc19_ - _loc14_,true,_loc24_);
  1233.             _loc26_ = _loc24_ - _loc25_.y;
  1234.             while(_loc26_--)
  1235.             {
  1236.                listItems.pop();
  1237.                rowInfo.pop();
  1238.             }
  1239.             _loc8_ = indicesToIndex(verticalScrollPosition - offscreenExtraRowsTop,horizontalScrollPosition);
  1240.             seekPositionSafely(_loc8_);
  1241.             offscreenExtraRowsBottom = Math.max(0,_loc13_ - (_loc25_.y < param2 ? _loc24_ - _loc25_.y : 0));
  1242.          }
  1243.          else
  1244.          {
  1245.             if(_loc16_ < 0)
  1246.             {
  1247.                listItems.splice(listItems.length + _loc16_,-_loc16_);
  1248.                rowInfo.splice(rowInfo.length + _loc16_,-_loc16_);
  1249.             }
  1250.             else if(_loc16_ > 0)
  1251.             {
  1252.                _loc18_ = 0;
  1253.                while(_loc18_ < _loc16_)
  1254.                {
  1255.                   listItems[_loc19_ + _loc18_] = [];
  1256.                   _loc18_++;
  1257.                }
  1258.             }
  1259.             _loc9_ = _loc14_ * rowHeight;
  1260.             _loc6_ = Number(rowInfo[_loc14_].y);
  1261.             _loc18_ = listItems.length - 1 - _loc14_;
  1262.             while(_loc18_ >= 0)
  1263.             {
  1264.                _loc5_ = int(listItems[_loc18_].length);
  1265.                _loc22_ = 0;
  1266.                while(_loc22_ < columnCount && _loc22_ < _loc5_)
  1267.                {
  1268.                   _loc23_ = listItems[_loc18_][_loc22_];
  1269.                   if(_loc23_)
  1270.                   {
  1271.                      _loc23_.y += _loc9_;
  1272.                      rowMap[_loc23_.name].rowIndex += _loc14_;
  1273.                      _loc7_ = rowMap[_loc23_.name].uid;
  1274.                      listItems[_loc18_ + _loc14_][_loc22_] = _loc23_;
  1275.                      moveIndicatorsVertically(_loc7_,_loc9_);
  1276.                   }
  1277.                   else
  1278.                   {
  1279.                      listItems[_loc18_ + _loc14_][_loc22_] = null;
  1280.                   }
  1281.                   _loc22_++;
  1282.                }
  1283.                rowInfo[_loc18_ + _loc14_] = rowInfo[_loc18_];
  1284.                rowInfo[_loc18_ + _loc14_].y += _loc9_;
  1285.                _loc18_--;
  1286.             }
  1287.             _loc18_ = 0;
  1288.             while(_loc18_ < _loc14_)
  1289.             {
  1290.                _loc22_ = 0;
  1291.                while(_loc22_ < columnCount)
  1292.                {
  1293.                   listItems[_loc18_][_loc22_] = null;
  1294.                   _loc22_++;
  1295.                }
  1296.                _loc18_++;
  1297.             }
  1298.             _loc8_ = indicesToIndex(verticalScrollPosition - offscreenExtraRowsTop,horizontalScrollPosition);
  1299.             seekPositionSafely(_loc8_);
  1300.             mx_internal::allowRendererStealingDuringLayout = false;
  1301.             _loc25_ = makeRowsAndColumns(0,0,listContent.width,_loc6_,0,0,true,_loc14_);
  1302.             mx_internal::allowRendererStealingDuringLayout = true;
  1303.             seekPositionSafely(_loc8_);
  1304.          }
  1305.          var _loc20_:Number = listContent.heightExcludingOffsets;
  1306.          listContent.topOffset = -rowHeight * offscreenExtraRowsTop;
  1307.          listContent.bottomOffset = !!offscreenExtraRowsBottom ? rowInfo[rowInfo.length - 1].y + rowHeight + listContent.topOffset - _loc20_ : 0;
  1308.          adjustListContent();
  1309.          mx_internal::addClipMask(false);
  1310.       }
  1311.       
  1312.       override public function showDropFeedback(param1:DragEvent) : void
  1313.       {
  1314.          var _loc7_:Class = null;
  1315.          var _loc8_:EdgeMetrics = null;
  1316.          if(!mx_internal::dropIndicator)
  1317.          {
  1318.             _loc7_ = getStyle("dropIndicatorSkin");
  1319.             if(!_loc7_)
  1320.             {
  1321.                _loc7_ = ListDropIndicator;
  1322.             }
  1323.             mx_internal::dropIndicator = IFlexDisplayObject(new _loc7_());
  1324.             _loc8_ = viewMetrics;
  1325.             drawFocus(true);
  1326.             mx_internal::dropIndicator.x = 2;
  1327.             if(direction == TileBaseDirection.HORIZONTAL)
  1328.             {
  1329.                mx_internal::dropIndicator.setActualSize(rowHeight - 4,4);
  1330.                DisplayObject(mx_internal::dropIndicator).rotation = 90;
  1331.             }
  1332.             else
  1333.             {
  1334.                mx_internal::dropIndicator.setActualSize(columnWidth - 4,4);
  1335.             }
  1336.             mx_internal::dropIndicator.visible = true;
  1337.             listContent.addChild(DisplayObject(mx_internal::dropIndicator));
  1338.             if(collection)
  1339.             {
  1340.                mx_internal::dragScrollingInterval = setInterval(dragScroll,15);
  1341.             }
  1342.          }
  1343.          var _loc2_:int = calculateDropIndex(param1);
  1344.          var _loc3_:int = indexToRow(_loc2_);
  1345.          var _loc4_:int = indexToColumn(_loc2_);
  1346.          _loc3_ -= verticalScrollPosition - offscreenExtraRowsTop;
  1347.          _loc4_ -= horizontalScrollPosition - offscreenExtraColumnsLeft;
  1348.          var _loc5_:Number = listItems.length;
  1349.          if(_loc3_ >= _loc5_)
  1350.          {
  1351.             _loc3_ = _loc5_ - 1;
  1352.          }
  1353.          var _loc6_:Number = !!_loc5_ ? Number(listItems[0].length) : 0;
  1354.          if(_loc4_ > _loc6_)
  1355.          {
  1356.             _loc4_ = _loc6_;
  1357.          }
  1358.          mx_internal::dropIndicator.x = _loc6_ && listItems[_loc3_].length && Boolean(listItems[_loc3_][_loc4_]) ? Number(listItems[_loc3_][_loc4_].x) : _loc4_ * columnWidth;
  1359.          mx_internal::dropIndicator.y = _loc5_ && listItems[_loc3_].length && Boolean(listItems[_loc3_][0]) ? Number(listItems[_loc3_][0].y) : _loc3_ * rowHeight;
  1360.       }
  1361.       
  1362.       public function set maxColumns(param1:int) : void
  1363.       {
  1364.          if(_maxColumns != param1)
  1365.          {
  1366.             _maxColumns = param1;
  1367.             invalidateSize();
  1368.             invalidateDisplayList();
  1369.          }
  1370.       }
  1371.       
  1372.       override protected function configureScrollBars() : void
  1373.       {
  1374.          var _loc5_:int = 0;
  1375.          var _loc6_:int = 0;
  1376.          var _loc7_:int = 0;
  1377.          var _loc8_:int = 0;
  1378.          var _loc9_:int = 0;
  1379.          var _loc10_:int = 0;
  1380.          var _loc11_:int = 0;
  1381.          var _loc12_:int = 0;
  1382.          var _loc1_:int = int(listItems.length);
  1383.          if(_loc1_ == 0)
  1384.          {
  1385.             return;
  1386.          }
  1387.          var _loc2_:int = int(listItems[0].length);
  1388.          if(_loc2_ == 0)
  1389.          {
  1390.             return;
  1391.          }
  1392.          if(_loc1_ > 1 && (_loc1_ - offscreenExtraRowsTop - offscreenExtraRowsBottom) * rowHeight > listContent.heightExcludingOffsets)
  1393.          {
  1394.             _loc1_--;
  1395.          }
  1396.          _loc1_ -= offscreenExtraRowsTop + offscreenExtraRowsBottom;
  1397.          if(_loc2_ > 1 && (_loc2_ - offscreenExtraColumnsLeft - offscreenExtraColumnsRight) * columnWidth > listContent.widthExcludingOffsets)
  1398.          {
  1399.             _loc2_--;
  1400.          }
  1401.          _loc2_ -= offscreenExtraColumnsLeft + offscreenExtraColumnsRight;
  1402.          var _loc3_:Object = horizontalScrollBar;
  1403.          var _loc4_:Object = verticalScrollBar;
  1404.          if(direction == TileBaseDirection.VERTICAL)
  1405.          {
  1406.             if(iteratorValid && horizontalScrollPosition > 0)
  1407.             {
  1408.                _loc8_ = 0;
  1409.                while(_loc2_ > 0 && listItems[0][_loc2_ + offscreenExtraColumnsLeft - 1] == null)
  1410.                {
  1411.                   _loc2_--;
  1412.                   _loc8_++;
  1413.                }
  1414.                _loc9_ = Math.floor(listContent.widthExcludingOffsets / columnWidth);
  1415.                _loc10_ = Math.max(0,_loc9_ - (_loc2_ + _loc8_));
  1416.                if(Boolean(_loc8_) || Boolean(_loc10_))
  1417.                {
  1418.                   _loc11_ = 0;
  1419.                   while(_loc11_ < listItems.length)
  1420.                   {
  1421.                      while(listItems[_loc11_].length > _loc2_ + offscreenExtraColumnsLeft)
  1422.                      {
  1423.                         (listItems[_loc11_] as Array).pop();
  1424.                      }
  1425.                      _loc11_++;
  1426.                   }
  1427.                   if(!runningDataEffect)
  1428.                   {
  1429.                      horizontalScrollPosition = Math.max(0,horizontalScrollPosition - (_loc8_ + _loc10_));
  1430.                      _loc7_ = scrollPositionToIndex(Math.max(0,horizontalScrollPosition - offscreenExtraColumnsLeft),verticalScrollPosition);
  1431.                      seekPositionSafely(_loc7_);
  1432.                      updateList();
  1433.                   }
  1434.                   return;
  1435.                }
  1436.             }
  1437.             if(!iteratorValid)
  1438.             {
  1439.                _loc1_ = Math.floor(listContent.heightExcludingOffsets / rowHeight);
  1440.             }
  1441.             _loc5_ = maxRows > 0 ? maxRows : _loc1_;
  1442.             _loc6_ = !!collection ? int(Math.ceil(collection.length / _loc5_)) : _loc2_;
  1443.          }
  1444.          else
  1445.          {
  1446.             if(iteratorValid && verticalScrollPosition > 0)
  1447.             {
  1448.                _loc12_ = 0;
  1449.                while(_loc1_ > 0 && (listItems[_loc1_ + offscreenExtraRowsTop - 1] == null || listItems[_loc1_ + offscreenExtraRowsTop - 1][0] == null))
  1450.                {
  1451.                   _loc1_--;
  1452.                   _loc12_++;
  1453.                }
  1454.                if(_loc12_)
  1455.                {
  1456.                   while(listItems.length > _loc1_ + offscreenExtraRowsTop)
  1457.                   {
  1458.                      listItems.pop();
  1459.                      rowInfo.pop();
  1460.                   }
  1461.                   if(!runningDataEffect)
  1462.                   {
  1463.                      verticalScrollPosition = Math.max(0,verticalScrollPosition - _loc12_);
  1464.                      _loc7_ = scrollPositionToIndex(horizontalScrollPosition,Math.max(0,verticalScrollPosition - offscreenExtraRowsTop));
  1465.                      seekPositionSafely(_loc7_);
  1466.                      updateList();
  1467.                   }
  1468.                   return;
  1469.                }
  1470.             }
  1471.             if(!iteratorValid)
  1472.             {
  1473.                _loc2_ = Math.floor(listContent.widthExcludingOffsets / columnWidth);
  1474.             }
  1475.             _loc6_ = maxColumns > 0 ? maxColumns : _loc2_;
  1476.             _loc5_ = !!collection ? int(Math.ceil(collection.length / _loc6_)) : _loc1_;
  1477.          }
  1478.          maxHorizontalScrollPosition = Math.max(0,_loc6_ - _loc2_);
  1479.          maxVerticalScrollPosition = Math.max(0,_loc5_ - _loc1_);
  1480.          setScrollBarProperties(_loc6_,_loc2_,_loc5_,_loc1_);
  1481.       }
  1482.       
  1483.       override protected function indexToRow(param1:int) : int
  1484.       {
  1485.          var _loc3_:int = 0;
  1486.          if(direction == TileBaseDirection.VERTICAL)
  1487.          {
  1488.             _loc3_ = maxRows > 0 ? maxRows : rowCount;
  1489.             return param1 % _loc3_;
  1490.          }
  1491.          var _loc2_:int = maxColumns > 0 ? maxColumns : columnCount;
  1492.          return Math.floor(param1 / _loc2_);
  1493.       }
  1494.       
  1495.       private function displayingPartialColumn() : Boolean
  1496.       {
  1497.          var _loc1_:IListItemRenderer = null;
  1498.          if(Boolean(listItems[0]) && listItems[0].length > 0)
  1499.          {
  1500.             _loc1_ = listItems[0][listItems[0].length - 1 - offscreenExtraColumnsRight];
  1501.             if(Boolean(_loc1_) && _loc1_.x + _loc1_.width > listContent.widthExcludingOffsets - listContent.leftOffset)
  1502.             {
  1503.                return true;
  1504.             }
  1505.          }
  1506.          return false;
  1507.       }
  1508.       
  1509.       override protected function scrollHandler(param1:Event) : void
  1510.       {
  1511.          var scrollBar:ScrollBar = null;
  1512.          var pos:Number = NaN;
  1513.          var delta:int = 0;
  1514.          var startIndex:int = 0;
  1515.          var o:EdgeMetrics = null;
  1516.          var bookmark:CursorBookmark = null;
  1517.          var event:Event = param1;
  1518.          if(event is ScrollEvent)
  1519.          {
  1520.             if(!liveScrolling && ScrollEvent(event).detail == ScrollEventDetail.THUMB_TRACK)
  1521.             {
  1522.                return;
  1523.             }
  1524.             scrollBar = ScrollBar(event.target);
  1525.             pos = scrollBar.scrollPosition;
  1526.             if(scrollBar == verticalScrollBar)
  1527.             {
  1528.                delta = pos - verticalScrollPosition;
  1529.                super.scrollHandler(event);
  1530.                if(Math.abs(delta) >= listItems.length || !iteratorValid)
  1531.                {
  1532.                   startIndex = indicesToIndex(pos,horizontalScrollPosition);
  1533.                   try
  1534.                   {
  1535.                      iterator.seek(CursorBookmark.FIRST,startIndex);
  1536.                      if(!iteratorValid)
  1537.                      {
  1538.                         iteratorValid = true;
  1539.                         lastSeekPending = null;
  1540.                      }
  1541.                   }
  1542.                   catch(e:ItemPendingError)
  1543.                   {
  1544.                      lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,startIndex);
  1545.                      e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  1546.                      iteratorValid = false;
  1547.                   }
  1548.                   bookmark = iterator.bookmark;
  1549.                   clearIndicators();
  1550.                   clearVisibleData();
  1551.                   makeRowsAndColumns(0,0,listContent.width,listContent.height,0,0);
  1552.                   iterator.seek(bookmark,0);
  1553.                   drawRowBackgrounds();
  1554.                }
  1555.                else if(delta != 0)
  1556.                {
  1557.                   scrollVertically(pos,Math.abs(delta),delta > 0);
  1558.                }
  1559.             }
  1560.             else
  1561.             {
  1562.                delta = pos - horizontalScrollPosition;
  1563.                super.scrollHandler(event);
  1564.                if(Math.abs(delta) >= listItems[0].length || !iteratorValid)
  1565.                {
  1566.                   startIndex = indicesToIndex(verticalScrollPosition,pos);
  1567.                   try
  1568.                   {
  1569.                      iterator.seek(CursorBookmark.FIRST,startIndex);
  1570.                      if(!iteratorValid)
  1571.                      {
  1572.                         iteratorValid = true;
  1573.                         lastSeekPending = null;
  1574.                      }
  1575.                   }
  1576.                   catch(e:ItemPendingError)
  1577.                   {
  1578.                      lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST,startIndex);
  1579.                      e.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  1580.                      iteratorValid = false;
  1581.                   }
  1582.                   bookmark = iterator.bookmark;
  1583.                   clearIndicators();
  1584.                   clearVisibleData();
  1585.                   makeRowsAndColumns(0,0,listContent.width,listContent.height,0,0);
  1586.                   iterator.seek(bookmark,0);
  1587.                   drawRowBackgrounds();
  1588.                }
  1589.                else if(delta != 0)
  1590.                {
  1591.                   scrollHorizontally(pos,Math.abs(delta),delta > 0);
  1592.                }
  1593.             }
  1594.          }
  1595.       }
  1596.       
  1597.       mx_internal function purgeMeasuringRenderers() : void
  1598.       {
  1599.          var _loc1_:IListItemRenderer = null;
  1600.          for each(_loc1_ in measuringObjects)
  1601.          {
  1602.             if(_loc1_.parent)
  1603.             {
  1604.                _loc1_.parent.removeChild(DisplayObject(_loc1_));
  1605.             }
  1606.          }
  1607.          if(!measuringObjects)
  1608.          {
  1609.             measuringObjects = new Dictionary(true);
  1610.          }
  1611.       }
  1612.       
  1613.       override public function itemRendererToIndex(param1:IListItemRenderer) : int
  1614.       {
  1615.          var _loc2_:String = null;
  1616.          var _loc5_:int = 0;
  1617.          var _loc6_:int = 0;
  1618.          if(runningDataEffect)
  1619.          {
  1620.             _loc2_ = itemToUID(dataItemWrappersByRenderer[param1]);
  1621.          }
  1622.          else
  1623.          {
  1624.             _loc2_ = itemToUID(param1.data);
  1625.          }
  1626.          var _loc3_:int = int(listItems.length);
  1627.          var _loc4_:int = 0;
  1628.          while(_loc4_ < listItems.length)
  1629.          {
  1630.             _loc5_ = int(listItems[_loc4_].length);
  1631.             _loc6_ = 0;
  1632.             while(_loc6_ < _loc5_)
  1633.             {
  1634.                if(Boolean(listItems[_loc4_][_loc6_]) && rowMap[listItems[_loc4_][_loc6_].name].uid == _loc2_)
  1635.                {
  1636.                   if(direction == TileBaseDirection.VERTICAL)
  1637.                   {
  1638.                      return (_loc6_ + horizontalScrollPosition - offscreenExtraColumnsLeft) * Math.max(maxRows,rowCount) + _loc4_;
  1639.                   }
  1640.                   return (_loc4_ + verticalScrollPosition - offscreenExtraRowsTop) * Math.max(maxColumns,columnCount) + _loc6_;
  1641.                }
  1642.                _loc6_++;
  1643.             }
  1644.             _loc4_++;
  1645.          }
  1646.          return -1;
  1647.       }
  1648.       
  1649.       override public function measureHeightOfItems(param1:int = -1, param2:int = 0) : Number
  1650.       {
  1651.          var _loc3_:Number = NaN;
  1652.          var _loc7_:Object = null;
  1653.          var _loc8_:Object = null;
  1654.          var _loc9_:IFactory = null;
  1655.          var _loc10_:IListItemRenderer = null;
  1656.          var _loc4_:Boolean = false;
  1657.          if(Boolean(collection) && Boolean(collection.length))
  1658.          {
  1659.             _loc7_ = iterator.current;
  1660.             _loc8_ = _loc7_ is ItemWrapper ? _loc7_.data : _loc7_;
  1661.             _loc9_ = getItemRendererFactory(_loc8_);
  1662.             _loc10_ = measuringObjects[_loc9_];
  1663.             if(_loc10_ == null)
  1664.             {
  1665.                _loc10_ = mx_internal::getMeasuringRenderer(_loc8_);
  1666.                _loc4_ = true;
  1667.             }
  1668.             mx_internal::setupRendererFromData(_loc10_,_loc8_);
  1669.             _loc3_ = Number(_loc10_.getExplicitOrMeasuredHeight());
  1670.             if(_loc4_)
  1671.             {
  1672.                _loc10_.setActualSize(_loc10_.getExplicitOrMeasuredWidth(),_loc3_);
  1673.                _loc4_ = false;
  1674.             }
  1675.          }
  1676.          if(isNaN(_loc3_) || _loc3_ == 0)
  1677.          {
  1678.             _loc3_ = 50;
  1679.          }
  1680.          var _loc5_:Number = getStyle("paddingTop");
  1681.          var _loc6_:Number = getStyle("paddingBottom");
  1682.          _loc3_ += _loc5_ + _loc6_;
  1683.          return _loc3_ * param2;
  1684.       }
  1685.       
  1686.       mx_internal function getMeasuringRenderer(param1:Object) : IListItemRenderer
  1687.       {
  1688.          var _loc2_:IListItemRenderer = null;
  1689.          if(!measuringObjects)
  1690.          {
  1691.             measuringObjects = new Dictionary(true);
  1692.          }
  1693.          var _loc3_:IFactory = getItemRendererFactory(param1);
  1694.          _loc2_ = measuringObjects[_loc3_];
  1695.          if(!_loc2_)
  1696.          {
  1697.             _loc2_ = createItemRenderer(param1);
  1698.             _loc2_.owner = this;
  1699.             _loc2_.name = "hiddenItem";
  1700.             _loc2_.visible = false;
  1701.             _loc2_.styleName = listContent;
  1702.             listContent.addChild(DisplayObject(_loc2_));
  1703.             measuringObjects[_loc3_] = _loc2_;
  1704.          }
  1705.          return _loc2_;
  1706.       }
  1707.       
  1708.       private function getPreparedItemRenderer(param1:int, param2:int, param3:Object, param4:Object, param5:String) : IListItemRenderer
  1709.       {
  1710.          var _loc7_:IListItemRenderer = null;
  1711.          var _loc8_:ListData = null;
  1712.          var _loc9_:ListData = null;
  1713.          var _loc6_:IListItemRenderer = listItems[param1][param2];
  1714.          if(_loc6_)
  1715.          {
  1716.             if(runningDataEffect ? dataItemWrappersByRenderer[_loc6_] != param3 : _loc6_.data != param4)
  1717.             {
  1718.                addToFreeItemRenderers(_loc6_);
  1719.             }
  1720.             else
  1721.             {
  1722.                _loc7_ = _loc6_;
  1723.             }
  1724.          }
  1725.          if(!_loc7_)
  1726.          {
  1727.             if(mx_internal::allowRendererStealingDuringLayout)
  1728.             {
  1729.                _loc7_ = visibleData[param5];
  1730.                if(!_loc7_ && param3 != param4)
  1731.                {
  1732.                   _loc7_ = visibleData[itemToUID(param4)];
  1733.                }
  1734.             }
  1735.             if(_loc7_)
  1736.             {
  1737.                _loc9_ = ListData(rowMap[_loc7_.name]);
  1738.                if(_loc9_)
  1739.                {
  1740.                   if(direction == TileBaseDirection.HORIZONTAL && (_loc9_.rowIndex > param1 || _loc9_.rowIndex == param1 && _loc9_.columnIndex > param2) || direction == TileBaseDirection.VERTICAL && (_loc9_.columnIndex > param2 || _loc9_.columnIndex == param2 && _loc9_.rowIndex > param1))
  1741.                   {
  1742.                      listItems[_loc9_.rowIndex][_loc9_.columnIndex] = null;
  1743.                   }
  1744.                   else
  1745.                   {
  1746.                      _loc7_ = null;
  1747.                   }
  1748.                }
  1749.             }
  1750.             if(!_loc7_)
  1751.             {
  1752.                _loc7_ = getReservedOrFreeItemRenderer(param3);
  1753.                if((Boolean(_loc7_)) && !isRendererUnconstrained(_loc7_))
  1754.                {
  1755.                   _loc7_.x = 0;
  1756.                   _loc7_.y = 0;
  1757.                }
  1758.             }
  1759.             if(!_loc7_)
  1760.             {
  1761.                _loc7_ = createItemRenderer(param4);
  1762.             }
  1763.             _loc7_.owner = this;
  1764.             _loc7_.styleName = listContent;
  1765.          }
  1766.          if(!_loc7_.parent)
  1767.          {
  1768.             listContent.addChild(DisplayObject(_loc7_));
  1769.          }
  1770.          _loc8_ = ListData(makeListData(param4,param5,param1,param2));
  1771.          rowMap[_loc7_.name] = _loc8_;
  1772.          if(_loc7_ is IDropInListItemRenderer)
  1773.          {
  1774.             IDropInListItemRenderer(_loc7_).listData = !!param4 ? _loc8_ : null;
  1775.          }
  1776.          _loc7_.data = param4;
  1777.          if(param3 != param4)
  1778.          {
  1779.             dataItemWrappersByRenderer[_loc7_] = param3;
  1780.          }
  1781.          _loc7_.visible = true;
  1782.          if(param5)
  1783.          {
  1784.             visibleData[param5] = _loc7_;
  1785.          }
  1786.          listItems[param1][param2] = _loc7_;
  1787.          UIComponentGlobals.mx_internal::layoutManager.validateClient(_loc7_,true);
  1788.          return _loc7_;
  1789.       }
  1790.       
  1791.       private function placeAndDrawItemRenderer(param1:IListItemRenderer, param2:Number, param3:Number, param4:String) : void
  1792.       {
  1793.          var _loc8_:Number = NaN;
  1794.          var _loc5_:* = false;
  1795.          var _loc6_:* = false;
  1796.          var _loc7_:* = false;
  1797.          _loc8_ = Number(param1.getExplicitOrMeasuredHeight());
  1798.          if(param1.width != columnWidth || _loc8_ != rowHeight - mx_internal::cachedPaddingTop - mx_internal::cachedPaddingBottom)
  1799.          {
  1800.             param1.setActualSize(columnWidth,rowHeight - mx_internal::cachedPaddingTop - mx_internal::cachedPaddingBottom);
  1801.          }
  1802.          if(!isRendererUnconstrained(param1))
  1803.          {
  1804.             param1.move(param2,param3 + mx_internal::cachedPaddingTop);
  1805.          }
  1806.          _loc5_ = selectedData[param4] != null;
  1807.          if(runningDataEffect)
  1808.          {
  1809.             _loc5_ ||= selectedData[itemToUID(param1.data)] != null;
  1810.             _loc5_ = (_loc5_) && !getRendererSemanticValue(param1,ModifiedCollectionView.REPLACEMENT) && !getRendererSemanticValue(param1,ModifiedCollectionView.ADDED);
  1811.          }
  1812.          _loc6_ = highlightUID == param4;
  1813.          _loc7_ = caretUID == param4;
  1814.          if(param4)
  1815.          {
  1816.             drawItem(param1,_loc5_,_loc6_,_loc7_);
  1817.          }
  1818.       }
  1819.       
  1820.       override protected function makeRowsAndColumns(param1:Number, param2:Number, param3:Number, param4:Number, param5:int, param6:int, param7:Boolean = false, param8:uint = 0) : Point
  1821.       {
  1822.          var _loc9_:int = 0;
  1823.          var _loc10_:int = 0;
  1824.          var _loc11_:int = 0;
  1825.          var _loc12_:int = 0;
  1826.          var _loc13_:Number = NaN;
  1827.          var _loc14_:Number = NaN;
  1828.          var _loc15_:Object = null;
  1829.          var _loc16_:Object = null;
  1830.          var _loc17_:String = null;
  1831.          var _loc18_:IListItemRenderer = null;
  1832.          var _loc19_:IListItemRenderer = null;
  1833.          var _loc20_:Boolean = false;
  1834.          var _loc21_:Boolean = false;
  1835.          var _loc22_:int = 0;
  1836.          var _loc23_:Number = NaN;
  1837.          var _loc24_:int = 0;
  1838.          var _loc25_:int = 0;
  1839.          var _loc29_:Array = null;
  1840.          var _loc26_:Boolean = false;
  1841.          var _loc27_:Boolean = false;
  1842.          var _loc28_:Boolean = false;
  1843.          if(columnWidth == 0 || rowHeight == 0)
  1844.          {
  1845.             return null;
  1846.          }
  1847.          mx_internal::invalidateSizeFlag = true;
  1848.          allowItemSizeChangeNotification = false;
  1849.          if(direction == TileBaseDirection.VERTICAL)
  1850.          {
  1851.             _loc9_ = maxRows > 0 ? maxRows : int(Math.max(Math.floor(listContent.heightExcludingOffsets / rowHeight),1));
  1852.             _loc10_ = Math.max(Math.ceil(listContent.widthExcludingOffsets / columnWidth),1);
  1853.             setRowCount(_loc9_);
  1854.             mx_internal::setColumnCount(_loc10_);
  1855.             _loc11_ = param5;
  1856.             _loc13_ = param1;
  1857.             _loc25_ = _loc11_ - 1;
  1858.             _loc20_ = iterator != null && !iterator.afterLast && iteratorValid;
  1859.             while(param7 && param8-- || !param7 && _loc11_ < _loc10_ + param5)
  1860.             {
  1861.                _loc12_ = param6;
  1862.                _loc14_ = param2;
  1863.                while(_loc12_ < _loc9_)
  1864.                {
  1865.                   _loc21_ = _loc20_;
  1866.                   _loc15_ = _loc20_ ? iterator.current : null;
  1867.                   _loc16_ = _loc15_ is ItemWrapper ? _loc15_.data : _loc15_;
  1868.                   _loc20_ = moveNextSafely(_loc20_);
  1869.                   if(!listItems[_loc12_])
  1870.                   {
  1871.                      listItems[_loc12_] = [];
  1872.                   }
  1873.                   if(_loc21_ && _loc14_ < param4)
  1874.                   {
  1875.                      _loc17_ = itemToUID(_loc15_);
  1876.                      rowInfo[_loc12_] = new ListRowInfo(_loc14_,rowHeight,_loc17_);
  1877.                      _loc19_ = getPreparedItemRenderer(_loc12_,_loc11_,_loc15_,_loc16_,_loc17_);
  1878.                      placeAndDrawItemRenderer(_loc19_,_loc13_,_loc14_,_loc17_);
  1879.                      _loc25_ = Math.max(_loc11_,_loc25_);
  1880.                   }
  1881.                   else
  1882.                   {
  1883.                      _loc18_ = listItems[_loc12_][_loc11_];
  1884.                      if(_loc18_)
  1885.                      {
  1886.                         addToFreeItemRenderers(_loc18_);
  1887.                         listItems[_loc12_][_loc11_] = null;
  1888.                      }
  1889.                      rowInfo[_loc12_] = new ListRowInfo(_loc14_,rowHeight,_loc17_);
  1890.                   }
  1891.                   _loc14_ += rowHeight;
  1892.                   _loc12_++;
  1893.                }
  1894.                _loc11_++;
  1895.                if(param6)
  1896.                {
  1897.                   _loc22_ = 0;
  1898.                   while(_loc22_ < param6)
  1899.                   {
  1900.                      _loc20_ = moveNextSafely(_loc20_);
  1901.                      _loc22_++;
  1902.                   }
  1903.                }
  1904.                _loc13_ += columnWidth;
  1905.             }
  1906.          }
  1907.          else
  1908.          {
  1909.             _loc10_ = maxColumns > 0 ? maxColumns : int(Math.max(Math.floor(listContent.widthExcludingOffsets / columnWidth),1));
  1910.             _loc9_ = Math.max(Math.ceil(listContent.heightExcludingOffsets / rowHeight),1);
  1911.             mx_internal::setColumnCount(_loc10_);
  1912.             setRowCount(_loc9_);
  1913.             _loc12_ = param6;
  1914.             _loc14_ = param2;
  1915.             _loc20_ = iterator != null && !iterator.afterLast && iteratorValid;
  1916.             _loc24_ = _loc12_ - 1;
  1917.             while(param7 && param8-- || !param7 && _loc12_ < _loc9_ + param6)
  1918.             {
  1919.                _loc11_ = param5;
  1920.                _loc13_ = param1;
  1921.                rowInfo[_loc12_] = null;
  1922.                while(_loc11_ < _loc10_)
  1923.                {
  1924.                   _loc21_ = _loc20_;
  1925.                   _loc15_ = _loc20_ ? iterator.current : null;
  1926.                   _loc16_ = _loc15_ is ItemWrapper ? _loc15_.data : _loc15_;
  1927.                   _loc20_ = moveNextSafely(_loc20_);
  1928.                   if(!listItems[_loc12_])
  1929.                   {
  1930.                      listItems[_loc12_] = [];
  1931.                   }
  1932.                   if(_loc21_ && _loc13_ < param3)
  1933.                   {
  1934.                      _loc17_ = itemToUID(_loc15_);
  1935.                      if(!rowInfo[_loc12_])
  1936.                      {
  1937.                         rowInfo[_loc12_] = new ListRowInfo(_loc14_,rowHeight,_loc17_);
  1938.                      }
  1939.                      _loc19_ = getPreparedItemRenderer(_loc12_,_loc11_,_loc15_,_loc16_,_loc17_);
  1940.                      placeAndDrawItemRenderer(_loc19_,_loc13_,_loc14_,_loc17_);
  1941.                      _loc24_ = _loc12_;
  1942.                   }
  1943.                   else
  1944.                   {
  1945.                      if(!rowInfo[_loc12_])
  1946.                      {
  1947.                         rowInfo[_loc12_] = new ListRowInfo(_loc14_,rowHeight,_loc17_);
  1948.                      }
  1949.                      _loc18_ = listItems[_loc12_][_loc11_];
  1950.                      if(_loc18_)
  1951.                      {
  1952.                         addToFreeItemRenderers(_loc18_);
  1953.                         listItems[_loc12_][_loc11_] = null;
  1954.                      }
  1955.                   }
  1956.                   _loc13_ += columnWidth;
  1957.                   _loc11_++;
  1958.                }
  1959.                _loc12_++;
  1960.                if(param5)
  1961.                {
  1962.                   _loc22_ = 0;
  1963.                   while(_loc22_ < param5)
  1964.                   {
  1965.                      _loc20_ = moveNextSafely(_loc20_);
  1966.                      _loc22_++;
  1967.                   }
  1968.                }
  1969.                _loc14_ += rowHeight;
  1970.             }
  1971.          }
  1972.          if(!param7)
  1973.          {
  1974.             while(listItems.length > _loc9_ + offscreenExtraRowsTop)
  1975.             {
  1976.                _loc29_ = listItems.pop();
  1977.                rowInfo.pop();
  1978.                _loc22_ = 0;
  1979.                while(_loc22_ < _loc29_.length)
  1980.                {
  1981.                   _loc18_ = _loc29_[_loc22_];
  1982.                   if(_loc18_)
  1983.                   {
  1984.                      addToFreeItemRenderers(_loc18_);
  1985.                   }
  1986.                   _loc22_++;
  1987.                }
  1988.             }
  1989.             if(Boolean(listItems.length) && listItems[0].length > _loc10_ + offscreenExtraColumnsLeft)
  1990.             {
  1991.                _loc22_ = 0;
  1992.                while(_loc22_ < _loc9_ + offscreenExtraRowsTop)
  1993.                {
  1994.                   _loc29_ = listItems[_loc22_];
  1995.                   while(_loc29_.length > _loc10_ + offscreenExtraColumnsLeft)
  1996.                   {
  1997.                      _loc18_ = _loc29_.pop();
  1998.                      if(_loc18_)
  1999.                      {
  2000.                         addToFreeItemRenderers(_loc18_);
  2001.                      }
  2002.                   }
  2003.                   _loc22_++;
  2004.                }
  2005.             }
  2006.          }
  2007.          allowItemSizeChangeNotification = true;
  2008.          mx_internal::invalidateSizeFlag = false;
  2009.          return new Point(_loc25_ - param5 + 1,_loc24_ - param6 + 1);
  2010.       }
  2011.       
  2012.       private function lastColumnInRow(param1:int) : int
  2013.       {
  2014.          var _loc2_:int = maxRows > 0 ? maxRows : rowCount;
  2015.          var _loc3_:int = Math.floor((collection.length - 1) / _loc2_);
  2016.          if(indicesToIndex(param1,_loc3_) >= collection.length)
  2017.          {
  2018.             _loc3_--;
  2019.          }
  2020.          return _loc3_;
  2021.       }
  2022.       
  2023.       override protected function get dragImageOffsets() : Point
  2024.       {
  2025.          var _loc4_:String = null;
  2026.          var _loc1_:Point = new Point(8192,8192);
  2027.          var _loc2_:Boolean = false;
  2028.          var _loc3_:int = int(listItems.length);
  2029.          for(_loc4_ in visibleData)
  2030.          {
  2031.             if(selectedData[_loc4_])
  2032.             {
  2033.                _loc1_.x = Math.min(_loc1_.x,visibleData[_loc4_].x);
  2034.                _loc1_.y = Math.min(_loc1_.y,visibleData[_loc4_].y);
  2035.                _loc2_ = true;
  2036.             }
  2037.          }
  2038.          if(_loc2_)
  2039.          {
  2040.             return _loc1_;
  2041.          }
  2042.          return new Point(0,0);
  2043.       }
  2044.       
  2045.       public function get maxColumns() : int
  2046.       {
  2047.          return _maxColumns;
  2048.       }
  2049.       
  2050.       public function set maxRows(param1:int) : void
  2051.       {
  2052.          if(_maxRows != param1)
  2053.          {
  2054.             _maxRows = param1;
  2055.             invalidateSize();
  2056.             invalidateDisplayList();
  2057.          }
  2058.       }
  2059.       
  2060.       public function get maxRows() : int
  2061.       {
  2062.          return _maxRows;
  2063.       }
  2064.       
  2065.       private function moveNextSafely(param1:Boolean) : Boolean
  2066.       {
  2067.          var more:Boolean = param1;
  2068.          if(Boolean(iterator) && more)
  2069.          {
  2070.             try
  2071.             {
  2072.                more = iterator.moveNext();
  2073.             }
  2074.             catch(e1:ItemPendingError)
  2075.             {
  2076.                lastSeekPending = new ListBaseSeekPending(CursorBookmark.CURRENT,0);
  2077.                e1.addResponder(new ItemResponder(seekPendingResultHandler,seekPendingFailureHandler,lastSeekPending));
  2078.                more = false;
  2079.                iteratorValid = false;
  2080.             }
  2081.          }
  2082.          return more;
  2083.       }
  2084.       
  2085.       private function lastRowInColumn(param1:int) : int
  2086.       {
  2087.          var _loc2_:int = maxColumns > 0 ? maxColumns : columnCount;
  2088.          var _loc3_:int = Math.floor((collection.length - 1) / _loc2_);
  2089.          if(param1 * _loc3_ > collection.length)
  2090.          {
  2091.             _loc3_--;
  2092.          }
  2093.          return _loc3_;
  2094.       }
  2095.       
  2096.       protected function drawTileBackground(param1:Sprite, param2:int, param3:int, param4:Number, param5:Number, param6:uint, param7:IListItemRenderer) : DisplayObject
  2097.       {
  2098.          var _loc9_:Shape = null;
  2099.          var _loc8_:int = param2 * columnCount + param3;
  2100.          if(_loc8_ < param1.numChildren)
  2101.          {
  2102.             _loc9_ = Shape(param1.getChildAt(_loc8_));
  2103.          }
  2104.          else
  2105.          {
  2106.             _loc9_ = new FlexShape();
  2107.             _loc9_.name = "tileBackground";
  2108.             param1.addChild(_loc9_);
  2109.          }
  2110.          var _loc10_:Graphics = _loc9_.graphics;
  2111.          _loc10_.clear();
  2112.          _loc10_.beginFill(param6,getStyle("backgroundAlpha"));
  2113.          _loc10_.drawRect(0,0,param4,param5);
  2114.          _loc10_.endFill();
  2115.          return _loc9_;
  2116.       }
  2117.       
  2118.       override public function calculateDropIndex(param1:DragEvent = null) : int
  2119.       {
  2120.          var _loc2_:IListItemRenderer = null;
  2121.          var _loc3_:Point = null;
  2122.          var _loc4_:int = 0;
  2123.          var _loc5_:int = 0;
  2124.          var _loc6_:int = 0;
  2125.          var _loc7_:int = 0;
  2126.          if(param1)
  2127.          {
  2128.             _loc3_ = new Point(param1.localX,param1.localY);
  2129.             _loc3_ = DisplayObject(param1.target).localToGlobal(_loc3_);
  2130.             _loc3_ = listContent.globalToLocal(_loc3_);
  2131.             _loc4_ = int(listItems.length);
  2132.             _loc5_ = 0;
  2133.             while(_loc5_ < _loc4_)
  2134.             {
  2135.                if(rowInfo[_loc5_].y <= _loc3_.y && _loc3_.y < rowInfo[_loc5_].y + rowInfo[_loc5_].height)
  2136.                {
  2137.                   _loc6_ = int(listItems[_loc5_].length);
  2138.                   _loc7_ = 0;
  2139.                   while(_loc7_ < _loc6_)
  2140.                   {
  2141.                      if(listItems[_loc5_][_loc7_] && listItems[_loc5_][_loc7_].x <= _loc3_.x && _loc3_.x < listItems[_loc5_][_loc7_].x + listItems[_loc5_][_loc7_].width)
  2142.                      {
  2143.                         _loc2_ = listItems[_loc5_][_loc7_];
  2144.                         if(!DisplayObject(_loc2_).visible)
  2145.                         {
  2146.                            _loc2_ = null;
  2147.                         }
  2148.                         break;
  2149.                      }
  2150.                      _loc7_++;
  2151.                   }
  2152.                   break;
  2153.                }
  2154.                _loc5_++;
  2155.             }
  2156.             if(_loc2_)
  2157.             {
  2158.                lastDropIndex = itemRendererToIndex(_loc2_);
  2159.             }
  2160.             else
  2161.             {
  2162.                lastDropIndex = !!collection ? collection.length : 0;
  2163.             }
  2164.          }
  2165.          return lastDropIndex;
  2166.       }
  2167.       
  2168.       override public function set itemRenderer(param1:IFactory) : void
  2169.       {
  2170.          super.itemRenderer = param1;
  2171.          mx_internal::purgeMeasuringRenderers();
  2172.       }
  2173.       
  2174.       mx_internal function setupRendererFromData(param1:IListItemRenderer, param2:Object) : void
  2175.       {
  2176.          var _loc3_:ListData = ListData(makeListData(param2,itemToUID(param2),0,0));
  2177.          if(param1 is IDropInListItemRenderer)
  2178.          {
  2179.             IDropInListItemRenderer(param1).listData = !!param2 ? _loc3_ : null;
  2180.          }
  2181.          param1.data = param2;
  2182.          UIComponentGlobals.mx_internal::layoutManager.validateClient(param1,true);
  2183.       }
  2184.       
  2185.       protected function makeListData(param1:Object, param2:String, param3:int, param4:int) : BaseListData
  2186.       {
  2187.          return new ListData(itemToLabel(param1),itemToIcon(param1),labelField,param2,this,param3,param4);
  2188.       }
  2189.       
  2190.       override public function indicesToIndex(param1:int, param2:int) : int
  2191.       {
  2192.          var _loc4_:int = 0;
  2193.          if(direction == TileBaseDirection.VERTICAL)
  2194.          {
  2195.             _loc4_ = maxRows > 0 ? maxRows : rowCount;
  2196.             return param2 * _loc4_ + param1;
  2197.          }
  2198.          var _loc3_:int = maxColumns > 0 ? maxColumns : columnCount;
  2199.          return param1 * _loc3_ + param2;
  2200.       }
  2201.       
  2202.       override protected function adjustListContent(param1:Number = -1, param2:Number = -1) : void
  2203.       {
  2204.          var _loc3_:* = false;
  2205.          var _loc4_:int = 0;
  2206.          var _loc5_:int = 0;
  2207.          var _loc6_:int = 0;
  2208.          var _loc8_:int = 0;
  2209.          var _loc9_:int = 0;
  2210.          super.adjustListContent(param1,param2);
  2211.          if(!collection)
  2212.          {
  2213.             return;
  2214.          }
  2215.          var _loc7_:int = collection.length;
  2216.          if(direction == TileBaseDirection.VERTICAL)
  2217.          {
  2218.             _loc5_ = maxRows > 0 ? maxRows : int(Math.max(Math.floor(listContent.heightExcludingOffsets / rowHeight),1));
  2219.             _loc6_ = Math.max(Math.ceil(listContent.widthExcludingOffsets / columnWidth),1);
  2220.             if(_loc5_ != lastRowCount)
  2221.             {
  2222.                _loc3_ = listContent.widthExcludingOffsets / columnWidth != Math.ceil(listContent.widthExcludingOffsets / columnWidth);
  2223.                _loc8_ = Math.max(Math.ceil(_loc7_ / _loc5_) - _loc6_,0);
  2224.                if(_loc3_)
  2225.                {
  2226.                   _loc8_++;
  2227.                }
  2228.                if(horizontalScrollPosition > _loc8_)
  2229.                {
  2230.                   mx_internal::$horizontalScrollPosition = _loc8_;
  2231.                }
  2232.                setRowCount(_loc5_);
  2233.                mx_internal::setColumnCount(_loc6_);
  2234.                _loc4_ = scrollPositionToIndex(Math.max(0,horizontalScrollPosition - offscreenExtraColumnsLeft),verticalScrollPosition);
  2235.                seekPositionSafely(_loc4_);
  2236.             }
  2237.             lastRowCount = _loc5_;
  2238.          }
  2239.          else
  2240.          {
  2241.             _loc6_ = maxColumns > 0 ? maxColumns : int(Math.max(Math.floor(listContent.widthExcludingOffsets / columnWidth),1));
  2242.             _loc5_ = Math.max(Math.ceil(listContent.heightExcludingOffsets / rowHeight),1);
  2243.             if(_loc6_ != lastColumnCount)
  2244.             {
  2245.                _loc3_ = listContent.heightExcludingOffsets / rowHeight != Math.ceil(listContent.heightExcludingOffsets / rowHeight);
  2246.                _loc9_ = Math.max(Math.ceil(_loc7_ / _loc6_) - _loc5_,0);
  2247.                if(_loc3_)
  2248.                {
  2249.                   _loc9_++;
  2250.                }
  2251.                if(verticalScrollPosition > _loc9_)
  2252.                {
  2253.                   mx_internal::$verticalScrollPosition = _loc9_;
  2254.                }
  2255.                setRowCount(_loc5_);
  2256.                mx_internal::setColumnCount(_loc6_);
  2257.                _loc4_ = scrollPositionToIndex(horizontalScrollPosition,Math.max(0,verticalScrollPosition - offscreenExtraRowsTop));
  2258.                seekPositionSafely(_loc4_);
  2259.             }
  2260.             lastColumnCount = _loc6_;
  2261.          }
  2262.       }
  2263.       
  2264.       override protected function collectionChangeHandler(param1:Event) : void
  2265.       {
  2266.          var _loc2_:CollectionEvent = null;
  2267.          var _loc3_:int = 0;
  2268.          var _loc4_:int = 0;
  2269.          var _loc5_:int = 0;
  2270.          var _loc6_:int = 0;
  2271.          if(param1 is CollectionEvent)
  2272.          {
  2273.             _loc2_ = CollectionEvent(param1);
  2274.             if(_loc2_.location == 0 || _loc2_.kind == CollectionEventKind.REFRESH)
  2275.             {
  2276.                itemsNeedMeasurement = true;
  2277.                invalidateProperties();
  2278.             }
  2279.             if(_loc2_.kind == CollectionEventKind.REMOVE)
  2280.             {
  2281.                _loc3_ = indicesToIndex(verticalScrollPosition,horizontalScrollPosition);
  2282.                if(_loc2_.location < _loc3_)
  2283.                {
  2284.                   _loc3_ -= _loc2_.items.length;
  2285.                   super.collectionChangeHandler(param1);
  2286.                   _loc4_ = 0;
  2287.                   _loc5_ = 0;
  2288.                   if(direction == TileBaseDirection.HORIZONTAL)
  2289.                   {
  2290.                      super.verticalScrollPosition = indexToRow(_loc3_);
  2291.                      _loc4_ = Math.min(offscreenExtraRows / 2,verticalScrollPosition);
  2292.                   }
  2293.                   else
  2294.                   {
  2295.                      super.horizontalScrollPosition = indexToColumn(_loc3_);
  2296.                      _loc5_ = Math.min(offscreenExtraColumns / 2,horizontalScrollPosition);
  2297.                   }
  2298.                   _loc6_ = scrollPositionToIndex(horizontalScrollPosition - _loc5_,verticalScrollPosition - _loc4_);
  2299.                   seekPositionSafely(_loc6_);
  2300.                   return;
  2301.                }
  2302.             }
  2303.          }
  2304.          super.collectionChangeHandler(param1);
  2305.       }
  2306.    }
  2307. }
  2308.  
  2309.