home *** CD-ROM | disk | FTP | other *** search
- class FPUI.DropdownList extends FPUI.Component
- {
- var m_button = null;
- var m_controller = null;
- var m_cursorManager = null;
- var m_selectedItem = -1;
- var m_data = null;
- var m_rowHeight = 0;
- var m_dividers = null;
- var m_nextLabelYPos = 0;
- var m_numDividers = 0;
- static var ICON_X_PAD = 4;
- static var ICON_SIZE = 16;
- static var TEXT_LABEL_PADDING = 4;
- static var ITEM_LABEL = "listItem_mc";
- static var DIVIDER_HEIGHT = 3;
- static var TEXT_FIELD_SLOP = 2;
- static var FIRST_ITEM_DEPTH = 100;
- static var FIRST_DIV_DEPTH = 200;
- function DropdownList()
- {
- var _loc1_ = this;
- super();
- _loc1_.setListVisible(false);
- _loc1_.m_rowHeight = Math.max(FPUI.DropdownList.ICON_SIZE + FPUI.DropdownList.ICON_X_PAD * 2,FlashPaper.Utils.UISMALLFONTSIZE + FPUI.DropdownList.TEXT_FIELD_SLOP);
- _loc1_.m_selectedItem = -1;
- _loc1_.useHandCursor = false;
- _loc1_.m_data = new Array();
- _loc1_.m_dividers = new Array();
- _loc1_.createEmptyMovieClip("m_highlightMC",-1);
- _loc1_.adjustHeight();
- }
- function setController(controller)
- {
- this.m_controller = controller;
- }
- function setCursorManager(cursorManager)
- {
- this.m_cursorManager = cursorManager;
- }
- function setButton(button)
- {
- var _loc1_ = this;
- _loc1_.m_button = button;
- _loc1_.m_button._visible = false;
- _loc1_.m_button.m_eatsNavKeysWhenFocused = true;
- _loc1_.m_button.setKeyHandler(_loc1_);
- }
- function setListVisible(visible)
- {
- var _loc1_ = this;
- var _loc2_ = visible;
- if(_loc1_._visible != _loc2_)
- {
- _loc1_._visible = _loc2_;
- if(_loc2_)
- {
- if(_loc1_.m_button)
- {
- _loc1_.m_button.setActive(true);
- _loc1_.m_button.pressFocus();
- }
- FlashPaper.Utils.removeShadow(_loc1_);
- FlashPaper.Utils.addShadow(_loc1_,0,_loc1_.list_mc._width,_loc1_.list_mc._height,true);
- }
- else
- {
- if(_loc1_.m_button)
- {
- _loc1_.m_button.setActive(false);
- if(FPUI.Component.focusedComponent == _loc1_.m_button)
- {
- Selection.setFocus(null);
- }
- }
- _loc1_.highlightItem(-1);
- }
- }
- }
- function onButtonRelease()
- {
- var _loc1_ = this;
- if(_loc1_.m_button)
- {
- var _loc2_ = _loc1_.m_button.getBounds(_loc1_._parent);
- _loc1_._x = Math.round(_loc2_.xMin - (_loc1_.list_mc._width - _loc1_.m_button._width));
- _loc1_._y = Math.round(_loc1_._y);
- _loc1_.setListVisible(!_loc1_._visible);
- }
- }
- function moveSelection(dir)
- {
- var _loc2_ = this;
- var _loc1_ = _loc2_.m_selectedItem;
- _loc1_ += dir;
- if(_loc1_ >= 0 && _loc1_ < _loc2_.m_data.length)
- {
- _loc2_.highlightItem(_loc1_);
- }
- }
- function addItem(iconName, displayText, method)
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
- _loc1_.m_data.push(new FPUI.DropdownListData(displayText,_loc3_,method));
- _loc1_.adjustHeight();
- var _loc2_ = _loc1_.m_data.length - 1;
- _loc1_.addLabel(iconName,FPUI.DropdownList.ITEM_LABEL + _loc2_,_loc2_);
- _loc1_.adjustWidth();
- if(_loc1_.m_data.length > 0 && _loc1_.m_button)
- {
- _loc1_.m_button._visible = true;
- }
- return _loc1_.m_data.length;
- }
- function removeItem()
- {
- var _loc1_ = this;
- if(_loc1_.m_data.length > 0)
- {
- _loc1_.removeLabel(FPUI.DropdownList.ITEM_LABEL + (_loc1_.m_data.length - 1));
- _loc1_.m_data.pop();
- _loc1_.adjustHeight();
- _loc1_.adjustWidth();
- if(_loc1_.m_data.length == 0 && _loc1_.m_button)
- {
- _loc1_.m_button._visible = false;
- }
- }
- }
- function clear()
- {
- var _loc1_ = this;
- while(_loc1_.m_data.length > 0)
- {
- _loc1_.removeItem();
- }
- }
- function addDivider()
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_dividers.length;
- var depth = FPUI.DropdownList.FIRST_DIV_DEPTH + _loc3_;
- var _loc2_ = "divider" + _loc3_ + "_mc";
- _loc1_.m_dividers.push(_loc1_.attachMovie("ListDivider",_loc2_,depth));
- _loc1_[_loc2_]._x = _loc1_.list_mc._x;
- _loc1_[_loc2_]._y = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc3_ * FPUI.DropdownList.DIVIDER_HEIGHT + 0.5;
- _loc1_[_loc2_]._width = _loc1_.list_mc._width;
- }
- function removeDivider()
- {
- var _loc1_ = this.m_dividers.pop();
- _loc1_.removeMovieClip();
- }
- function executeSelection()
- {
- var _loc1_ = this;
- if(_loc1_.m_selectedItem >= 0 && _loc1_.m_selectedItem < _loc1_.m_data.length)
- {
- _loc1_.m_controller[_loc1_.m_data[_loc1_.m_selectedItem].m_method]();
- return true;
- }
- return false;
- }
- function onMouseDown()
- {
- var _loc1_ = this;
- _loc1_.executeSelection();
- if(!_loc1_.m_button || FlashPaper.Utils.doMouseHitTest(_loc1_.m_button) == false)
- {
- _loc1_.setListVisible(false);
- }
- }
- function onMouseMove()
- {
- var _loc1_ = this;
- if(_loc1_._visible)
- {
- if(FlashPaper.Utils.doMouseHitTest(_loc1_.list_mc))
- {
- var _loc2_ = _loc1_._ymouse;
- if(_loc2_ < 0)
- {
- _loc2_ = 0;
- }
- var _loc3_ = Math.floor(_loc2_ / _loc1_.m_rowHeight);
- _loc1_.highlightItem(_loc3_);
- }
- }
- }
- function onRollOver()
- {
- var _loc1_ = this;
- if(_loc1_._visible)
- {
- _loc1_.m_cursorManager.setCursorFocus(_loc1_);
- }
- }
- function onRollOut()
- {
- if(this._visible)
- {
- this.highlightItem(-1);
- }
- }
- function onReleaseOutside()
- {
- if(this._visible)
- {
- this.highlightItem(-1);
- }
- }
- function onKeyDown()
- {
- var _loc1_ = this;
- var _loc2_ = Key.getCode();
- switch(_loc2_)
- {
- case 38:
- _loc1_.moveSelection(-1);
- if(_loc1_.m_button)
- {
- _loc1_.m_button.pressFocus();
- }
- break;
- case 40:
- _loc1_.moveSelection(1);
- if(_loc1_.m_button)
- {
- _loc1_.m_button.pressFocus();
- }
- break;
- case 9:
- _loc1_.setListVisible(false);
- break;
- case 13:
- if(_loc1_.executeSelection())
- {
- _loc1_.setListVisible(false);
- }
- else
- {
- _loc1_.onButtonRelease();
- }
- }
- }
- function addLabel(iconName, instanceName, idx)
- {
- var _loc1_ = this;
- _loc1_.createEmptyMovieClip(instanceName,FPUI.DropdownList.FIRST_ITEM_DEPTH + idx);
- var _loc2_ = _loc1_[instanceName];
- var y = idx * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
- var textFieldXpos = 0;
- if(iconName.length != 0)
- {
- var _loc3_ = _loc2_.attachMovie(iconName,"icon",1);
- var w = Math.min(_loc3_._width,FPUI.DropdownList.ICON_SIZE);
- var h = Math.min(_loc3_._height,_loc1_.m_rowHeight);
- _loc3_._x = Math.round(FPUI.DropdownList.ICON_X_PAD + (FPUI.DropdownList.ICON_SIZE - w) / 2);
- _loc3_._y = Math.round(y + (_loc1_.m_rowHeight - h) / 2);
- _loc3_._accProps = {silent:true};
- textFieldXpos = FPUI.DropdownList.ICON_X_PAD * 2 + FPUI.DropdownList.ICON_SIZE;
- }
- else
- {
- textFieldXpos = FPUI.DropdownList.TEXT_LABEL_PADDING;
- }
- if(_loc1_.m_data[idx].m_text.length != 0)
- {
- var textFormat = new TextFormat(FlashPaper.Utils.UIFONT,FlashPaper.Utils.UISMALLFONTSIZE,0,true);
- _loc2_.createTextField("textLabel",2,textFieldXpos,Math.round(y + (_loc1_.m_rowHeight - FlashPaper.Utils.UISMALLFONTSIZE) / 2 - FPUI.DropdownList.TEXT_FIELD_SLOP),_loc1_.list_mc._width - textFieldXpos,_loc1_.m_rowHeight);
- _loc2_.textLabel.embedFonts = false;
- _loc2_.textLabel.text = _loc1_.m_data[idx].m_text;
- _loc2_.textLabel.setTextFormat(textFormat);
- _loc2_.textLabel.selectable = false;
- _loc2_.textLabel._accProps = {silent:true};
- }
- Accessibility.updateProperties();
- }
- function removeLabel(instanceName)
- {
- this[instanceName].removeMovieClip();
- }
- function adjustHeight()
- {
- var _loc1_ = this;
- var _loc2_ = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
- _loc1_.list_mc._height = _loc2_;
- }
- function adjustWidth()
- {
- var _loc1_ = this;
- var _loc3_ = 0;
- var currTextWidth = 0;
- var icons = false;
- var _loc2_ = 0;
- while(_loc2_ < _loc1_.m_data.length)
- {
- currTextWidth = _loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].textLabel.textWidth + FPUI.DropdownList.TEXT_FIELD_SLOP * 2;
- if(_loc3_ < currTextWidth)
- {
- _loc3_ = currTextWidth;
- }
- if(_loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].icon)
- {
- icons = true;
- }
- _loc2_ = _loc2_ + 1;
- }
- _loc2_ = 0;
- while(_loc2_ < _loc1_.m_data.length)
- {
- _loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].textLabel._width = _loc3_;
- _loc2_ = _loc2_ + 1;
- }
- if(icons)
- {
- _loc3_ += FPUI.DropdownList.ICON_X_PAD * 2 + FPUI.DropdownList.ICON_SIZE + FPUI.DropdownList.TEXT_LABEL_PADDING;
- }
- else
- {
- _loc3_ += FPUI.DropdownList.TEXT_LABEL_PADDING * 2;
- }
- _loc1_.list_mc._width = _loc3_;
- }
- function highlightItem(index)
- {
- var _loc1_ = this;
- var _loc2_ = index;
- _loc1_.m_highlightMC.clear();
- if(_loc2_ >= 0 && _loc2_ < _loc1_.m_data.length && _loc1_.m_data[_loc2_].m_method != "")
- {
- _loc1_.m_highlightMC._visible = true;
- FPUI.Component.fillRect(_loc1_.m_highlightMC,0,_loc1_.m_data[_loc2_].m_yOffset,_loc1_.list_mc._width,_loc1_.m_rowHeight,FPUI.Component.kRolloverColor);
- _loc1_.m_selectedItem = _loc2_;
- }
- else
- {
- _loc1_.m_highlightMC._visible = false;
- _loc1_.m_selectedItem = -1;
- }
- }
- }
-