home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 December / PCWELT_12_2006.ISO / papers / 2.swf / scripts / __Packages / FPUI / DropdownList.as < prev    next >
Encoding:
Text File  |  2006-10-17  |  10.6 KB  |  344 lines

  1. class FPUI.DropdownList extends FPUI.Component
  2. {
  3.    var m_button = null;
  4.    var m_controller = null;
  5.    var m_cursorManager = null;
  6.    var m_selectedItem = -1;
  7.    var m_data = null;
  8.    var m_rowHeight = 0;
  9.    var m_dividers = null;
  10.    var m_nextLabelYPos = 0;
  11.    var m_numDividers = 0;
  12.    static var ICON_X_PAD = 4;
  13.    static var ICON_SIZE = 16;
  14.    static var TEXT_LABEL_PADDING = 4;
  15.    static var ITEM_LABEL = "listItem_mc";
  16.    static var DIVIDER_HEIGHT = 3;
  17.    static var TEXT_FIELD_SLOP = 2;
  18.    static var FIRST_ITEM_DEPTH = 100;
  19.    static var FIRST_DIV_DEPTH = 200;
  20.    function DropdownList()
  21.    {
  22.       var _loc1_ = this;
  23.       super();
  24.       _loc1_.setListVisible(false);
  25.       _loc1_.m_rowHeight = Math.max(FPUI.DropdownList.ICON_SIZE + FPUI.DropdownList.ICON_X_PAD * 2,FlashPaper.Utils.UISMALLFONTSIZE + FPUI.DropdownList.TEXT_FIELD_SLOP);
  26.       _loc1_.m_selectedItem = -1;
  27.       _loc1_.useHandCursor = false;
  28.       _loc1_.m_data = new Array();
  29.       _loc1_.m_dividers = new Array();
  30.       _loc1_.createEmptyMovieClip("m_highlightMC",-1);
  31.       _loc1_.adjustHeight();
  32.    }
  33.    function setController(controller)
  34.    {
  35.       this.m_controller = controller;
  36.    }
  37.    function setCursorManager(cursorManager)
  38.    {
  39.       this.m_cursorManager = cursorManager;
  40.    }
  41.    function setButton(button)
  42.    {
  43.       var _loc1_ = this;
  44.       _loc1_.m_button = button;
  45.       _loc1_.m_button._visible = false;
  46.       _loc1_.m_button.m_eatsNavKeysWhenFocused = true;
  47.       _loc1_.m_button.setKeyHandler(_loc1_);
  48.    }
  49.    function setListVisible(visible)
  50.    {
  51.       var _loc1_ = this;
  52.       var _loc2_ = visible;
  53.       if(_loc1_._visible != _loc2_)
  54.       {
  55.          _loc1_._visible = _loc2_;
  56.          if(_loc2_)
  57.          {
  58.             if(_loc1_.m_button)
  59.             {
  60.                _loc1_.m_button.setActive(true);
  61.                _loc1_.m_button.pressFocus();
  62.             }
  63.             FlashPaper.Utils.removeShadow(_loc1_);
  64.             FlashPaper.Utils.addShadow(_loc1_,0,_loc1_.list_mc._width,_loc1_.list_mc._height,true);
  65.          }
  66.          else
  67.          {
  68.             if(_loc1_.m_button)
  69.             {
  70.                _loc1_.m_button.setActive(false);
  71.                if(FPUI.Component.focusedComponent == _loc1_.m_button)
  72.                {
  73.                   Selection.setFocus(null);
  74.                }
  75.             }
  76.             _loc1_.highlightItem(-1);
  77.          }
  78.       }
  79.    }
  80.    function onButtonRelease()
  81.    {
  82.       var _loc1_ = this;
  83.       if(_loc1_.m_button)
  84.       {
  85.          var _loc2_ = _loc1_.m_button.getBounds(_loc1_._parent);
  86.          _loc1_._x = Math.round(_loc2_.xMin - (_loc1_.list_mc._width - _loc1_.m_button._width));
  87.          _loc1_._y = Math.round(_loc1_._y);
  88.          _loc1_.setListVisible(!_loc1_._visible);
  89.       }
  90.    }
  91.    function moveSelection(dir)
  92.    {
  93.       var _loc2_ = this;
  94.       var _loc1_ = _loc2_.m_selectedItem;
  95.       _loc1_ += dir;
  96.       if(_loc1_ >= 0 && _loc1_ < _loc2_.m_data.length)
  97.       {
  98.          _loc2_.highlightItem(_loc1_);
  99.       }
  100.    }
  101.    function addItem(iconName, displayText, method)
  102.    {
  103.       var _loc1_ = this;
  104.       var _loc3_ = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
  105.       _loc1_.m_data.push(new FPUI.DropdownListData(displayText,_loc3_,method));
  106.       _loc1_.adjustHeight();
  107.       var _loc2_ = _loc1_.m_data.length - 1;
  108.       _loc1_.addLabel(iconName,FPUI.DropdownList.ITEM_LABEL + _loc2_,_loc2_);
  109.       _loc1_.adjustWidth();
  110.       if(_loc1_.m_data.length > 0 && _loc1_.m_button)
  111.       {
  112.          _loc1_.m_button._visible = true;
  113.       }
  114.       return _loc1_.m_data.length;
  115.    }
  116.    function removeItem()
  117.    {
  118.       var _loc1_ = this;
  119.       if(_loc1_.m_data.length > 0)
  120.       {
  121.          _loc1_.removeLabel(FPUI.DropdownList.ITEM_LABEL + (_loc1_.m_data.length - 1));
  122.          _loc1_.m_data.pop();
  123.          _loc1_.adjustHeight();
  124.          _loc1_.adjustWidth();
  125.          if(_loc1_.m_data.length == 0 && _loc1_.m_button)
  126.          {
  127.             _loc1_.m_button._visible = false;
  128.          }
  129.       }
  130.    }
  131.    function clear()
  132.    {
  133.       var _loc1_ = this;
  134.       while(_loc1_.m_data.length > 0)
  135.       {
  136.          _loc1_.removeItem();
  137.       }
  138.    }
  139.    function addDivider()
  140.    {
  141.       var _loc1_ = this;
  142.       var _loc3_ = _loc1_.m_dividers.length;
  143.       var depth = FPUI.DropdownList.FIRST_DIV_DEPTH + _loc3_;
  144.       var _loc2_ = "divider" + _loc3_ + "_mc";
  145.       _loc1_.m_dividers.push(_loc1_.attachMovie("ListDivider",_loc2_,depth));
  146.       _loc1_[_loc2_]._x = _loc1_.list_mc._x;
  147.       _loc1_[_loc2_]._y = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc3_ * FPUI.DropdownList.DIVIDER_HEIGHT + 0.5;
  148.       _loc1_[_loc2_]._width = _loc1_.list_mc._width;
  149.    }
  150.    function removeDivider()
  151.    {
  152.       var _loc1_ = this.m_dividers.pop();
  153.       _loc1_.removeMovieClip();
  154.    }
  155.    function executeSelection()
  156.    {
  157.       var _loc1_ = this;
  158.       if(_loc1_.m_selectedItem >= 0 && _loc1_.m_selectedItem < _loc1_.m_data.length)
  159.       {
  160.          _loc1_.m_controller[_loc1_.m_data[_loc1_.m_selectedItem].m_method]();
  161.          return true;
  162.       }
  163.       return false;
  164.    }
  165.    function onMouseDown()
  166.    {
  167.       var _loc1_ = this;
  168.       _loc1_.executeSelection();
  169.       if(!_loc1_.m_button || FlashPaper.Utils.doMouseHitTest(_loc1_.m_button) == false)
  170.       {
  171.          _loc1_.setListVisible(false);
  172.       }
  173.    }
  174.    function onMouseMove()
  175.    {
  176.       var _loc1_ = this;
  177.       if(_loc1_._visible)
  178.       {
  179.          if(FlashPaper.Utils.doMouseHitTest(_loc1_.list_mc))
  180.          {
  181.             var _loc2_ = _loc1_._ymouse;
  182.             if(_loc2_ < 0)
  183.             {
  184.                _loc2_ = 0;
  185.             }
  186.             var _loc3_ = Math.floor(_loc2_ / _loc1_.m_rowHeight);
  187.             _loc1_.highlightItem(_loc3_);
  188.          }
  189.       }
  190.    }
  191.    function onRollOver()
  192.    {
  193.       var _loc1_ = this;
  194.       if(_loc1_._visible)
  195.       {
  196.          _loc1_.m_cursorManager.setCursorFocus(_loc1_);
  197.       }
  198.    }
  199.    function onRollOut()
  200.    {
  201.       if(this._visible)
  202.       {
  203.          this.highlightItem(-1);
  204.       }
  205.    }
  206.    function onReleaseOutside()
  207.    {
  208.       if(this._visible)
  209.       {
  210.          this.highlightItem(-1);
  211.       }
  212.    }
  213.    function onKeyDown()
  214.    {
  215.       var _loc1_ = this;
  216.       var _loc2_ = Key.getCode();
  217.       switch(_loc2_)
  218.       {
  219.          case 38:
  220.             _loc1_.moveSelection(-1);
  221.             if(_loc1_.m_button)
  222.             {
  223.                _loc1_.m_button.pressFocus();
  224.             }
  225.             break;
  226.          case 40:
  227.             _loc1_.moveSelection(1);
  228.             if(_loc1_.m_button)
  229.             {
  230.                _loc1_.m_button.pressFocus();
  231.             }
  232.             break;
  233.          case 9:
  234.             _loc1_.setListVisible(false);
  235.             break;
  236.          case 13:
  237.             if(_loc1_.executeSelection())
  238.             {
  239.                _loc1_.setListVisible(false);
  240.             }
  241.             else
  242.             {
  243.                _loc1_.onButtonRelease();
  244.             }
  245.       }
  246.    }
  247.    function addLabel(iconName, instanceName, idx)
  248.    {
  249.       var _loc1_ = this;
  250.       _loc1_.createEmptyMovieClip(instanceName,FPUI.DropdownList.FIRST_ITEM_DEPTH + idx);
  251.       var _loc2_ = _loc1_[instanceName];
  252.       var y = idx * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
  253.       var textFieldXpos = 0;
  254.       if(iconName.length != 0)
  255.       {
  256.          var _loc3_ = _loc2_.attachMovie(iconName,"icon",1);
  257.          var w = Math.min(_loc3_._width,FPUI.DropdownList.ICON_SIZE);
  258.          var h = Math.min(_loc3_._height,_loc1_.m_rowHeight);
  259.          _loc3_._x = Math.round(FPUI.DropdownList.ICON_X_PAD + (FPUI.DropdownList.ICON_SIZE - w) / 2);
  260.          _loc3_._y = Math.round(y + (_loc1_.m_rowHeight - h) / 2);
  261.          _loc3_._accProps = {silent:true};
  262.          textFieldXpos = FPUI.DropdownList.ICON_X_PAD * 2 + FPUI.DropdownList.ICON_SIZE;
  263.       }
  264.       else
  265.       {
  266.          textFieldXpos = FPUI.DropdownList.TEXT_LABEL_PADDING;
  267.       }
  268.       if(_loc1_.m_data[idx].m_text.length != 0)
  269.       {
  270.          var textFormat = new TextFormat(FlashPaper.Utils.UIFONT,FlashPaper.Utils.UISMALLFONTSIZE,0,true);
  271.          _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);
  272.          _loc2_.textLabel.embedFonts = false;
  273.          _loc2_.textLabel.text = _loc1_.m_data[idx].m_text;
  274.          _loc2_.textLabel.setTextFormat(textFormat);
  275.          _loc2_.textLabel.selectable = false;
  276.          _loc2_.textLabel._accProps = {silent:true};
  277.       }
  278.       Accessibility.updateProperties();
  279.    }
  280.    function removeLabel(instanceName)
  281.    {
  282.       this[instanceName].removeMovieClip();
  283.    }
  284.    function adjustHeight()
  285.    {
  286.       var _loc1_ = this;
  287.       var _loc2_ = _loc1_.m_data.length * _loc1_.m_rowHeight + _loc1_.m_dividers.length * FPUI.DropdownList.DIVIDER_HEIGHT;
  288.       _loc1_.list_mc._height = _loc2_;
  289.    }
  290.    function adjustWidth()
  291.    {
  292.       var _loc1_ = this;
  293.       var _loc3_ = 0;
  294.       var currTextWidth = 0;
  295.       var icons = false;
  296.       var _loc2_ = 0;
  297.       while(_loc2_ < _loc1_.m_data.length)
  298.       {
  299.          currTextWidth = _loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].textLabel.textWidth + FPUI.DropdownList.TEXT_FIELD_SLOP * 2;
  300.          if(_loc3_ < currTextWidth)
  301.          {
  302.             _loc3_ = currTextWidth;
  303.          }
  304.          if(_loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].icon)
  305.          {
  306.             icons = true;
  307.          }
  308.          _loc2_ = _loc2_ + 1;
  309.       }
  310.       _loc2_ = 0;
  311.       while(_loc2_ < _loc1_.m_data.length)
  312.       {
  313.          _loc1_[FPUI.DropdownList.ITEM_LABEL + _loc2_].textLabel._width = _loc3_;
  314.          _loc2_ = _loc2_ + 1;
  315.       }
  316.       if(icons)
  317.       {
  318.          _loc3_ += FPUI.DropdownList.ICON_X_PAD * 2 + FPUI.DropdownList.ICON_SIZE + FPUI.DropdownList.TEXT_LABEL_PADDING;
  319.       }
  320.       else
  321.       {
  322.          _loc3_ += FPUI.DropdownList.TEXT_LABEL_PADDING * 2;
  323.       }
  324.       _loc1_.list_mc._width = _loc3_;
  325.    }
  326.    function highlightItem(index)
  327.    {
  328.       var _loc1_ = this;
  329.       var _loc2_ = index;
  330.       _loc1_.m_highlightMC.clear();
  331.       if(_loc2_ >= 0 && _loc2_ < _loc1_.m_data.length && _loc1_.m_data[_loc2_].m_method != "")
  332.       {
  333.          _loc1_.m_highlightMC._visible = true;
  334.          FPUI.Component.fillRect(_loc1_.m_highlightMC,0,_loc1_.m_data[_loc2_].m_yOffset,_loc1_.list_mc._width,_loc1_.m_rowHeight,FPUI.Component.kRolloverColor);
  335.          _loc1_.m_selectedItem = _loc2_;
  336.       }
  337.       else
  338.       {
  339.          _loc1_.m_highlightMC._visible = false;
  340.          _loc1_.m_selectedItem = -1;
  341.       }
  342.    }
  343. }
  344.