home *** CD-ROM | disk | FTP | other *** search
- package qs.controls.fisheyeClasses
- {
- import flash.display.DisplayObject;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import mx.core.ClassFactory;
- import mx.core.IDataRenderer;
- import mx.core.IFactory;
- import mx.core.UIComponent;
- import qs.controls.CachedLabel;
- import qs.controls.LayoutAnimator;
-
- public class FisheyeBase extends UIComponent
- {
- protected var renderers:Array = [];
-
- protected var renderersDirty:Boolean = true;
-
- protected var selectedItemIndex:Number = NaN;
-
- private var _items:Array = [];
-
- public var selectFirstItem:Boolean = false;
-
- private var _pendingItems:Array;
-
- protected var hilightedItemIndex:Number = NaN;
-
- protected var itemsChanged:Boolean = false;
-
- protected var animator:LayoutAnimator;
-
- private var _selectionEnabled:Boolean = true;
-
- private var _itemRendererFactory:IFactory;
-
- public function FisheyeBase()
- {
- super();
- this._itemRendererFactory = new ClassFactory(CachedLabel);
- addEventListener(MouseEvent.MOUSE_MOVE,this.updateHilight);
- addEventListener(MouseEvent.ROLL_OUT,this.removeHilight);
- addEventListener(MouseEvent.MOUSE_DOWN,this.updateSelection);
- var _loc1_:Sprite = new Sprite();
- addChild(_loc1_);
- mask = _loc1_;
- _loc1_.graphics.beginFill(0);
- _loc1_.graphics.drawRect(0,0,10,10);
- _loc1_.graphics.endFill();
- this.animator = new LayoutAnimator();
- this.animator.layoutFunction = this.generateLayout;
- }
-
- protected function get defaultSpacingWithDefault() : Number
- {
- var _loc1_:Number = getStyle("defaultSpacing");
- if(isNaN(_loc1_))
- {
- _loc1_ = 0;
- }
- return _loc1_;
- }
-
- protected function align(param1:Array, param2:FisheyeAxis) : void
- {
- var _loc4_:int = 0;
- var _loc5_:FisheyeItem = null;
- var _loc6_:Number = NaN;
- var _loc7_:int = 0;
- var _loc8_:Number = NaN;
- var _loc9_:int = 0;
- var _loc10_:int = 0;
- var _loc3_:String = getStyle(param2.align);
- _loc4_ = int(param1.length);
- if(_loc4_ == 0)
- {
- return;
- }
- switch(_loc3_)
- {
- case "right":
- case "bottom":
- _loc5_ = param1[_loc4_ - 1];
- _loc6_ = this[param2.unscaled] - (_loc5_[param2.pos] + param1[_loc4_ - 1][param2.EOM] * _loc5_.scale);
- _loc9_ = 0;
- while(_loc9_ < _loc4_)
- {
- param1[_loc9_][param2.pos] += _loc6_;
- _loc9_++;
- }
- break;
- case "left":
- case "top":
- break;
- case "center":
- default:
- _loc7_ = Math.floor(_loc4_ / 2);
- _loc5_ = param1[_loc4_ - 1];
- _loc8_ = _loc5_[param2.pos] + _loc5_[param2.EOM] * _loc5_.scale;
- _loc6_ = this[param2.unscaled] / 2 - _loc8_ / 2;
- _loc10_ = 0;
- while(_loc10_ < _loc4_)
- {
- param1[_loc10_][param2.pos] += _loc6_;
- _loc10_++;
- }
- }
- }
-
- [Bindable("change")]
- public function get highlightedItem() : Object
- {
- return isNaN(this.hilightedItemIndex) ? null : this._items[this.hilightedItemIndex];
- }
-
- protected function populateMajorAxisForDefault(param1:Array, param2:FisheyeAxis, param3:Number) : FisheyeParameters
- {
- var _loc4_:Number = NaN;
- var _loc9_:FisheyeItem = null;
- var _loc12_:Number = NaN;
- var _loc5_:int = int(param1.length);
- var _loc6_:FisheyeParameters = new FisheyeParameters();
- this.populateParameters(_loc6_,false);
- var _loc7_:Number = _loc6_.spacing * (_loc5_ - 1);
- var _loc8_:Number = 0;
- var _loc10_:int = 0;
- while(_loc10_ < _loc5_)
- {
- _loc8_ += param1[_loc10_][param2.EOM];
- _loc10_++;
- }
- if(_loc8_ > 0)
- {
- _loc12_ = (param3 - _loc7_) / _loc8_;
- _loc6_.minScale = Math.min(_loc6_.minScale,_loc12_);
- }
- _loc4_ = 0;
- var _loc11_:int = 0;
- while(_loc11_ < _loc5_)
- {
- _loc9_ = param1[_loc11_];
- _loc9_.scale = _loc6_.minScale;
- _loc9_[param2.pos] = _loc4_;
- _loc4_ += _loc9_[param2.EOM] * _loc6_.minScale + _loc6_.spacing;
- _loc11_++;
- }
- return _loc6_;
- }
-
- protected function findItemForPosition(param1:Number, param2:Number) : Number
- {
- return NaN;
- }
-
- private function removeHilight(param1:MouseEvent) : void
- {
- this.hilightedItemIndex = NaN;
- this.updateState();
- this.animator.invalidateLayout();
- }
-
- public function get selectionEnabled() : Boolean
- {
- return this._selectionEnabled;
- }
-
- public function set selectedItem(param1:Object) : void
- {
- var _loc2_:Number = NaN;
- var _loc3_:int = 0;
- while(_loc3_ < this._items.length)
- {
- if(param1 == this._items[_loc3_])
- {
- _loc2_ = _loc3_;
- break;
- }
- _loc3_++;
- }
- this.selectedIndex = _loc2_;
- }
-
- [Bindable("change")]
- public function get hilightedIndex() : int
- {
- return isNaN(this.hilightedItemIndex) ? -1 : int(this.hilightedItemIndex);
- }
-
- public function set selectionEnabled(param1:Boolean) : void
- {
- if(this._selectionEnabled == param1)
- {
- return;
- }
- this._selectionEnabled = param1;
- this.selectedIndex = this.selectedIndex;
- }
-
- private function updateHilight(param1:MouseEvent) : void
- {
- var _loc2_:Number = this.findItemForPosition(this.mouseX,this.mouseY);
- if(_loc2_ == this.hilightedItemIndex)
- {
- return;
- }
- this.hilightedItemIndex = _loc2_;
- this.updateState();
- this.animator.invalidateLayout();
- }
-
- public function layout() : void
- {
- this.animator.layout(true);
- }
-
- public function get dataProvider() : Array
- {
- return this._items;
- }
-
- public function set hilightedIndex(param1:int) : void
- {
- var _loc2_:Number = param1 < 0 || param1 >= this._items.length ? NaN : param1;
- if(_loc2_ != this.hilightedItemIndex)
- {
- this.hilightedItemIndex = _loc2_;
- this.updateState();
- this.animator.invalidateLayout();
- }
- }
-
- protected function updateSelection(param1:MouseEvent) : void
- {
- if(this._selectionEnabled == false)
- {
- return;
- }
- var _loc2_:Number = this.findItemForPosition(this.mouseX,this.mouseY);
- if(this.selectedItemIndex == _loc2_)
- {
- this.selectedIndex = -1;
- }
- else
- {
- this.selectedIndex = _loc2_;
- }
- this.updateState();
- this.animator.invalidateLayout();
- }
-
- public function invalidateLayout() : void
- {
- this.animator.invalidateLayout(false);
- }
-
- override protected function commitProperties() : void
- {
- var _loc1_:DisplayObject = null;
- var _loc2_:int = 0;
- var _loc3_:int = 0;
- var _loc4_:UIComponent = null;
- if(this._pendingItems != null)
- {
- this._items = this._pendingItems;
- this._pendingItems = null;
- }
- this.itemsChanged = false;
- if(this.renderersDirty)
- {
- this.renderersDirty = false;
- _loc1_ = mask;
- _loc2_ = numChildren - 1;
- while(_loc2_ >= 0)
- {
- removeChildAt(_loc2_);
- _loc2_--;
- }
- addChild(_loc1_);
- this.renderers = [];
- _loc3_ = 0;
- while(_loc3_ < this._items.length)
- {
- _loc4_ = this._itemRendererFactory.newInstance();
- IDataRenderer(_loc4_).data = this._items[_loc3_];
- this.renderers[_loc3_] = _loc4_;
- addChild(_loc4_);
- _loc3_++;
- }
- this.animator.items = this.renderers;
- }
- invalidateSize();
- }
-
- override public function styleChanged(param1:String) : void
- {
- if(param1 == "animationSpeed")
- {
- this.animator.animationSpeed = getStyle("animationSpeed");
- }
- invalidateSize();
- invalidateDisplayList();
- this.animator.invalidateLayout();
- }
-
- [Bindable("change")]
- public function get selectedItem() : Object
- {
- return isNaN(this.selectedItemIndex) ? null : this._items[this.selectedItemIndex];
- }
-
- protected function updateState() : void
- {
- var _loc2_:String = null;
- var _loc3_:String = null;
- var _loc4_:String = null;
- var _loc5_:String = null;
- var _loc6_:Boolean = false;
- var _loc7_:int = 0;
- var _loc8_:int = 0;
- var _loc9_:int = 0;
- var _loc10_:int = 0;
- var _loc1_:String = getStyle("stateProperty");
- if(_loc1_ != null)
- {
- _loc2_ = getStyle("rolloverValue");
- _loc3_ = getStyle("selectedValue");
- _loc4_ = getStyle("defaultValue");
- _loc5_ = getStyle("unselectedValue");
- if(_loc5_ == null || isNaN(this.selectedItemIndex) && isNaN(this.hilightedItemIndex))
- {
- _loc5_ = getStyle("defaultValue");
- }
- _loc6_ = false;
- _loc7_ = 0;
- while(_loc7_ < this.renderers.length)
- {
- _loc8_ = this.selectedItemIndex;
- _loc9_ = _loc7_ - this.selectedItemIndex;
- _loc10_ = Math.abs(_loc7_ - this.selectedItemIndex);
- this.renderers[_loc7_][_loc1_] = _loc7_ == this.selectedItemIndex ? _loc3_ : (_loc7_ == this.hilightedItemIndex ? _loc2_ : _loc5_);
- if(_loc7_ == this.selectedItemIndex || _loc7_ == this.hilightedItemIndex)
- {
- _loc6_ = true;
- }
- _loc7_++;
- }
- if(!_loc6_ && this.selectFirstItem)
- {
- this.hilightedItemIndex = 0;
- this.selectedItemIndex = -1;
- if(this.renderers[0] != null)
- {
- this.renderers[0][_loc1_] = _loc2_;
- }
- }
- }
- }
-
- private function calcDistanceFactor(param1:FisheyeParameters, param2:Number) : Number
- {
- var _loc3_:Number = 1 / param1.scaleRadius;
- return Math.max(0,1 - Math.pow(param2 * _loc3_,param1.scaleSlope));
- }
-
- public function get maxIndex() : int
- {
- return isNaN(this._items.length) ? -1 : int(this._items.length);
- }
-
- private function adjustParameters(param1:Array, param2:Number, param3:FisheyeParameters, param4:Number, param5:FisheyeAxis) : void
- {
- var _loc12_:FisheyeItem = null;
- var _loc13_:Number = NaN;
- var _loc14_:Number = NaN;
- var _loc15_:Number = NaN;
- var _loc16_:Number = NaN;
- var _loc17_:Number = NaN;
- var _loc6_:int = int(param1.length);
- var _loc7_:Number = param3.spacing * (_loc6_ - 1);
- var _loc8_:Number = 0;
- var _loc9_:Number = 0;
- var _loc10_:int = 0;
- while(_loc10_ < _loc6_)
- {
- _loc12_ = param1[_loc10_];
- _loc13_ = Math.abs(param2 - _loc10_);
- _loc14_ = this.calcDistanceFactor(param3,_loc13_);
- _loc15_ = param3.maxScale * _loc14_;
- _loc16_ = 1 - _loc14_;
- _loc17_ = Number(_loc12_[param5.EOM]);
- _loc8_ += _loc17_ * _loc15_;
- _loc9_ += _loc17_ * _loc16_;
- _loc10_++;
- }
- var _loc11_:Number = _loc9_ > 0 ? (param4 - _loc7_ - _loc8_) / _loc9_ : 0;
- _loc11_ = Math.min(param3.minScale,_loc11_);
- param3.minScale = _loc11_;
- }
-
- public function set itemRenderer(param1:IFactory) : void
- {
- this._itemRendererFactory = param1;
- this.renderersDirty = true;
- invalidateProperties();
- }
-
- public function set selectedIndex(param1:int) : void
- {
- var _loc2_:Number = param1 < 0 || param1 >= this._items.length ? NaN : param1;
- if(_loc2_ != this.selectedItemIndex)
- {
- this.selectedItemIndex = _loc2_;
- this.updateState();
- this.animator.invalidateLayout();
- dispatchEvent(new Event("change"));
- }
- if(!isNaN(_loc2_))
- {
- dispatchEvent(new Event("select"));
- }
- }
-
- private function populateParameters(param1:FisheyeParameters, param2:Boolean) : void
- {
- if(param2 == false)
- {
- param1.minScale = getStyle("defaultScale");
- if(isNaN(param1.minScale))
- {
- param1.minScale = 0.5;
- }
- param1.spacing = this.defaultSpacingWithDefault;
- }
- else
- {
- param1.minScale = getStyle("hilightMinScale");
- if(isNaN(param1.minScale))
- {
- param1.minScale = getStyle("defaultScale");
- if(isNaN(param1.minScale))
- {
- param1.minScale = 0.5;
- }
- }
- param1.spacing = getStyle("hilightSpacing");
- if(isNaN(param1.spacing))
- {
- param1.spacing = this.defaultSpacingWithDefault;
- }
- }
- param1.maxScale = getStyle("hilightMaxScale");
- if(isNaN(param1.maxScale))
- {
- param1.maxScale = 1;
- }
- param1.scaleRadius = getStyle("hilightScaleRadius");
- if(isNaN(param1.scaleRadius))
- {
- param1.scaleRadius = 2;
- }
- param1.scaleRadius = Math.max(1,param1.scaleRadius);
- param1.scaleSlope = getStyle("hilightScaleSlope");
- if(isNaN(param1.scaleSlope))
- {
- param1.scaleSlope = 0.75;
- }
- }
-
- protected function get maxScaleWithDefault() : Number
- {
- var _loc1_:Number = getStyle("hilightMaxScale");
- if(isNaN(_loc1_))
- {
- _loc1_ = 1;
- }
- return _loc1_;
- }
-
- public function set dataProvider(param1:Array) : void
- {
- this._pendingItems = param1;
- this.renderersDirty = true;
- this.itemsChanged = true;
- invalidateProperties();
- dispatchEvent(new Event("loaded"));
- }
-
- [Bindable("change")]
- public function get selectedIndex() : int
- {
- return isNaN(this.selectedItemIndex) ? -1 : int(this.selectedItemIndex);
- }
-
- protected function populateMajorAxisFor(param1:Array, param2:Number, param3:Number, param4:FisheyeAxis) : FisheyeParameters
- {
- var _loc5_:Number = NaN;
- var _loc7_:FisheyeItem = null;
- var _loc10_:Number = NaN;
- var _loc11_:Number = NaN;
- var _loc12_:Number = NaN;
- var _loc6_:int = int(param1.length);
- var _loc8_:FisheyeParameters = new FisheyeParameters();
- this.populateParameters(_loc8_,true);
- this.adjustParameters(param1,param2,_loc8_,param3,param4);
- _loc5_ = 0;
- var _loc9_:int = 0;
- while(_loc9_ < _loc6_)
- {
- _loc7_ = param1[_loc9_];
- _loc10_ = Math.abs(param2 - _loc9_);
- _loc11_ = this.calcDistanceFactor(_loc8_,_loc10_);
- _loc12_ = Math.max(0,_loc8_.minScale + (_loc8_.maxScale - _loc8_.minScale) * _loc11_);
- _loc7_[param4.pos] = _loc5_;
- _loc7_.scale = _loc12_;
- _loc5_ += _loc7_[param4.EOM] * _loc12_ + _loc8_.spacing;
- _loc9_++;
- }
- return _loc8_;
- }
-
- public function get itemRenderer() : IFactory
- {
- return this._itemRendererFactory;
- }
-
- override protected function updateDisplayList(param1:Number, param2:Number) : void
- {
- graphics.clear();
- graphics.moveTo(0,0);
- graphics.beginFill(0,0);
- graphics.drawRect(0,0,param1,param2);
- mask.width = param1;
- mask.height = param2;
- this.animator.invalidateLayout();
- }
-
- protected function generateLayout() : void
- {
- }
- }
- }
-
-