home *** CD-ROM | disk | FTP | other *** search
- class FPUI.SelectableList extends FPUI.Component
- {
- var m_dataProvider;
- var m_scrollbar;
- var m_containerMC;
- var m_selectedItems = null;
- var m_topDisplayed = 0;
- var m_numDisplayed = 0;
- var m_selectHolder = 0;
- var m_scrollOffset = 0;
- var m_itemHeight = 0;
- var m_changeFlag = false;
- var m_singleSelect = true;
- var m_lastSelected = -1;
- var m_mcCount = 4;
- var m_cursorManager = null;
- var m_virtualWidth = 0;
- static var MIN_SBAR_SIZE = 56;
- function SelectableList()
- {
- super();
- this.m_eatsNavKeysWhenFocused = true;
- this.m_selectedItems = new Array();
- }
- function setCursorManager(m)
- {
- this.m_cursorManager = m;
- }
- function hasCursorFocus()
- {
- var _loc1_ = this;
- _loc1_.m_cursorManager.setCursorFocus(_loc1_);
- return _loc1_.m_cursorManager.getCursorFocus() == _loc1_;
- }
- function getLength()
- {
- return this.m_dataProvider.getLength();
- }
- function getSelectedIndex()
- {
- var _loc2_ = this;
- for(var _loc3_ in _loc2_.m_selectedItems)
- {
- var _loc1_ = _loc2_.m_selectedItems[_loc3_];
- return _loc1_;
- break;
- }
- return undefined;
- }
- function getSelectedItem()
- {
- return this.getItemAt(this.getSelectedIndex());
- }
- function getItemAt(index)
- {
- return this.m_dataProvider.getItemAt(index);
- }
- function setSelectedIndex(index, flag)
- {
- var _loc1_ = this;
- var _loc2_ = index;
- if(_loc2_ >= 0 && _loc2_ < _loc1_.getLength() && _loc1_.m_enable)
- {
- _loc1_.clearSelected();
- _loc1_.selectItem(_loc2_,true);
- _loc1_.m_lastSelected = _loc2_;
- _loc1_.invalidate("updateControl");
- if(flag)
- {
- _loc1_.executeCallBack();
- }
- }
- }
- function setDataProvider(d)
- {
- var _loc1_ = this;
- _loc1_.setScrollPosition(0);
- _loc1_.clearSelected();
- if(_loc1_.m_dataProvider != null)
- {
- _loc1_.m_dataProvider.removeView(_loc1_);
- }
- _loc1_.m_dataProvider = d;
- if(_loc1_.m_dataProvider != null)
- {
- _loc1_.m_dataProvider.addView(_loc1_);
- }
- }
- function setEnabled(enabledFlag)
- {
- var _loc2_ = this;
- super.setEnabled(enabledFlag);
- _loc2_.m_enable = enabledFlag;
- var limit = Math.min(_loc2_.m_numDisplayed,_loc2_.getLength());
- var _loc1_ = 0;
- while(_loc1_ < limit)
- {
- var _loc3_ = _loc2_.getNthSelectableItem(_loc1_);
- _loc3_.setEnabled(_loc2_.m_enable);
- _loc1_ = _loc1_ + 1;
- }
- _loc2_.m_scrollbar.setEnabled(_loc2_.m_enable);
- _loc2_.m_horizScrollbar.setEnabled(_loc2_.m_enable);
- if(_loc2_.m_enable)
- {
- _loc2_.invalidate("updateControl");
- }
- }
- function updateControl()
- {
- var _loc2_ = this;
- if(!_loc2_.needVS())
- {
- _loc2_.m_topDisplayed = 0;
- }
- var _loc1_ = 0;
- while(_loc1_ < _loc2_.m_numDisplayed)
- {
- var ci = _loc2_.getNthSelectableItem(_loc1_);
- var _loc3_ = _loc2_.m_topDisplayed + _loc1_;
- ci.drawItem(_loc2_.getItemAt(_loc3_),_loc2_.isSelected(_loc3_),_loc3_);
- _loc1_ = _loc1_ + 1;
- }
- }
- function setSize(w, h)
- {
- var _loc1_ = this;
- var pos = _loc1_.m_topDisplayed;
- _loc1_.calcNumDisplayed();
- super.setSize(w,h);
- if(_loc1_.m_containerMC == undefined)
- {
- _loc1_.createEmptyMovieClip("m_containerMC" + _loc1_.m_mcCount,_loc1_.m_mcCount - 2);
- _loc1_.m_containerMC = _loc1_["m_containerMC" + _loc1_.m_mcCount];
- }
- var _loc2_ = 0;
- while(_loc2_ < _loc1_.m_numDisplayed)
- {
- var _loc3_ = _loc1_.getNthSelectableItem(_loc2_);
- if(_loc3_ == undefined)
- {
- _loc3_ = _loc1_.createNthSelectableItem(_loc2_);
- }
- _loc3_.setSize(_loc1_.m_width - _loc1_.m_scrollOffset,_loc1_.m_itemHeight);
- _loc3_._y = _loc1_.m_itemHeight * _loc2_;
- _loc2_ = _loc2_ + 1;
- }
- _loc2_ = _loc1_.m_numDisplayed;
- while(true)
- {
- _loc3_ = _loc1_.getNthSelectableItem(_loc2_);
- if(_loc3_ == undefined)
- {
- break;
- }
- _loc1_.deleteNthSelectableItem(_loc2_);
- _loc2_ = _loc2_ + 1;
- }
- _loc1_.updateControl();
- if(_loc1_.m_maskMC == undefined)
- {
- _loc1_.createEmptyMovieClip("m_maskMC",_loc1_.m_mcCount - 1);
- FPUI.Component.fillRect(_loc1_.m_maskMC,0,0,1,1,4278190080);
- _loc1_.setMask(_loc1_.m_maskMC);
- }
- _loc1_.m_maskMC._width = w;
- _loc1_.m_maskMC._height = h;
- _loc1_.initScrollBar();
- _loc1_.setScrollPosition(pos);
- }
- function dataViewModelChanged()
- {
- this.modelChanged();
- }
- function getItemHeight()
- {
- return this.m_itemHeight;
- }
- function modelChanged()
- {
- this.invalidate("updateControl");
- this.invalidate("initScrollBar");
- }
- function measureItmHgt()
- {
- var _loc1_ = this;
- _loc1_.attachMovie(_loc1_.getItemSymbolName(),"tmpItem_mc",0,{m_controller:_loc1_,m_itemNum:0});
- _loc1_.m_itemHeight = _loc1_.tmpItem_mc.calcLabelHeight("Sizer: PjtTopg");
- _loc1_.tmpItem_mc.removeMovieClip();
- delete _loc1_.tmpItem_mc;
- }
- function calcNumDisplayed()
- {
- var _loc1_ = this;
- _loc1_.measureItmHgt();
- _loc1_.m_numDisplayed = Math.floor((_loc1_.m_height - (!_loc1_.m_horizScrollbar ? 0 : _loc1_.m_horizScrollbar._height)) / _loc1_.m_itemHeight);
- }
- function selectItem(index, selectedFlag)
- {
- var _loc1_ = this;
- var _loc2_ = index;
- if(selectedFlag != _loc1_.isSelected(_loc2_))
- {
- var _loc3_ = _loc1_.m_dataProvider.getItemAt(_loc2_).getDataItemUniqueID();
- if(selectedFlag)
- {
- _loc1_.m_selectedItems[_loc3_] = _loc2_;
- }
- else
- {
- delete _loc1_.m_selectedItems[_loc3_];
- }
- if(_loc1_.isVisible(_loc2_))
- {
- var ci = _loc1_.getNthSelectableItem(_loc2_ - _loc1_.m_topDisplayed);
- ci.drawItem(_loc1_.getItemAt(_loc2_),selectedFlag,_loc2_);
- }
- }
- }
- function isSelected(index)
- {
- var _loc1_ = this.m_dataProvider.getItemAt(index).getDataItemUniqueID();
- return this.m_selectedItems[_loc1_] != undefined;
- }
- function isVisible(index)
- {
- var _loc1_ = this;
- var _loc0_ = index >= _loc1_.m_topDisplayed && index < _loc1_.m_topDisplayed + _loc1_.m_numDisplayed;
- _loc1_;
- return _loc0_;
- }
- function clearSelected()
- {
- var _loc1_ = this;
- for(var uniqueID in _loc1_.m_selectedItems)
- {
- var _loc2_ = _loc1_.m_selectedItems[uniqueID];
- if(_loc1_.isVisible(_loc2_))
- {
- var _loc3_ = _loc1_.getNthSelectableItem(_loc2_ - _loc1_.m_topDisplayed);
- _loc3_.drawItem(_loc1_.getItemAt(_loc2_),false,_loc2_);
- }
- }
- delete _loc1_.m_selectedItems;
- _loc1_.m_selectedItems = new Array();
- }
- function selectionHandler(itemNum)
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_topDisplayed + itemNum;
- var ditem = _loc1_.getItemAt(_loc3_);
- if(ditem == undefined)
- {
- _loc1_.m_changeFlag = false;
- }
- else
- {
- _loc1_.m_changeFlag = true;
- var shift = Key.isDown(16);
- var ctrl = Key.isDown(17);
- if(_loc1_.m_singleSelect && !ctrl || !shift && !ctrl)
- {
- _loc1_.clearSelected();
- _loc1_.selectItem(_loc3_,true);
- _loc1_.m_lastSelected = _loc3_;
- }
- else if(shift && !_loc1_.m_singleSelect)
- {
- if(_loc1_.m_lastSelected == -1)
- {
- _loc1_.m_lastSelected = _loc3_;
- }
- var incr = _loc1_.m_lastSelected >= _loc3_ ? -1 : 1;
- _loc1_.clearSelected();
- var _loc2_ = _loc1_.m_lastSelected;
- while(_loc2_ != _loc3_)
- {
- _loc1_.selectItem(_loc2_,true);
- _loc2_ += incr;
- }
- _loc1_.selectItem(_loc3_,true);
- }
- else if(ctrl)
- {
- var selectedFlag = _loc1_.isSelected(_loc3_);
- if(_loc1_.m_singleSelect)
- {
- _loc1_.clearSelected();
- }
- if(!_loc1_.m_singleSelect || !selectedFlag)
- {
- _loc1_.selectItem(_loc3_,!selectedFlag);
- }
- _loc1_.m_lastSelected = _loc3_;
- }
- }
- }
- function moveSelBy(incr)
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.getSelectedIndex();
- var _loc2_ = _loc3_ + incr;
- _loc2_ = Math.max(0,_loc2_);
- _loc2_ = Math.min(_loc1_.getLength() - 1,_loc2_);
- if(_loc2_ != _loc3_)
- {
- if(_loc3_ < _loc1_.m_topDisplayed || _loc3_ >= _loc1_.m_topDisplayed + _loc1_.m_numDisplayed)
- {
- _loc1_.setScrollPosition(_loc3_);
- }
- if(_loc2_ >= _loc1_.m_topDisplayed + _loc1_.m_numDisplayed || _loc2_ < _loc1_.m_topDisplayed)
- {
- _loc1_.setScrollPosition(_loc1_.m_topDisplayed + incr);
- }
- _loc1_.selectionHandler(_loc2_ - _loc1_.m_topDisplayed);
- }
- }
- function clickHandler(itmNum)
- {
- var _loc1_ = this;
- if(!_loc1_.m_focused)
- {
- _loc1_.pressFocus();
- }
- _loc1_.selectionHandler(itmNum);
- _loc1_.onMouseUp = _loc1_.releaseHandler;
- if(_loc1_.m_dragScrollingIntervalID == undefined && _loc1_.m_scrollbar != undefined)
- {
- _loc1_.m_dragScrollingIntervalID = setInterval(_loc1_,"dragScroll",15);
- }
- }
- function releaseHandler()
- {
- var _loc1_ = this;
- clearInterval(_loc1_.m_dragScrollingIntervalID);
- _loc1_.m_dragScrollingIntervalID = undefined;
- if(_loc1_.m_changeFlag)
- {
- _loc1_.executeCallBack();
- }
- _loc1_.m_changeFlag = false;
- delete _loc1_.onMouseUp;
- }
- function setScrollPosition(pos)
- {
- if(this.m_enable)
- {
- this.m_scrollbar.setScrollPosition(pos);
- }
- }
- function getItemSymbolName()
- {
- return "FPUI_SelectableItem";
- }
- function createNthSelectableItem(i)
- {
- var _loc1_ = this;
- var _loc2_ = i;
- _loc1_.m_containerMC.attachMovie(_loc1_.getItemSymbolName(),"fListItem" + _loc2_,10 + _loc2_,{m_controller:_loc1_,m_itemNum:_loc2_});
- return _loc1_.getNthSelectableItem(_loc2_);
- }
- function getNthSelectableItem(i)
- {
- return this.m_containerMC["fListItem" + i];
- }
- function deleteNthSelectableItem(i)
- {
- this.m_containerMC["fListItem" + i].removeMovieClip();
- delete this.m_containerMC["fListItem" + i];
- }
- function rebuildSelectedItems()
- {
- var _loc3_ = this;
- var _loc1_ = 0;
- while(_loc1_ < _loc3_.m_dataProvider.getLength())
- {
- var _loc2_ = _loc3_.m_dataProvider.getItemAt(_loc1_).getDataItemUniqueID();
- if(_loc3_.m_selectedItems[_loc2_] != undefined)
- {
- _loc3_.m_selectedItems[_loc2_] = _loc1_;
- }
- _loc1_ = _loc1_ + 1;
- }
- }
- function needVS()
- {
- var _loc1_ = this;
- var _loc2_ = _loc1_.m_height - _loc1_.m_horizScrollbar._height;
- var _loc0_ = _loc1_.getLength() > _loc1_.m_numDisplayed && _loc2_ > FPUI.SelectableList.MIN_SBAR_SIZE;
- _loc2_;
- _loc1_;
- return _loc0_;
- }
- function needHS()
- {
- var _loc2_ = this;
- var _loc1_ = _loc2_.m_width - _loc2_.m_scrollbar._width;
- var _loc0_ = _loc2_.m_virtualWidth > _loc1_ && _loc1_ > FPUI.SelectableList.MIN_SBAR_SIZE;
- _loc2_;
- _loc1_;
- return _loc0_;
- }
- function attachVSBar()
- {
- var _loc1_ = this;
- _loc1_.m_scrollbarContainer.attachMovie("Scrollbar","m_scrollbar",1);
- _loc1_.m_scrollbar = _loc1_.m_scrollbarContainer.m_scrollbar;
- _loc1_.m_scrollbar.setChangeHandler("scrollHandler",_loc1_);
- }
- function attachHSBar()
- {
- var _loc1_ = this;
- _loc1_.m_scrollbarContainer.attachMovie("Scrollbar","m_horizScrollbar",2);
- _loc1_.m_horizScrollbar = _loc1_.m_scrollbarContainer.m_horizScrollbar;
- _loc1_.m_horizScrollbar.setHorizontal(true);
- _loc1_.m_horizScrollbar.setChangeHandler("hScrollHandler",_loc1_);
- }
- function initScrollBar()
- {
- var _loc1_ = this;
- var _loc3_ = true;
- var bAdjustHS = true;
- if(!_loc1_.needVS())
- {
- _loc3_ = false;
- _loc1_.m_scrollOffset = 0;
- if(_loc1_.m_scrollbar)
- {
- _loc1_.m_scrollbar.removeMovieClip();
- delete _loc1_.m_scrollbar;
- _loc1_.invalidate("initScrollBar");
- }
- }
- if(!_loc1_.needHS())
- {
- bAdjustHS = false;
- if(_loc1_.m_horizScrollbar)
- {
- _loc1_.m_horizScrollbar.removeMovieClip();
- delete _loc1_.m_horizScrollbar;
- _loc1_.invalidate("initScrollBar");
- }
- }
- if(bAdjustHS || _loc3_)
- {
- if(_loc1_.m_scrollbarContainer == undefined)
- {
- _loc1_.m_mcCount += 3;
- _loc1_.createEmptyMovieClip("sbc_mc" + _loc1_.m_mcCount,_loc1_.m_mcCount);
- _loc1_.m_scrollbarContainer = _loc1_["sbc_mc" + _loc1_.m_mcCount];
- }
- if(_loc3_ && _loc1_.m_scrollbar == undefined)
- {
- _loc1_.attachVSBar();
- _loc1_.invalidate("initScrollBar");
- }
- if(bAdjustHS && _loc1_.m_horizScrollbar == undefined)
- {
- _loc1_.attachHSBar();
- _loc1_.calcNumDisplayed();
- if(_loc1_.m_scrollbar == undefined && _loc1_.needVS())
- {
- _loc1_.attachVSBar();
- _loc3_ = true;
- }
- _loc1_.invalidate("initScrollBar");
- }
- var i;
- var _loc2_ = undefined;
- if(_loc3_)
- {
- i = _loc1_.m_horizScrollbar == null ? 0 : _loc1_.m_horizScrollbar._height;
- _loc2_ = _loc1_.m_scrollbar;
- _loc2_.setSize(_loc1_.m_height - i);
- _loc2_._x = _loc1_.m_width - _loc2_._width;
- _loc2_._y = 0;
- _loc2_.setLargeScroll(_loc1_.m_numDisplayed - 1);
- _loc1_.m_scrollOffset = _loc2_._width;
- _loc2_.setScrollProperties(_loc1_.m_numDisplayed,_loc1_.getLength() - _loc1_.m_numDisplayed);
- }
- if(bAdjustHS)
- {
- i = _loc1_.m_scrollbar == undefined ? 0 : _loc1_.m_scrollbar._width;
- _loc2_ = _loc1_.m_horizScrollbar;
- _loc2_.setSize(_loc1_.m_width - i);
- _loc2_._x = 0;
- _loc2_._y = _loc1_.m_height - _loc2_._height;
- _loc2_.setLargeScroll(_loc1_.m_width);
- _loc2_.setScrollProperties(_loc1_.m_width,_loc1_.m_virtualWidth - (_loc1_.m_width - i));
- _loc2_.setSmallScroll(5);
- }
- }
- if(_loc1_.m_scrollbar._visible && _loc1_.m_horizScrollbar._visible)
- {
- if(_loc1_.m_corner == undefined)
- {
- _loc1_.m_corner = _loc1_.m_scrollbarContainer.createEmptyMovieClip("m_corner",3);
- FPUI.Component.fillRect(_loc1_.m_corner,0,0,_loc1_.m_scrollbar._width,_loc1_.m_horizScrollbar._height,4294967295);
- }
- _loc1_.m_corner._visible = true;
- _loc1_.m_corner._x = _loc1_.m_horizScrollbar._x + _loc1_.m_horizScrollbar._width;
- _loc1_.m_corner._y = _loc1_.m_scrollbar._y + _loc1_.m_scrollbar._height;
- }
- else
- {
- _loc1_.m_corner._visible = false;
- }
- }
- function scrollHandler(scrollBar)
- {
- var _loc2_ = this;
- var _loc1_ = scrollBar.getScrollPosition();
- _loc2_.m_topDisplayed = _loc1_;
- if(_loc2_.m_lastPosition != _loc1_)
- {
- _loc2_.updateControl();
- }
- _loc2_.m_lastPosition = _loc1_;
- }
- function hScrollHandler(scrollBar)
- {
- var _loc2_ = this;
- var _loc1_ = scrollBar.getScrollPosition();
- if(_loc2_.m_lastHorizPosition != _loc1_)
- {
- _loc2_.m_containerMC._x = - _loc1_;
- }
- _loc2_.m_lastHorizPosition = _loc1_;
- }
- function dragScroll()
- {
- var _loc1_ = this;
- clearInterval(_loc1_.m_dragScrollingIntervalID);
- var _loc2_ = 15;
- if(_loc1_.m_containerMC._ymouse < 0)
- {
- _loc1_.setScrollPosition(_loc1_.m_topDisplayed - 1);
- _loc1_.selectionHandler(0);
- _loc2_ = Math.max(25,-23.8 * (- _loc1_.m_containerMC._ymouse) + 500);
- }
- else if(_loc1_.m_containerMC._ymouse > _loc1_.m_itemHeight * _loc1_.m_numDisplayed)
- {
- _loc1_.setScrollPosition(_loc1_.m_topDisplayed + 1);
- _loc1_.selectionHandler(_loc1_.m_numDisplayed - 1);
- _loc2_ = Math.max(25,-23.8 * Math.abs(_loc1_.m_containerMC._ymouse - _loc1_.m_itemHeight * _loc1_.m_numDisplayed - 2) + 500);
- }
- _loc1_.m_dragScrollingIntervalID = setInterval(_loc1_,"dragScroll",15);
- }
- function onComponentKeyDown()
- {
- var _loc3_ = this;
- if(_loc3_.m_focused)
- {
- var _loc2_ = [40,38,34,33,36,35];
- var keyIncrs = [1,-1,_loc3_.m_numDisplayed - 1,- (_loc3_.m_numDisplayed - 1),- _loc3_.getLength(),_loc3_.getLength()];
- var _loc1_ = 0;
- while(_loc1_ < _loc2_.length)
- {
- if(Key.isDown(_loc2_[_loc1_]))
- {
- _loc3_.moveSelBy(keyIncrs[_loc1_]);
- break;
- }
- _loc1_ = _loc1_ + 1;
- }
- }
- }
- }
-