home *** CD-ROM | disk | FTP | other *** search
- package qs.controls
- {
- import qs.controls.fisheyeClasses.FisheyeAxis;
- import qs.controls.fisheyeClasses.FisheyeBase;
- import qs.controls.fisheyeClasses.FisheyeItem;
-
- public class Fisheye extends FisheyeBase
- {
- private var _direction:String = "horizontal";
-
- private var _mouseData:Array = [];
-
- protected var minor:FisheyeAxis = new FisheyeAxis();
-
- protected var major:FisheyeAxis = new FisheyeAxis();
-
- private var _pdata:Array = [];
-
- public function Fisheye()
- {
- super();
- this.major.direction = "horizontal";
- this.minor.direction = "vertical";
- }
-
- private function midPointFor(param1:int) : Number
- {
- var _loc2_:FisheyeItem = this._mouseData[param1];
- return _loc2_[this.major.pos] + _loc2_[this.major.EOM] * _loc2_.scale / 2;
- }
-
- override protected function measure() : void
- {
- var _loc4_:FisheyeItem = null;
- var _loc5_:FisheyeItem = null;
- var _loc1_:Number = 0;
- var _loc2_:Number = dataProvider.length;
- var _loc3_:int = 0;
- while(_loc3_ < _loc2_)
- {
- _loc1_ = Math.max(_loc1_,renderers[_loc3_][this.minor.measured]);
- _loc4_ = this._pdata[_loc3_];
- _loc5_ = this._mouseData[_loc3_];
- _loc4_.eomHeight = _loc5_.eomHeight = renderers[_loc3_].getExplicitOrMeasuredHeight();
- _loc4_.eomWidth = _loc5_.eomWidth = renderers[_loc3_].getExplicitOrMeasuredWidth();
- _loc3_++;
- }
- this[this.minor.measuredMin] = this[this.minor.measured] = _loc1_;
- animator.invalidateLayout();
- }
-
- override protected function generateLayout() : void
- {
- var _loc1_:String = null;
- var _loc4_:FisheyeItem = null;
- var _loc5_:int = 0;
- var _loc6_:Number = NaN;
- var _loc7_:Number = NaN;
- var _loc8_:int = 0;
- var _loc9_:LayoutTarget = null;
- _loc1_ = getStyle(this.minor.align);
- var _loc2_:int = int(dataProvider.length);
- var _loc3_:Number = isNaN(hilightedItemIndex) ? selectedItemIndex : hilightedItemIndex;
- if(_loc2_ == 0)
- {
- return;
- }
- if(isNaN(_loc3_))
- {
- populateMajorAxisForDefault(this._pdata,this.major,this[this.major.unscaled]);
- align(this._pdata,this.major);
- }
- else
- {
- _loc4_ = this._pdata[_loc3_];
- _loc6_ = this.midPointFor(_loc3_) - _loc4_[this.major.EOM] * maxScaleWithDefault / 2;
- if(_loc6_ < 0)
- {
- _loc6_ = 0;
- }
- if(_loc6_ + _loc4_[this.major.EOM] * maxScaleWithDefault > this[this.major.unscaled])
- {
- _loc6_ = this[this.major.unscaled] - _loc4_[this.major.EOM] * maxScaleWithDefault;
- }
- populateMajorAxisFor(this._pdata.slice(_loc3_),0,this[this.major.unscaled] - _loc6_,this.major);
- _loc5_ = _loc3_;
- while(_loc5_ < _loc2_)
- {
- this._pdata[_loc5_][this.major.pos] += _loc6_;
- _loc5_++;
- }
- if(_loc3_ > 0)
- {
- populateMajorAxisFor(this._pdata.slice(0,_loc3_),_loc3_,_loc6_ - defaultSpacingWithDefault,this.major);
- _loc4_ = this._pdata[_loc3_ - 1];
- _loc7_ = _loc6_ - (_loc4_[this.major.pos] + _loc4_[this.major.EOM] * _loc4_.scale + defaultSpacingWithDefault);
- _loc8_ = 0;
- while(_loc8_ < _loc3_)
- {
- this._pdata[_loc8_][this.major.pos] += _loc7_;
- _loc8_++;
- }
- }
- }
- _loc5_ = 0;
- while(_loc5_ < _loc2_)
- {
- _loc4_ = this._pdata[_loc5_];
- _loc9_ = animator.targetFor(renderers[_loc5_]);
- _loc9_.scaleX = _loc9_.scaleY = _loc4_.scale;
- _loc9_.unscaledHeight = _loc4_.eomHeight;
- _loc9_.unscaledWidth = _loc4_.eomWidth;
- _loc9_[this.major.pos] = _loc4_[this.major.pos];
- _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);
- _loc5_++;
- }
- }
-
- override protected function findItemForPosition(param1:Number, param2:Number) : Number
- {
- var _loc6_:Number = NaN;
- var _loc9_:Number = NaN;
- var _loc3_:Number = this._direction == "horizontal" ? param1 : param2;
- var _loc4_:Number = this._direction == "horizontal" ? param2 : param1;
- var _loc5_:Number = Infinity;
- var _loc7_:String = getStyle(this.minor.align);
- switch(_loc7_)
- {
- case "right":
- case "bottom":
- if(this[this.minor.unscaled] - _loc4_ > this[this.minor.measured])
- {
- return NaN;
- }
- break;
- case "left":
- case "top":
- if(_loc4_ > this[this.minor.measured])
- {
- return NaN;
- }
- break;
- case "center":
- case "justified":
- default:
- if(Math.abs(this[this.minor.unscaled] / 2 - _loc4_) > this[this.minor.measured] / 2)
- {
- return NaN;
- }
- break;
- }
- var _loc8_:int = 0;
- while(_loc8_ < dataProvider.length)
- {
- _loc9_ = _loc3_ - this.midPointFor(_loc8_);
- if(Math.abs(_loc9_) < Math.abs(_loc5_))
- {
- _loc5_ = _loc9_;
- _loc6_ = _loc8_;
- }
- _loc8_++;
- }
- return _loc6_;
- }
-
- override protected function commitProperties() : void
- {
- var _loc2_:int = 0;
- var _loc1_:Boolean = this.itemsChanged;
- super.commitProperties();
- if(_loc1_)
- {
- _loc2_ = 0;
- while(_loc2_ < dataProvider.length)
- {
- this._pdata[_loc2_] = new FisheyeItem();
- this._mouseData[_loc2_] = new FisheyeItem();
- _loc2_++;
- }
- }
- }
-
- override protected function updateDisplayList(param1:Number, param2:Number) : void
- {
- populateMajorAxisForDefault(this._mouseData,this.major,this[this.major.unscaled]);
- align(this._mouseData,this.major);
- super.updateDisplayList(param1,param2);
- }
-
- public function set direction(param1:String) : void
- {
- if(param1 == this._direction)
- {
- return;
- }
- this._direction = param1;
- if(this._direction == "vertical")
- {
- this.major.direction = "vertical";
- this.minor.direction = "horizontal";
- }
- else
- {
- this.major.direction = "horizontal";
- this.minor.direction = "vertical";
- }
- invalidateSize();
- animator.invalidateLayout();
- }
-
- public function get direction() : String
- {
- return this._direction;
- }
- }
- }
-
-