home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Puzzle / filler.swf / scripts / mx / controls / Button.as next >
Encoding:
Text File  |  2008-09-02  |  37.3 KB  |  1,192 lines

  1. package mx.controls
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.Event;
  5.    import flash.events.FocusEvent;
  6.    import flash.events.KeyboardEvent;
  7.    import flash.events.MouseEvent;
  8.    import flash.events.TimerEvent;
  9.    import flash.text.TextLineMetrics;
  10.    import flash.ui.Keyboard;
  11.    import flash.utils.Timer;
  12.    import mx.controls.dataGridClasses.DataGridListData;
  13.    import mx.controls.listClasses.BaseListData;
  14.    import mx.controls.listClasses.IDropInListItemRenderer;
  15.    import mx.controls.listClasses.IListItemRenderer;
  16.    import mx.core.EdgeMetrics;
  17.    import mx.core.IDataRenderer;
  18.    import mx.core.IFlexDisplayObject;
  19.    import mx.core.IInvalidating;
  20.    import mx.core.IUIComponent;
  21.    import mx.core.UIComponent;
  22.    import mx.core.UITextField;
  23.    import mx.core.mx_internal;
  24.    import mx.events.FlexEvent;
  25.    import mx.managers.IFocusManagerComponent;
  26.    import mx.skins.ProgrammaticSkin;
  27.    import mx.skins.RectangularBorder;
  28.    import mx.styles.ISimpleStyleClient;
  29.    
  30.    use namespace mx_internal;
  31.    
  32.    public class Button extends UIComponent implements IDataRenderer, IDropInListItemRenderer, IFocusManagerComponent, IListItemRenderer
  33.    {
  34.       
  35.       mx_internal static const VERSION:String = "2.0.1.0";
  36.       
  37.       mx_internal static var createAccessibilityImplementation:Function;
  38.        
  39.       
  40.       private var enabledChanged:Boolean = false;
  41.       
  42.       private var skinMeasuredWidth:Number;
  43.       
  44.       mx_internal var disabledSkinName:String = "disabledSkin";
  45.       
  46.       mx_internal var downSkinName:String = "downSkin";
  47.       
  48.       mx_internal var _labelPlacement:String = "right";
  49.       
  50.       private var _data:Object;
  51.       
  52.       private var _phase:String = "up";
  53.       
  54.       mx_internal var _toggle:Boolean = false;
  55.       
  56.       mx_internal var selectedOverSkinName:String = "selectedOverSkin";
  57.       
  58.       mx_internal var selectedDisabledSkinName:String = "selectedDisabledSkin";
  59.       
  60.       private var labelSet:Boolean;
  61.       
  62.       mx_internal var toggleChanged:Boolean = false;
  63.       
  64.       private var labelChanged:Boolean = false;
  65.       
  66.       private var autoRepeatTimer:Timer;
  67.       
  68.       mx_internal var disabledIconName:String = "disabledIcon";
  69.       
  70.       mx_internal var upSkinName:String = "upSkin";
  71.       
  72.       private var toolTipSet:Boolean = false;
  73.       
  74.       mx_internal var downIconName:String = "downIcon";
  75.       
  76.       mx_internal var currentIcon:IFlexDisplayObject;
  77.       
  78.       private var styleChangedFlag:Boolean = true;
  79.       
  80.       private var _autoRepeat:Boolean = false;
  81.       
  82.       mx_internal var selectedOverIconName:String = "selectedOverIcon";
  83.       
  84.       private var _label:String = "";
  85.       
  86.       mx_internal var selectedDisabledIconName:String = "selectedDisabledIcon";
  87.       
  88.       mx_internal var extraSpacing:Number;
  89.       
  90.       mx_internal var selectedUpSkinName:String = "selectedUpSkin";
  91.       
  92.       mx_internal var upIconName:String = "upIcon";
  93.       
  94.       mx_internal var buttonOffset:Number = 0;
  95.       
  96.       private var skinMeasuredHeight:Number;
  97.       
  98.       mx_internal var centerContent:Boolean = true;
  99.       
  100.       private var oldUnscaledWidth:Number;
  101.       
  102.       private var skins:Array;
  103.       
  104.       mx_internal var overSkinName:String = "overSkin";
  105.       
  106.       mx_internal var currentSkin:IFlexDisplayObject;
  107.       
  108.       mx_internal var selectedDownSkinName:String = "selectedDownSkin";
  109.       
  110.       private var _listData:BaseListData;
  111.       
  112.       mx_internal var iconName:String = "icon";
  113.       
  114.       mx_internal var _emphasized:Boolean = false;
  115.       
  116.       public var selectedField:String = null;
  117.       
  118.       private var icons:Array;
  119.       
  120.       public var stickyHighlighting:Boolean = false;
  121.       
  122.       mx_internal var selectedUpIconName:String = "selectedUpIcon";
  123.       
  124.       mx_internal var selectedDownIconName:String = "selectedDownIcon";
  125.       
  126.       mx_internal var overIconName:String = "overIcon";
  127.       
  128.       private var selectedSet:Boolean;
  129.       
  130.       protected var textField:UITextField;
  131.       
  132.       mx_internal var _selected:Boolean = false;
  133.       
  134.       public function Button()
  135.       {
  136.          skins = [];
  137.          icons = [];
  138.          mx_internal::buttonOffset = 0;
  139.          mx_internal::centerContent = true;
  140.          mx_internal::extraSpacing = 10 + 10;
  141.          styleChangedFlag = true;
  142.          mx_internal::upSkinName = "upSkin";
  143.          mx_internal::overSkinName = "overSkin";
  144.          mx_internal::downSkinName = "downSkin";
  145.          mx_internal::disabledSkinName = "disabledSkin";
  146.          mx_internal::selectedUpSkinName = "selectedUpSkin";
  147.          mx_internal::selectedOverSkinName = "selectedOverSkin";
  148.          mx_internal::selectedDownSkinName = "selectedDownSkin";
  149.          mx_internal::selectedDisabledSkinName = "selectedDisabledSkin";
  150.          mx_internal::iconName = "icon";
  151.          mx_internal::upIconName = "upIcon";
  152.          mx_internal::overIconName = "overIcon";
  153.          mx_internal::downIconName = "downIcon";
  154.          mx_internal::disabledIconName = "disabledIcon";
  155.          mx_internal::selectedUpIconName = "selectedUpIcon";
  156.          mx_internal::selectedOverIconName = "selectedOverIcon";
  157.          mx_internal::selectedDownIconName = "selectedDownIcon";
  158.          mx_internal::selectedDisabledIconName = "selectedDisabledIcon";
  159.          enabledChanged = false;
  160.          toolTipSet = false;
  161.          _autoRepeat = false;
  162.          mx_internal::_emphasized = false;
  163.          _label = "";
  164.          labelChanged = false;
  165.          mx_internal::_labelPlacement = ButtonLabelPlacement.RIGHT;
  166.          _phase = ButtonPhase.UP;
  167.          mx_internal::_selected = false;
  168.          selectedField = null;
  169.          stickyHighlighting = false;
  170.          mx_internal::_toggle = false;
  171.          mx_internal::toggleChanged = false;
  172.          super();
  173.          mouseChildren = false;
  174.          addEventListener(MouseEvent.ROLL_OVER,rollOverHandler);
  175.          addEventListener(MouseEvent.ROLL_OUT,rollOutHandler);
  176.          addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
  177.          addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
  178.          addEventListener(MouseEvent.CLICK,clickHandler);
  179.       }
  180.       
  181.       override protected function adjustFocusRect(param1:DisplayObject = null) : void
  182.       {
  183.          super.adjustFocusRect(!mx_internal::currentSkin ? DisplayObject(mx_internal::currentIcon) : this);
  184.       }
  185.       
  186.       mx_internal function layoutContents(param1:Number, param2:Number, param3:Boolean) : void
  187.       {
  188.          var _loc4_:Number = NaN;
  189.          var _loc5_:Number = NaN;
  190.          var _loc6_:Number = NaN;
  191.          var _loc7_:Number = NaN;
  192.          var _loc8_:Number = NaN;
  193.          var _loc9_:Number = NaN;
  194.          var _loc10_:Number = NaN;
  195.          var _loc11_:Number = NaN;
  196.          var _loc12_:Number = NaN;
  197.          var _loc13_:Number = NaN;
  198.          var _loc14_:Number = NaN;
  199.          var _loc15_:Number = NaN;
  200.          var _loc16_:Number = NaN;
  201.          var _loc17_:Number = NaN;
  202.          var _loc18_:Number = NaN;
  203.          var _loc19_:Number = NaN;
  204.          var _loc20_:TextLineMetrics = null;
  205.          var _loc21_:Number = NaN;
  206.          var _loc22_:String = null;
  207.          var _loc23_:EdgeMetrics = null;
  208.          var _loc24_:Number = NaN;
  209.          var _loc25_:Number = NaN;
  210.          var _loc26_:Number = NaN;
  211.          var _loc27_:Number = NaN;
  212.          var _loc28_:Number = NaN;
  213.          _loc4_ = 0;
  214.          _loc5_ = 0;
  215.          _loc6_ = 0;
  216.          _loc7_ = 0;
  217.          _loc8_ = 0;
  218.          _loc9_ = 0;
  219.          _loc10_ = 0;
  220.          _loc11_ = 0;
  221.          _loc12_ = 2;
  222.          _loc13_ = 2;
  223.          _loc14_ = getStyle("paddingLeft");
  224.          _loc15_ = getStyle("paddingRight");
  225.          _loc16_ = getStyle("paddingTop");
  226.          _loc17_ = getStyle("paddingBottom");
  227.          _loc18_ = 0;
  228.          _loc19_ = 0;
  229.          if(label)
  230.          {
  231.             if((_loc20_ = measureText(label)).width > 0)
  232.             {
  233.                _loc18_ = _loc14_ + _loc15_ + getStyle("textIndent") + _loc20_.width;
  234.             }
  235.             _loc19_ = _loc20_.height;
  236.          }
  237.          else
  238.          {
  239.             _loc19_ = (_loc20_ = measureText("Wj")).height;
  240.          }
  241.          _loc21_ = param3 ? mx_internal::buttonOffset : 0;
  242.          _loc22_ = getStyle("textAlign");
  243.          _loc23_ = Boolean(mx_internal::currentSkin) && mx_internal::currentSkin is RectangularBorder ? RectangularBorder(mx_internal::currentSkin).borderMetrics : null;
  244.          _loc24_ = param1;
  245.          _loc25_ = param2 - _loc16_ - _loc17_;
  246.          if(_loc23_)
  247.          {
  248.             _loc24_ -= _loc23_.left + _loc23_.right;
  249.             _loc25_ -= _loc23_.top + _loc23_.bottom;
  250.          }
  251.          if(mx_internal::currentIcon)
  252.          {
  253.             _loc8_ = mx_internal::currentIcon.width;
  254.             _loc9_ = mx_internal::currentIcon.height;
  255.          }
  256.          if(labelPlacement == ButtonLabelPlacement.LEFT || labelPlacement == ButtonLabelPlacement.RIGHT)
  257.          {
  258.             _loc12_ = getStyle("horizontalGap");
  259.             if(_loc8_ == 0 || _loc18_ == 0)
  260.             {
  261.                _loc12_ = 0;
  262.             }
  263.             if(_loc18_ > 0)
  264.             {
  265.                textField.width = _loc4_ = Math.max(_loc24_ - _loc8_ - _loc12_ - _loc14_ - _loc15_,0);
  266.             }
  267.             else
  268.             {
  269.                textField.width = _loc4_ = 0;
  270.             }
  271.             textField.height = _loc5_ = Math.min(_loc25_ + 2,_loc19_ + UITextField.mx_internal::TEXT_HEIGHT_PADDING);
  272.             if(labelPlacement == ButtonLabelPlacement.RIGHT)
  273.             {
  274.                _loc6_ = _loc8_ + _loc12_;
  275.                if(mx_internal::centerContent)
  276.                {
  277.                   if(_loc22_ == "left")
  278.                   {
  279.                      _loc6_ += _loc14_;
  280.                   }
  281.                   else if(_loc22_ == "right")
  282.                   {
  283.                      _loc6_ += _loc24_ - _loc4_ - _loc8_ - _loc12_ - _loc14_;
  284.                   }
  285.                   else
  286.                   {
  287.                      _loc28_ = (_loc24_ - _loc4_ - _loc8_ - _loc12_) / 2;
  288.                      _loc6_ += Math.max(_loc28_,_loc14_);
  289.                   }
  290.                }
  291.                _loc10_ = _loc6_ - (_loc8_ + _loc12_);
  292.                if(!mx_internal::centerContent)
  293.                {
  294.                   _loc6_ += _loc14_;
  295.                }
  296.             }
  297.             else
  298.             {
  299.                _loc6_ = _loc24_ - _loc4_ - _loc8_ - _loc12_ - _loc15_;
  300.                if(mx_internal::centerContent)
  301.                {
  302.                   if(_loc22_ == "left")
  303.                   {
  304.                      _loc6_ = 2;
  305.                   }
  306.                   else if(_loc22_ == "right")
  307.                   {
  308.                      _loc6_--;
  309.                   }
  310.                   else if(_loc6_ > 0)
  311.                   {
  312.                      _loc6_ /= 2;
  313.                   }
  314.                }
  315.                _loc10_ = _loc6_ + _loc4_ + _loc12_;
  316.             }
  317.             _loc11_ = _loc7_ = 0;
  318.             if(mx_internal::centerContent)
  319.             {
  320.                _loc11_ = Math.round((_loc25_ - _loc9_) / 2) + _loc16_;
  321.                _loc7_ = Math.round((_loc25_ - _loc5_) / 2) + _loc16_;
  322.             }
  323.             else
  324.             {
  325.                _loc7_ += Math.max(0,(_loc25_ - _loc5_) / 2) + _loc16_;
  326.                _loc11_ += Math.max(0,(_loc25_ - _loc9_) / 2 - 1) + _loc16_;
  327.             }
  328.          }
  329.          else
  330.          {
  331.             _loc13_ = getStyle("verticalGap");
  332.             if(_loc9_ == 0 || _loc19_ == 0)
  333.             {
  334.                _loc13_ = 0;
  335.             }
  336.             if(_loc18_ > 0)
  337.             {
  338.                textField.width = _loc4_ = Math.min(_loc24_,_loc18_ + UITextField.mx_internal::TEXT_WIDTH_PADDING);
  339.                textField.height = _loc5_ = Math.min(_loc25_ - _loc9_ + 1,_loc19_ + 5);
  340.             }
  341.             else
  342.             {
  343.                textField.width = _loc4_ = 0;
  344.                textField.height = _loc5_ = 0;
  345.             }
  346.             _loc6_ = (_loc24_ - _loc4_) / 2;
  347.             _loc10_ = (_loc24_ - _loc8_) / 2;
  348.             if(labelPlacement == ButtonLabelPlacement.TOP)
  349.             {
  350.                _loc7_ = _loc25_ - _loc5_ - _loc9_ - _loc13_;
  351.                if(mx_internal::centerContent && _loc7_ > 0)
  352.                {
  353.                   _loc7_ /= 2;
  354.                }
  355.                _loc11_ = (_loc7_ += _loc16_) + _loc5_ + _loc13_ - 3;
  356.             }
  357.             else
  358.             {
  359.                _loc7_ = _loc9_ + _loc13_ + _loc16_;
  360.                if(mx_internal::centerContent)
  361.                {
  362.                   _loc7_ += (_loc25_ - _loc5_ - _loc9_ - _loc13_) / 2 + 1;
  363.                }
  364.                _loc11_ = _loc7_ - _loc9_ - _loc13_ + 3;
  365.             }
  366.          }
  367.          _loc26_ = _loc21_;
  368.          _loc27_ = _loc21_;
  369.          if(_loc23_)
  370.          {
  371.             _loc26_ += _loc23_.left;
  372.             _loc27_ += _loc23_.top;
  373.          }
  374.          textField.x = _loc6_ + _loc26_;
  375.          textField.y = _loc7_ + _loc27_;
  376.          if(mx_internal::currentIcon)
  377.          {
  378.             _loc10_ += _loc26_;
  379.             _loc11_ += _loc27_;
  380.             mx_internal::currentIcon.x = Math.round(_loc10_);
  381.             mx_internal::currentIcon.y = Math.round(_loc11_);
  382.          }
  383.          if(mx_internal::currentSkin)
  384.          {
  385.             setChildIndex(DisplayObject(mx_internal::currentSkin),numChildren - 1);
  386.          }
  387.          if(mx_internal::currentIcon)
  388.          {
  389.             setChildIndex(DisplayObject(mx_internal::currentIcon),numChildren - 1);
  390.          }
  391.          if(textField)
  392.          {
  393.             setChildIndex(textField,numChildren - 1);
  394.          }
  395.       }
  396.       
  397.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  398.       {
  399.          if(!enabled)
  400.          {
  401.             return;
  402.          }
  403.          if(param1.keyCode == Keyboard.SPACE)
  404.          {
  405.             mx_internal::buttonPressed();
  406.          }
  407.       }
  408.       
  409.       mx_internal function getCurrentIcon() : IFlexDisplayObject
  410.       {
  411.          var _loc1_:String = null;
  412.          var _loc2_:IFlexDisplayObject = null;
  413.          var _loc3_:Class = null;
  414.          _loc1_ = mx_internal::getCurrentIconName();
  415.          if(!_loc1_)
  416.          {
  417.             return null;
  418.          }
  419.          _loc2_ = IFlexDisplayObject(getChildByName(_loc1_));
  420.          if(_loc2_ == null)
  421.          {
  422.             _loc3_ = Class(getStyle(_loc1_));
  423.             if(_loc3_ == null)
  424.             {
  425.                _loc3_ = Class(getStyle(mx_internal::iconName));
  426.             }
  427.             if(_loc3_ != null)
  428.             {
  429.                _loc2_ = IFlexDisplayObject(new _loc3_());
  430.                _loc2_.name = _loc1_;
  431.                if(_loc2_ is ISimpleStyleClient)
  432.                {
  433.                   ISimpleStyleClient(_loc2_).styleName = this;
  434.                }
  435.                addChild(DisplayObject(_loc2_));
  436.                icons.push(_loc2_);
  437.             }
  438.          }
  439.          return _loc2_;
  440.       }
  441.       
  442.       public function get autoRepeat() : Boolean
  443.       {
  444.          return _autoRepeat;
  445.       }
  446.       
  447.       protected function rollOutHandler(param1:MouseEvent) : void
  448.       {
  449.          if(mx_internal::phase == ButtonPhase.OVER)
  450.          {
  451.             mx_internal::phase = ButtonPhase.UP;
  452.             param1.updateAfterEvent();
  453.          }
  454.          else if(mx_internal::phase == ButtonPhase.DOWN && !stickyHighlighting)
  455.          {
  456.             mx_internal::phase = ButtonPhase.OVER;
  457.             param1.updateAfterEvent();
  458.             if(autoRepeatTimer)
  459.             {
  460.                autoRepeatTimer.stop();
  461.             }
  462.          }
  463.       }
  464.       
  465.       override protected function keyUpHandler(param1:KeyboardEvent) : void
  466.       {
  467.          if(!enabled)
  468.          {
  469.             return;
  470.          }
  471.          if(param1.keyCode == Keyboard.SPACE)
  472.          {
  473.             mx_internal::buttonReleased();
  474.             if(mx_internal::phase == ButtonPhase.DOWN)
  475.             {
  476.                dispatchEvent(new MouseEvent(MouseEvent.CLICK));
  477.             }
  478.             mx_internal::phase = ButtonPhase.UP;
  479.          }
  480.       }
  481.       
  482.       public function set autoRepeat(param1:Boolean) : void
  483.       {
  484.          _autoRepeat = param1;
  485.          if(param1)
  486.          {
  487.             autoRepeatTimer = new Timer(1);
  488.          }
  489.          else
  490.          {
  491.             autoRepeatTimer = null;
  492.          }
  493.       }
  494.       
  495.       mx_internal function buttonPressed() : void
  496.       {
  497.          mx_internal::phase = ButtonPhase.DOWN;
  498.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  499.          if(autoRepeat)
  500.          {
  501.             autoRepeatTimer.delay = getStyle("repeatDelay");
  502.             autoRepeatTimer.addEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  503.             autoRepeatTimer.start();
  504.          }
  505.       }
  506.       
  507.       mx_internal function viewIcon() : void
  508.       {
  509.          var _loc1_:String = null;
  510.          _loc1_ = mx_internal::getCurrentIconName();
  511.          mx_internal::viewIconForPhase(_loc1_);
  512.       }
  513.       
  514.       mx_internal function changeSkins() : void
  515.       {
  516.          var _loc1_:int = 0;
  517.          var _loc2_:int = 0;
  518.          _loc1_ = int(skins.length);
  519.          _loc2_ = 0;
  520.          while(_loc2_ < _loc1_)
  521.          {
  522.             removeChild(skins[_loc2_]);
  523.             _loc2_++;
  524.          }
  525.          skins = [];
  526.       }
  527.       
  528.       private function autoRepeatTimer_timerHandler(param1:Event) : void
  529.       {
  530.          if(!enabled)
  531.          {
  532.             return;
  533.          }
  534.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  535.       }
  536.       
  537.       private function systemManager_mouseUpHandler(param1:MouseEvent) : void
  538.       {
  539.          if(contains(DisplayObject(param1.target)))
  540.          {
  541.             return;
  542.          }
  543.          mx_internal::phase = ButtonPhase.UP;
  544.          mx_internal::buttonReleased();
  545.          param1.updateAfterEvent();
  546.       }
  547.       
  548.       protected function mouseUpHandler(param1:MouseEvent) : void
  549.       {
  550.          if(!enabled)
  551.          {
  552.             return;
  553.          }
  554.          mx_internal::phase = ButtonPhase.OVER;
  555.          mx_internal::buttonReleased();
  556.          param1.updateAfterEvent();
  557.       }
  558.       
  559.       public function set labelPlacement(param1:String) : void
  560.       {
  561.          mx_internal::_labelPlacement = param1;
  562.          invalidateSize();
  563.          invalidateDisplayList();
  564.          dispatchEvent(new Event("labelPlacementChanged"));
  565.       }
  566.       
  567.       mx_internal function viewIconForPhase(param1:String) : void
  568.       {
  569.          var _loc2_:IFlexDisplayObject = null;
  570.          var _loc3_:Class = null;
  571.          _loc2_ = IFlexDisplayObject(getChildByName(param1));
  572.          if(_loc2_ == null)
  573.          {
  574.             _loc3_ = Class(getStyle(param1));
  575.             if(_loc3_ == null)
  576.             {
  577.                _loc3_ = Class(getStyle(mx_internal::iconName));
  578.             }
  579.             if(_loc3_ != null)
  580.             {
  581.                _loc2_ = IFlexDisplayObject(new _loc3_());
  582.                _loc2_.name = param1;
  583.                if(_loc2_ is ISimpleStyleClient)
  584.                {
  585.                   ISimpleStyleClient(_loc2_).styleName = this;
  586.                }
  587.                addChild(DisplayObject(_loc2_));
  588.                icons.push(_loc2_);
  589.             }
  590.          }
  591.          if(mx_internal::currentIcon != null)
  592.          {
  593.             mx_internal::currentIcon.visible = false;
  594.          }
  595.          mx_internal::currentIcon = _loc2_;
  596.          if(mx_internal::currentIcon != null)
  597.          {
  598.             mx_internal::currentIcon.visible = true;
  599.          }
  600.       }
  601.       
  602.       mx_internal function getTextField() : UITextField
  603.       {
  604.          return textField;
  605.       }
  606.       
  607.       mx_internal function setSelected(param1:Boolean) : void
  608.       {
  609.          if(mx_internal::_selected != param1)
  610.          {
  611.             mx_internal::_selected = param1;
  612.             invalidateDisplayList();
  613.             if(toggle)
  614.             {
  615.                dispatchEvent(new Event(Event.CHANGE));
  616.             }
  617.             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
  618.          }
  619.       }
  620.       
  621.       protected function clickHandler(param1:MouseEvent) : void
  622.       {
  623.          if(!enabled)
  624.          {
  625.             param1.stopImmediatePropagation();
  626.             return;
  627.          }
  628.          if(toggle)
  629.          {
  630.             mx_internal::setSelected(!selected);
  631.          }
  632.       }
  633.       
  634.       mx_internal function getCurrentIconName() : String
  635.       {
  636.          var _loc1_:String = null;
  637.          if(!enabled)
  638.          {
  639.             _loc1_ = selected ? mx_internal::selectedDisabledIconName : mx_internal::disabledIconName;
  640.          }
  641.          else if(mx_internal::phase == ButtonPhase.UP)
  642.          {
  643.             _loc1_ = selected ? mx_internal::selectedUpIconName : mx_internal::upIconName;
  644.          }
  645.          else if(mx_internal::phase == ButtonPhase.OVER)
  646.          {
  647.             _loc1_ = selected ? mx_internal::selectedOverIconName : mx_internal::overIconName;
  648.          }
  649.          else if(mx_internal::phase == ButtonPhase.DOWN)
  650.          {
  651.             _loc1_ = selected ? mx_internal::selectedDownIconName : mx_internal::downIconName;
  652.          }
  653.          return _loc1_;
  654.       }
  655.       
  656.       public function get emphasized() : Boolean
  657.       {
  658.          return mx_internal::_emphasized;
  659.       }
  660.       
  661.       override protected function measure() : void
  662.       {
  663.          var textWidth:Number = NaN;
  664.          var textHeight:Number = NaN;
  665.          var bm:EdgeMetrics = null;
  666.          var tempCurrentIcon:IFlexDisplayObject = null;
  667.          var iconWidth:Number = NaN;
  668.          var iconHeight:Number = NaN;
  669.          var w:Number = NaN;
  670.          var h:Number = NaN;
  671.          var lineMetrics:TextLineMetrics = null;
  672.          super.measure();
  673.          textWidth = 0;
  674.          textHeight = 0;
  675.          if(label)
  676.          {
  677.             lineMetrics = measureText(label);
  678.             textWidth = lineMetrics.width;
  679.             textHeight = lineMetrics.height;
  680.             textWidth += getStyle("paddingLeft") + getStyle("paddingRight") + getStyle("textIndent");
  681.             textHeight += getStyle("paddingTop") + getStyle("paddingBottom");
  682.          }
  683.          try
  684.          {
  685.             bm = mx_internal::currentSkin["borderMetrics"];
  686.          }
  687.          catch(e:Error)
  688.          {
  689.             bm = new EdgeMetrics(3,3,3,3);
  690.          }
  691.          tempCurrentIcon = mx_internal::getCurrentIcon();
  692.          iconWidth = !!tempCurrentIcon ? tempCurrentIcon.width : 0;
  693.          iconHeight = !!tempCurrentIcon ? tempCurrentIcon.height : 0;
  694.          w = 0;
  695.          h = 0;
  696.          if(labelPlacement == ButtonLabelPlacement.LEFT || labelPlacement == ButtonLabelPlacement.RIGHT)
  697.          {
  698.             w = textWidth + iconWidth;
  699.             if(iconWidth != 0)
  700.             {
  701.                w += getStyle("horizontalGap") - 2;
  702.             }
  703.             h = Math.max(textHeight,iconHeight + 6);
  704.          }
  705.          else
  706.          {
  707.             w = Math.max(textWidth,iconWidth);
  708.             h = textHeight + iconHeight;
  709.             if(iconHeight != 0)
  710.             {
  711.                h += getStyle("verticalGap");
  712.             }
  713.          }
  714.          if(bm)
  715.          {
  716.             w += bm.left + bm.right;
  717.             h += bm.top + bm.bottom;
  718.          }
  719.          if(Boolean(label) && label.length != 0)
  720.          {
  721.             w += mx_internal::extraSpacing;
  722.          }
  723.          else
  724.          {
  725.             w += 6;
  726.          }
  727.          if(Boolean(mx_internal::currentSkin) && (isNaN(skinMeasuredWidth) || isNaN(skinMeasuredHeight)))
  728.          {
  729.             skinMeasuredWidth = mx_internal::currentSkin.measuredWidth;
  730.             skinMeasuredHeight = mx_internal::currentSkin.measuredHeight;
  731.          }
  732.          if(!isNaN(skinMeasuredWidth))
  733.          {
  734.             w = Math.max(skinMeasuredWidth,w);
  735.          }
  736.          if(!isNaN(skinMeasuredHeight))
  737.          {
  738.             h = Math.max(skinMeasuredHeight,h);
  739.          }
  740.          measuredMinWidth = measuredWidth = w;
  741.          measuredMinHeight = measuredHeight = h;
  742.       }
  743.       
  744.       mx_internal function get phase() : String
  745.       {
  746.          return _phase;
  747.       }
  748.       
  749.       public function set selected(param1:Boolean) : void
  750.       {
  751.          selectedSet = true;
  752.          mx_internal::setSelected(param1);
  753.       }
  754.       
  755.       mx_internal function changeIcons() : void
  756.       {
  757.          var _loc1_:int = 0;
  758.          var _loc2_:int = 0;
  759.          _loc1_ = int(icons.length);
  760.          _loc2_ = 0;
  761.          while(_loc2_ < _loc1_)
  762.          {
  763.             removeChild(icons[_loc2_]);
  764.             _loc2_++;
  765.          }
  766.          icons = [];
  767.       }
  768.       
  769.       override protected function commitProperties() : void
  770.       {
  771.          super.commitProperties();
  772.          if(!initialized)
  773.          {
  774.             mx_internal::viewSkin();
  775.             mx_internal::viewIcon();
  776.          }
  777.          if(enabledChanged)
  778.          {
  779.             textField.enabled = enabled;
  780.             enabledChanged = false;
  781.          }
  782.          if(mx_internal::toggleChanged)
  783.          {
  784.             if(!toggle)
  785.             {
  786.                selected = false;
  787.             }
  788.             mx_internal::toggleChanged = false;
  789.          }
  790.       }
  791.       
  792.       [Bindable("dataChange")]
  793.       public function get listData() : BaseListData
  794.       {
  795.          return _listData;
  796.       }
  797.       
  798.       mx_internal function viewSkin() : void
  799.       {
  800.          var _loc1_:String = null;
  801.          if(!enabled)
  802.          {
  803.             _loc1_ = selected ? mx_internal::selectedDisabledSkinName : mx_internal::disabledSkinName;
  804.          }
  805.          else if(mx_internal::phase == ButtonPhase.UP)
  806.          {
  807.             _loc1_ = selected ? mx_internal::selectedUpSkinName : mx_internal::upSkinName;
  808.          }
  809.          else if(mx_internal::phase == ButtonPhase.OVER)
  810.          {
  811.             _loc1_ = selected ? mx_internal::selectedOverSkinName : mx_internal::overSkinName;
  812.          }
  813.          else if(mx_internal::phase == ButtonPhase.DOWN)
  814.          {
  815.             _loc1_ = selected ? mx_internal::selectedDownSkinName : mx_internal::downSkinName;
  816.          }
  817.          mx_internal::viewSkinForPhase(_loc1_);
  818.       }
  819.       
  820.       public function set label(param1:String) : void
  821.       {
  822.          labelSet = true;
  823.          if(_label != param1)
  824.          {
  825.             _label = param1;
  826.             labelChanged = true;
  827.             invalidateSize();
  828.             invalidateDisplayList();
  829.             dispatchEvent(new Event("labelChanged"));
  830.          }
  831.       }
  832.       
  833.       mx_internal function viewSkinForPhase(param1:String) : void
  834.       {
  835.          var _loc2_:IFlexDisplayObject = null;
  836.          var _loc3_:Number = NaN;
  837.          var _loc4_:Class = null;
  838.          var _loc5_:ISimpleStyleClient = null;
  839.          _loc2_ = IFlexDisplayObject(getChildByName(param1));
  840.          if(!_loc2_)
  841.          {
  842.             if(_loc4_ = Class(getStyle(param1)))
  843.             {
  844.                _loc2_ = IFlexDisplayObject(new _loc4_());
  845.                _loc2_.name = param1;
  846.                if(_loc5_ = _loc2_ as ISimpleStyleClient)
  847.                {
  848.                   _loc5_.styleName = this;
  849.                }
  850.                addChild(DisplayObject(_loc2_));
  851.                _loc2_.setActualSize(unscaledWidth,unscaledHeight);
  852.                if(_loc2_ is IInvalidating && initialized)
  853.                {
  854.                   IInvalidating(_loc2_).validateNow();
  855.                }
  856.                else if(_loc2_ is ProgrammaticSkin && initialized)
  857.                {
  858.                   ProgrammaticSkin(_loc2_).validateDisplayList();
  859.                }
  860.                skins.push(_loc2_);
  861.             }
  862.          }
  863.          if(mx_internal::currentSkin)
  864.          {
  865.             mx_internal::currentSkin.visible = false;
  866.          }
  867.          mx_internal::currentSkin = _loc2_;
  868.          if(mx_internal::currentSkin)
  869.          {
  870.             mx_internal::currentSkin.visible = true;
  871.          }
  872.          if(enabled)
  873.          {
  874.             if(mx_internal::phase == ButtonPhase.OVER)
  875.             {
  876.                _loc3_ = textField.getStyle("textRollOverColor");
  877.             }
  878.             else if(mx_internal::phase == ButtonPhase.DOWN)
  879.             {
  880.                _loc3_ = textField.getStyle("textSelectedColor");
  881.             }
  882.             else
  883.             {
  884.                _loc3_ = textField.getStyle("color");
  885.             }
  886.             textField.setColor(_loc3_);
  887.          }
  888.       }
  889.       
  890.       private function autoRepeatTimer_timerDelayHandler(param1:Event) : void
  891.       {
  892.          if(!enabled)
  893.          {
  894.             return;
  895.          }
  896.          dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
  897.          if(autoRepeat)
  898.          {
  899.             autoRepeatTimer.reset();
  900.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  901.             autoRepeatTimer.delay = getStyle("repeatInterval");
  902.             autoRepeatTimer.addEventListener(TimerEvent.TIMER,autoRepeatTimer_timerHandler);
  903.             autoRepeatTimer.start();
  904.          }
  905.       }
  906.       
  907.       protected function mouseDownHandler(param1:MouseEvent) : void
  908.       {
  909.          if(!enabled)
  910.          {
  911.             return;
  912.          }
  913.          systemManager.addEventListener(MouseEvent.MOUSE_UP,systemManager_mouseUpHandler,true);
  914.          systemManager.stage.addEventListener(Event.MOUSE_LEAVE,stage_mouseLeaveHandler);
  915.          mx_internal::buttonPressed();
  916.          param1.updateAfterEvent();
  917.       }
  918.       
  919.       override public function set enabled(param1:Boolean) : void
  920.       {
  921.          if(super.enabled == param1)
  922.          {
  923.             return;
  924.          }
  925.          super.enabled = param1;
  926.          enabledChanged = true;
  927.          invalidateProperties();
  928.          invalidateDisplayList();
  929.       }
  930.       
  931.       [Bindable("labelPlacementChanged")]
  932.       public function get labelPlacement() : String
  933.       {
  934.          return mx_internal::_labelPlacement;
  935.       }
  936.       
  937.       override public function get baselinePosition() : Number
  938.       {
  939.          var _loc1_:String = null;
  940.          var _loc2_:TextLineMetrics = null;
  941.          _loc1_ = label;
  942.          if(!_loc1_)
  943.          {
  944.             _loc1_ = "Wj";
  945.          }
  946.          validateNow();
  947.          if(!label && (labelPlacement == ButtonLabelPlacement.TOP || labelPlacement == ButtonLabelPlacement.BOTTOM))
  948.          {
  949.             _loc2_ = measureText(_loc1_);
  950.             return (measuredHeight - _loc2_.height) / 2 + _loc2_.ascent;
  951.          }
  952.          return textField.y + measureText(_loc1_).ascent;
  953.       }
  954.       
  955.       public function set toggle(param1:Boolean) : void
  956.       {
  957.          mx_internal::_toggle = param1;
  958.          mx_internal::toggleChanged = true;
  959.          invalidateProperties();
  960.          invalidateDisplayList();
  961.          dispatchEvent(new Event("toggleChanged"));
  962.       }
  963.       
  964.       public function set emphasized(param1:Boolean) : void
  965.       {
  966.          mx_internal::_emphasized = param1;
  967.          mx_internal::changeSkins();
  968.          invalidateDisplayList();
  969.       }
  970.       
  971.       [Bindable("valueCommit")]
  972.       [Bindable("click")]
  973.       public function get selected() : Boolean
  974.       {
  975.          return mx_internal::_selected;
  976.       }
  977.       
  978.       mx_internal function buttonReleased() : void
  979.       {
  980.          systemManager.removeEventListener(MouseEvent.MOUSE_UP,systemManager_mouseUpHandler,true);
  981.          systemManager.stage.removeEventListener(Event.MOUSE_LEAVE,stage_mouseLeaveHandler);
  982.          if(autoRepeatTimer)
  983.          {
  984.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerDelayHandler);
  985.             autoRepeatTimer.removeEventListener(TimerEvent.TIMER,autoRepeatTimer_timerHandler);
  986.             autoRepeatTimer.reset();
  987.          }
  988.       }
  989.       
  990.       public function set listData(param1:BaseListData) : void
  991.       {
  992.          _listData = param1;
  993.       }
  994.       
  995.       mx_internal function set phase(param1:String) : void
  996.       {
  997.          _phase = param1;
  998.          invalidateSize();
  999.          invalidateDisplayList();
  1000.       }
  1001.       
  1002.       private function stage_mouseLeaveHandler(param1:Event) : void
  1003.       {
  1004.          mx_internal::phase = ButtonPhase.UP;
  1005.          mx_internal::buttonReleased();
  1006.       }
  1007.       
  1008.       [Bindable("labelChanged")]
  1009.       public function get label() : String
  1010.       {
  1011.          return _label;
  1012.       }
  1013.       
  1014.       override protected function focusOutHandler(param1:FocusEvent) : void
  1015.       {
  1016.          super.focusOutHandler(param1);
  1017.          if(mx_internal::phase != ButtonPhase.UP)
  1018.          {
  1019.             mx_internal::phase = ButtonPhase.UP;
  1020.          }
  1021.       }
  1022.       
  1023.       override protected function createChildren() : void
  1024.       {
  1025.          super.createChildren();
  1026.          if(!textField)
  1027.          {
  1028.             textField = new UITextField();
  1029.             textField.styleName = this;
  1030.             addChild(textField);
  1031.          }
  1032.       }
  1033.       
  1034.       protected function rollOverHandler(param1:MouseEvent) : void
  1035.       {
  1036.          if(mx_internal::phase == ButtonPhase.UP)
  1037.          {
  1038.             if(param1.buttonDown)
  1039.             {
  1040.                return;
  1041.             }
  1042.             mx_internal::phase = ButtonPhase.OVER;
  1043.             param1.updateAfterEvent();
  1044.          }
  1045.          else if(mx_internal::phase == ButtonPhase.OVER)
  1046.          {
  1047.             mx_internal::phase = ButtonPhase.DOWN;
  1048.             param1.updateAfterEvent();
  1049.             if(autoRepeatTimer)
  1050.             {
  1051.                autoRepeatTimer.start();
  1052.             }
  1053.          }
  1054.       }
  1055.       
  1056.       public function set data(param1:Object) : void
  1057.       {
  1058.          var _loc2_:* = undefined;
  1059.          var _loc3_:* = undefined;
  1060.          _data = param1;
  1061.          if(Boolean(_listData) && _listData is DataGridListData)
  1062.          {
  1063.             _loc2_ = _data[DataGridListData(_listData).dataField];
  1064.             _loc3_ = "";
  1065.          }
  1066.          else if(_listData)
  1067.          {
  1068.             if(selectedField)
  1069.             {
  1070.                _loc2_ = _data[selectedField];
  1071.             }
  1072.             _loc3_ = _listData.label;
  1073.          }
  1074.          else
  1075.          {
  1076.             _loc2_ = _data;
  1077.          }
  1078.          if(_loc2_ !== undefined && !selectedSet)
  1079.          {
  1080.             selected = _loc2_ as Boolean;
  1081.             selectedSet = false;
  1082.          }
  1083.          if(_loc3_ !== undefined && !labelSet)
  1084.          {
  1085.             label = _loc3_;
  1086.             labelSet = false;
  1087.          }
  1088.          dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
  1089.       }
  1090.       
  1091.       override protected function initializeAccessibility() : void
  1092.       {
  1093.          if(Button.mx_internal::createAccessibilityImplementation != null)
  1094.          {
  1095.             Button.mx_internal::createAccessibilityImplementation(this);
  1096.          }
  1097.       }
  1098.       
  1099.       [Bindable("dataChange")]
  1100.       public function get data() : Object
  1101.       {
  1102.          if(!_data)
  1103.          {
  1104.             _data = {};
  1105.          }
  1106.          return _data;
  1107.       }
  1108.       
  1109.       [Bindable("toggleChanged")]
  1110.       public function get toggle() : Boolean
  1111.       {
  1112.          return mx_internal::_toggle;
  1113.       }
  1114.       
  1115.       override public function styleChanged(param1:String) : void
  1116.       {
  1117.          styleChangedFlag = true;
  1118.          super.styleChanged(param1);
  1119.          if(!param1 || param1 == "styleName")
  1120.          {
  1121.             mx_internal::changeSkins();
  1122.             mx_internal::changeIcons();
  1123.          }
  1124.          else if(param1.toLowerCase().indexOf("skin") != -1)
  1125.          {
  1126.             mx_internal::changeSkins();
  1127.          }
  1128.          else if(param1.toLowerCase().indexOf("icon") != -1)
  1129.          {
  1130.             mx_internal::changeIcons();
  1131.             invalidateSize();
  1132.          }
  1133.       }
  1134.       
  1135.       override public function set toolTip(param1:String) : void
  1136.       {
  1137.          super.toolTip = param1;
  1138.          if(param1)
  1139.          {
  1140.             toolTipSet = true;
  1141.          }
  1142.          else
  1143.          {
  1144.             toolTipSet = false;
  1145.             invalidateDisplayList();
  1146.          }
  1147.       }
  1148.       
  1149.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  1150.       {
  1151.          var _loc3_:int = 0;
  1152.          var _loc4_:int = 0;
  1153.          var _loc5_:IFlexDisplayObject = null;
  1154.          var _loc6_:Boolean = false;
  1155.          super.updateDisplayList(param1,param2);
  1156.          _loc3_ = int(skins.length);
  1157.          _loc4_ = 0;
  1158.          while(_loc4_ < _loc3_)
  1159.          {
  1160.             (_loc5_ = IFlexDisplayObject(skins[_loc4_])).setActualSize(param1,param2);
  1161.             _loc4_++;
  1162.          }
  1163.          mx_internal::viewSkin();
  1164.          mx_internal::viewIcon();
  1165.          if(Boolean(mx_internal::currentIcon) && mx_internal::currentIcon is IUIComponent)
  1166.          {
  1167.             IUIComponent(mx_internal::currentIcon).enabled = enabled;
  1168.          }
  1169.          mx_internal::layoutContents(param1,param2,mx_internal::phase == ButtonPhase.DOWN);
  1170.          if(oldUnscaledWidth > param1 || textField.text != label || labelChanged || styleChangedFlag)
  1171.          {
  1172.             textField.text = label;
  1173.             _loc6_ = textField.truncateToFit();
  1174.             if(!toolTipSet)
  1175.             {
  1176.                if(_loc6_)
  1177.                {
  1178.                   super.toolTip = label;
  1179.                }
  1180.                else
  1181.                {
  1182.                   super.toolTip = null;
  1183.                }
  1184.             }
  1185.             styleChangedFlag = false;
  1186.             labelChanged = false;
  1187.          }
  1188.          oldUnscaledWidth = param1;
  1189.       }
  1190.    }
  1191. }
  1192.