home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / qs / controls / Fisheye.as < prev    next >
Encoding:
Text File  |  2010-06-23  |  7.5 KB  |  218 lines

  1. package qs.controls
  2. {
  3.    import qs.controls.fisheyeClasses.FisheyeAxis;
  4.    import qs.controls.fisheyeClasses.FisheyeBase;
  5.    import qs.controls.fisheyeClasses.FisheyeItem;
  6.    
  7.    public class Fisheye extends FisheyeBase
  8.    {
  9.       private var _direction:String = "horizontal";
  10.       
  11.       private var _mouseData:Array = [];
  12.       
  13.       protected var minor:FisheyeAxis = new FisheyeAxis();
  14.       
  15.       protected var major:FisheyeAxis = new FisheyeAxis();
  16.       
  17.       private var _pdata:Array = [];
  18.       
  19.       public function Fisheye()
  20.       {
  21.          super();
  22.          this.major.direction = "horizontal";
  23.          this.minor.direction = "vertical";
  24.       }
  25.       
  26.       private function midPointFor(param1:int) : Number
  27.       {
  28.          var _loc2_:FisheyeItem = this._mouseData[param1];
  29.          return _loc2_[this.major.pos] + _loc2_[this.major.EOM] * _loc2_.scale / 2;
  30.       }
  31.       
  32.       override protected function measure() : void
  33.       {
  34.          var _loc4_:FisheyeItem = null;
  35.          var _loc5_:FisheyeItem = null;
  36.          var _loc1_:Number = 0;
  37.          var _loc2_:Number = dataProvider.length;
  38.          var _loc3_:int = 0;
  39.          while(_loc3_ < _loc2_)
  40.          {
  41.             _loc1_ = Math.max(_loc1_,renderers[_loc3_][this.minor.measured]);
  42.             _loc4_ = this._pdata[_loc3_];
  43.             _loc5_ = this._mouseData[_loc3_];
  44.             _loc4_.eomHeight = _loc5_.eomHeight = renderers[_loc3_].getExplicitOrMeasuredHeight();
  45.             _loc4_.eomWidth = _loc5_.eomWidth = renderers[_loc3_].getExplicitOrMeasuredWidth();
  46.             _loc3_++;
  47.          }
  48.          this[this.minor.measuredMin] = this[this.minor.measured] = _loc1_;
  49.          animator.invalidateLayout();
  50.       }
  51.       
  52.       override protected function generateLayout() : void
  53.       {
  54.          var _loc1_:String = null;
  55.          var _loc4_:FisheyeItem = null;
  56.          var _loc5_:int = 0;
  57.          var _loc6_:Number = NaN;
  58.          var _loc7_:Number = NaN;
  59.          var _loc8_:int = 0;
  60.          var _loc9_:LayoutTarget = null;
  61.          _loc1_ = getStyle(this.minor.align);
  62.          var _loc2_:int = int(dataProvider.length);
  63.          var _loc3_:Number = isNaN(hilightedItemIndex) ? selectedItemIndex : hilightedItemIndex;
  64.          if(_loc2_ == 0)
  65.          {
  66.             return;
  67.          }
  68.          if(isNaN(_loc3_))
  69.          {
  70.             populateMajorAxisForDefault(this._pdata,this.major,this[this.major.unscaled]);
  71.             align(this._pdata,this.major);
  72.          }
  73.          else
  74.          {
  75.             _loc4_ = this._pdata[_loc3_];
  76.             _loc6_ = this.midPointFor(_loc3_) - _loc4_[this.major.EOM] * maxScaleWithDefault / 2;
  77.             if(_loc6_ < 0)
  78.             {
  79.                _loc6_ = 0;
  80.             }
  81.             if(_loc6_ + _loc4_[this.major.EOM] * maxScaleWithDefault > this[this.major.unscaled])
  82.             {
  83.                _loc6_ = this[this.major.unscaled] - _loc4_[this.major.EOM] * maxScaleWithDefault;
  84.             }
  85.             populateMajorAxisFor(this._pdata.slice(_loc3_),0,this[this.major.unscaled] - _loc6_,this.major);
  86.             _loc5_ = _loc3_;
  87.             while(_loc5_ < _loc2_)
  88.             {
  89.                this._pdata[_loc5_][this.major.pos] += _loc6_;
  90.                _loc5_++;
  91.             }
  92.             if(_loc3_ > 0)
  93.             {
  94.                populateMajorAxisFor(this._pdata.slice(0,_loc3_),_loc3_,_loc6_ - defaultSpacingWithDefault,this.major);
  95.                _loc4_ = this._pdata[_loc3_ - 1];
  96.                _loc7_ = _loc6_ - (_loc4_[this.major.pos] + _loc4_[this.major.EOM] * _loc4_.scale + defaultSpacingWithDefault);
  97.                _loc8_ = 0;
  98.                while(_loc8_ < _loc3_)
  99.                {
  100.                   this._pdata[_loc8_][this.major.pos] += _loc7_;
  101.                   _loc8_++;
  102.                }
  103.             }
  104.          }
  105.          _loc5_ = 0;
  106.          while(_loc5_ < _loc2_)
  107.          {
  108.             _loc4_ = this._pdata[_loc5_];
  109.             _loc9_ = animator.targetFor(renderers[_loc5_]);
  110.             _loc9_.scaleX = _loc9_.scaleY = _loc4_.scale;
  111.             _loc9_.unscaledHeight = _loc4_.eomHeight;
  112.             _loc9_.unscaledWidth = _loc4_.eomWidth;
  113.             _loc9_[this.major.pos] = _loc4_[this.major.pos];
  114.             _loc9_[this.minor.pos] = _loc1_ == "top" || _loc1_ == "left" ? 0 : (_loc1_ == "right" || _loc1_ == "bottom" ? this[this.minor.unscaled] - _loc4_.scale * _loc4_[this.minor.EOM] : this[this.minor.unscaled] / 2 - _loc4_.scale * _loc4_[this.minor.EOM] / 2);
  115.             _loc5_++;
  116.          }
  117.       }
  118.       
  119.       override protected function findItemForPosition(param1:Number, param2:Number) : Number
  120.       {
  121.          var _loc6_:Number = NaN;
  122.          var _loc9_:Number = NaN;
  123.          var _loc3_:Number = this._direction == "horizontal" ? param1 : param2;
  124.          var _loc4_:Number = this._direction == "horizontal" ? param2 : param1;
  125.          var _loc5_:Number = Infinity;
  126.          var _loc7_:String = getStyle(this.minor.align);
  127.          switch(_loc7_)
  128.          {
  129.             case "right":
  130.             case "bottom":
  131.                if(this[this.minor.unscaled] - _loc4_ > this[this.minor.measured])
  132.                {
  133.                   return NaN;
  134.                }
  135.                break;
  136.             case "left":
  137.             case "top":
  138.                if(_loc4_ > this[this.minor.measured])
  139.                {
  140.                   return NaN;
  141.                }
  142.                break;
  143.             case "center":
  144.             case "justified":
  145.             default:
  146.                if(Math.abs(this[this.minor.unscaled] / 2 - _loc4_) > this[this.minor.measured] / 2)
  147.                {
  148.                   return NaN;
  149.                }
  150.                break;
  151.          }
  152.          var _loc8_:int = 0;
  153.          while(_loc8_ < dataProvider.length)
  154.          {
  155.             _loc9_ = _loc3_ - this.midPointFor(_loc8_);
  156.             if(Math.abs(_loc9_) < Math.abs(_loc5_))
  157.             {
  158.                _loc5_ = _loc9_;
  159.                _loc6_ = _loc8_;
  160.             }
  161.             _loc8_++;
  162.          }
  163.          return _loc6_;
  164.       }
  165.       
  166.       override protected function commitProperties() : void
  167.       {
  168.          var _loc2_:int = 0;
  169.          var _loc1_:Boolean = this.itemsChanged;
  170.          super.commitProperties();
  171.          if(_loc1_)
  172.          {
  173.             _loc2_ = 0;
  174.             while(_loc2_ < dataProvider.length)
  175.             {
  176.                this._pdata[_loc2_] = new FisheyeItem();
  177.                this._mouseData[_loc2_] = new FisheyeItem();
  178.                _loc2_++;
  179.             }
  180.          }
  181.       }
  182.       
  183.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  184.       {
  185.          populateMajorAxisForDefault(this._mouseData,this.major,this[this.major.unscaled]);
  186.          align(this._mouseData,this.major);
  187.          super.updateDisplayList(param1,param2);
  188.       }
  189.       
  190.       public function set direction(param1:String) : void
  191.       {
  192.          if(param1 == this._direction)
  193.          {
  194.             return;
  195.          }
  196.          this._direction = param1;
  197.          if(this._direction == "vertical")
  198.          {
  199.             this.major.direction = "vertical";
  200.             this.minor.direction = "horizontal";
  201.          }
  202.          else
  203.          {
  204.             this.major.direction = "horizontal";
  205.             this.minor.direction = "vertical";
  206.          }
  207.          invalidateSize();
  208.          animator.invalidateLayout();
  209.       }
  210.       
  211.       public function get direction() : String
  212.       {
  213.          return this._direction;
  214.       }
  215.    }
  216. }
  217.  
  218.