home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / controls / alertClasses / AlertForm.as
Encoding:
Text File  |  2010-06-23  |  11.8 KB  |  362 lines

  1. package mx.controls.alertClasses
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.events.KeyboardEvent;
  5.    import flash.events.MouseEvent;
  6.    import flash.text.TextLineMetrics;
  7.    import flash.ui.Keyboard;
  8.    import mx.controls.Alert;
  9.    import mx.controls.Button;
  10.    import mx.core.IFlexModuleFactory;
  11.    import mx.core.IFontContextComponent;
  12.    import mx.core.IUITextField;
  13.    import mx.core.UIComponent;
  14.    import mx.core.UITextField;
  15.    import mx.core.mx_internal;
  16.    import mx.events.CloseEvent;
  17.    import mx.managers.IFocusManagerContainer;
  18.    import mx.managers.ISystemManager;
  19.    import mx.managers.PopUpManager;
  20.    
  21.    use namespace mx_internal;
  22.    
  23.    public class AlertForm extends UIComponent implements IFontContextComponent
  24.    {
  25.       mx_internal static const VERSION:String = "3.5.0.12683";
  26.       
  27.       mx_internal var buttons:Array = [];
  28.       
  29.       private var icon:DisplayObject;
  30.       
  31.       mx_internal var textField:IUITextField;
  32.       
  33.       mx_internal var defaultButton:Button;
  34.       
  35.       private var textWidth:Number;
  36.       
  37.       private var defaultButtonChanged:Boolean = false;
  38.       
  39.       private var textHeight:Number;
  40.       
  41.       public function AlertForm()
  42.       {
  43.          super();
  44.          tabChildren = true;
  45.       }
  46.       
  47.       override public function styleChanged(param1:String) : void
  48.       {
  49.          var _loc2_:String = null;
  50.          var _loc3_:int = 0;
  51.          var _loc4_:int = 0;
  52.          super.styleChanged(param1);
  53.          if(!param1 || param1 == "styleName" || param1 == "buttonStyleName")
  54.          {
  55.             if(mx_internal::buttons)
  56.             {
  57.                _loc2_ = getStyle("buttonStyleName");
  58.                _loc3_ = int(mx_internal::buttons.length);
  59.                _loc4_ = 0;
  60.                while(_loc4_ < _loc3_)
  61.                {
  62.                   mx_internal::buttons[_loc4_].styleName = _loc2_;
  63.                   _loc4_++;
  64.                }
  65.             }
  66.          }
  67.       }
  68.       
  69.       public function set fontContext(param1:IFlexModuleFactory) : void
  70.       {
  71.          this.moduleFactory = param1;
  72.       }
  73.       
  74.       override protected function commitProperties() : void
  75.       {
  76.          var _loc1_:int = 0;
  77.          var _loc2_:ISystemManager = null;
  78.          super.commitProperties();
  79.          if(hasFontContextChanged() && mx_internal::textField != null)
  80.          {
  81.             _loc1_ = getChildIndex(DisplayObject(mx_internal::textField));
  82.             mx_internal::removeTextField();
  83.             mx_internal::createTextField(_loc1_);
  84.          }
  85.          if(defaultButtonChanged && Boolean(mx_internal::defaultButton))
  86.          {
  87.             defaultButtonChanged = false;
  88.             Alert(parent).defaultButton = mx_internal::defaultButton;
  89.             if(parent is IFocusManagerContainer)
  90.             {
  91.                _loc2_ = Alert(parent).systemManager;
  92.                _loc2_.activate(IFocusManagerContainer(parent));
  93.             }
  94.             mx_internal::defaultButton.setFocus();
  95.          }
  96.       }
  97.       
  98.       private function createButton(param1:String, param2:String) : Button
  99.       {
  100.          var _loc3_:Button = new Button();
  101.          _loc3_.label = param1;
  102.          _loc3_.name = param2;
  103.          var _loc4_:String = getStyle("buttonStyleName");
  104.          if(_loc4_)
  105.          {
  106.             _loc3_.styleName = _loc4_;
  107.          }
  108.          _loc3_.addEventListener(MouseEvent.CLICK,clickHandler);
  109.          _loc3_.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  110.          _loc3_.owner = parent;
  111.          addChild(_loc3_);
  112.          _loc3_.setActualSize(Alert.buttonWidth,Alert.buttonHeight);
  113.          mx_internal::buttons.push(_loc3_);
  114.          return _loc3_;
  115.       }
  116.       
  117.       override protected function resourcesChanged() : void
  118.       {
  119.          var _loc1_:Button = null;
  120.          super.resourcesChanged();
  121.          _loc1_ = Button(getChildByName("OK"));
  122.          if(_loc1_)
  123.          {
  124.             _loc1_.label = String(Alert.okLabel);
  125.          }
  126.          _loc1_ = Button(getChildByName("CANCEL"));
  127.          if(_loc1_)
  128.          {
  129.             _loc1_.label = String(Alert.cancelLabel);
  130.          }
  131.          _loc1_ = Button(getChildByName("YES"));
  132.          if(_loc1_)
  133.          {
  134.             _loc1_.label = String(Alert.yesLabel);
  135.          }
  136.          _loc1_ = Button(getChildByName("NO"));
  137.          if(_loc1_)
  138.          {
  139.             _loc1_.label = String(Alert.noLabel);
  140.          }
  141.       }
  142.       
  143.       override protected function createChildren() : void
  144.       {
  145.          var _loc5_:String = null;
  146.          var _loc6_:Button = null;
  147.          super.createChildren();
  148.          mx_internal::createTextField(-1);
  149.          var _loc1_:Class = Alert(parent).iconClass;
  150.          if(Boolean(_loc1_) && !icon)
  151.          {
  152.             icon = new _loc1_();
  153.             addChild(icon);
  154.          }
  155.          var _loc2_:Alert = Alert(parent);
  156.          var _loc3_:uint = _loc2_.buttonFlags;
  157.          var _loc4_:uint = _loc2_.defaultButtonFlag;
  158.          if(_loc3_ & Alert.OK)
  159.          {
  160.             _loc5_ = String(Alert.okLabel);
  161.             _loc6_ = createButton(_loc5_,"OK");
  162.             if(_loc4_ == Alert.OK)
  163.             {
  164.                mx_internal::defaultButton = _loc6_;
  165.             }
  166.          }
  167.          if(_loc3_ & Alert.YES)
  168.          {
  169.             _loc5_ = String(Alert.yesLabel);
  170.             _loc6_ = createButton(_loc5_,"YES");
  171.             if(_loc4_ == Alert.YES)
  172.             {
  173.                mx_internal::defaultButton = _loc6_;
  174.             }
  175.          }
  176.          if(_loc3_ & Alert.NO)
  177.          {
  178.             _loc5_ = String(Alert.noLabel);
  179.             _loc6_ = createButton(_loc5_,"NO");
  180.             if(_loc4_ == Alert.NO)
  181.             {
  182.                mx_internal::defaultButton = _loc6_;
  183.             }
  184.          }
  185.          if(_loc3_ & Alert.CANCEL)
  186.          {
  187.             _loc5_ = String(Alert.cancelLabel);
  188.             _loc6_ = createButton(_loc5_,"CANCEL");
  189.             if(_loc4_ == Alert.CANCEL)
  190.             {
  191.                mx_internal::defaultButton = _loc6_;
  192.             }
  193.          }
  194.          if(!mx_internal::defaultButton && Boolean(mx_internal::buttons.length))
  195.          {
  196.             mx_internal::defaultButton = mx_internal::buttons[0];
  197.          }
  198.          if(mx_internal::defaultButton)
  199.          {
  200.             defaultButtonChanged = true;
  201.             invalidateProperties();
  202.          }
  203.       }
  204.       
  205.       override protected function measure() : void
  206.       {
  207.          super.measure();
  208.          var _loc1_:String = Alert(parent).title;
  209.          var _loc2_:TextLineMetrics = Alert(parent).mx_internal::getTitleTextField().getUITextFormat().measureText(_loc1_);
  210.          var _loc3_:int = Math.max(mx_internal::buttons.length,2);
  211.          var _loc4_:Number = _loc3_ * mx_internal::buttons[0].width + (_loc3_ - 1) * 8;
  212.          var _loc5_:Number = Math.max(_loc4_,_loc2_.width);
  213.          mx_internal::textField.width = 2 * _loc5_;
  214.          textWidth = mx_internal::textField.textWidth + UITextField.mx_internal::TEXT_WIDTH_PADDING;
  215.          var _loc6_:Number = Math.max(_loc5_,textWidth);
  216.          _loc6_ = Math.min(_loc6_,2 * _loc5_);
  217.          if(textWidth < _loc6_ && mx_internal::textField.multiline == true)
  218.          {
  219.             mx_internal::textField.multiline = false;
  220.             mx_internal::textField.wordWrap = false;
  221.          }
  222.          else if(mx_internal::textField.multiline == false)
  223.          {
  224.             mx_internal::textField.wordWrap = true;
  225.             mx_internal::textField.multiline = true;
  226.          }
  227.          _loc6_ += 16;
  228.          if(icon)
  229.          {
  230.             _loc6_ += icon.width + 8;
  231.          }
  232.          textHeight = mx_internal::textField.textHeight + UITextField.mx_internal::TEXT_HEIGHT_PADDING;
  233.          var _loc7_:Number = textHeight;
  234.          if(icon)
  235.          {
  236.             _loc7_ = Math.max(_loc7_,icon.height);
  237.          }
  238.          _loc7_ = Math.min(_loc7_,screen.height * 0.75);
  239.          _loc7_ = _loc7_ + (mx_internal::buttons[0].height + 3 * 8);
  240.          measuredWidth = _loc6_;
  241.          measuredHeight = _loc7_;
  242.       }
  243.       
  244.       public function get fontContext() : IFlexModuleFactory
  245.       {
  246.          return moduleFactory;
  247.       }
  248.       
  249.       private function clickHandler(param1:MouseEvent) : void
  250.       {
  251.          var _loc2_:String = Button(param1.currentTarget).name;
  252.          removeAlert(_loc2_);
  253.       }
  254.       
  255.       mx_internal function removeTextField() : void
  256.       {
  257.          if(mx_internal::textField)
  258.          {
  259.             removeChild(DisplayObject(mx_internal::textField));
  260.             mx_internal::textField = null;
  261.          }
  262.       }
  263.       
  264.       override protected function keyDownHandler(param1:KeyboardEvent) : void
  265.       {
  266.          var _loc2_:uint = Alert(parent).buttonFlags;
  267.          if(param1.keyCode == Keyboard.ESCAPE)
  268.          {
  269.             if(Boolean(_loc2_ & Alert.CANCEL) || !(_loc2_ & Alert.NO))
  270.             {
  271.                removeAlert("CANCEL");
  272.             }
  273.             else if(_loc2_ & Alert.NO)
  274.             {
  275.                removeAlert("NO");
  276.             }
  277.          }
  278.       }
  279.       
  280.       mx_internal function createTextField(param1:int) : void
  281.       {
  282.          if(!mx_internal::textField)
  283.          {
  284.             mx_internal::textField = IUITextField(createInFontContext(UITextField));
  285.             mx_internal::textField.styleName = this;
  286.             mx_internal::textField.text = Alert(parent).text;
  287.             mx_internal::textField.multiline = true;
  288.             mx_internal::textField.wordWrap = true;
  289.             mx_internal::textField.selectable = true;
  290.             if(param1 == -1)
  291.             {
  292.                addChild(DisplayObject(mx_internal::textField));
  293.             }
  294.             else
  295.             {
  296.                addChildAt(DisplayObject(mx_internal::textField),param1);
  297.             }
  298.          }
  299.       }
  300.       
  301.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  302.       {
  303.          var _loc3_:Number = NaN;
  304.          var _loc4_:Number = NaN;
  305.          var _loc5_:Number = NaN;
  306.          super.updateDisplayList(param1,param2);
  307.          _loc4_ = param2 - mx_internal::buttons[0].height;
  308.          _loc5_ = mx_internal::buttons.length * (mx_internal::buttons[0].width + 8) - 8;
  309.          _loc3_ = (param1 - _loc5_) / 2;
  310.          var _loc6_:int = 0;
  311.          while(_loc6_ < mx_internal::buttons.length)
  312.          {
  313.             mx_internal::buttons[_loc6_].move(_loc3_,_loc4_);
  314.             mx_internal::buttons[_loc6_].tabIndex = _loc6_ + 1;
  315.             _loc3_ += mx_internal::buttons[_loc6_].width + 8;
  316.             _loc6_++;
  317.          }
  318.          _loc5_ = textWidth;
  319.          if(icon)
  320.          {
  321.             _loc5_ += icon.width + 8;
  322.          }
  323.          _loc3_ = (param1 - _loc5_) / 2;
  324.          if(icon)
  325.          {
  326.             icon.x = _loc3_;
  327.             icon.y = (_loc4_ - icon.height) / 2;
  328.             _loc3_ += icon.width + 8;
  329.          }
  330.          var _loc7_:Number = Number(mx_internal::textField.getExplicitOrMeasuredHeight());
  331.          mx_internal::textField.move(_loc3_,(_loc4_ - _loc7_) / 2);
  332.          mx_internal::textField.setActualSize(textWidth + 5,_loc7_);
  333.       }
  334.       
  335.       private function removeAlert(param1:String) : void
  336.       {
  337.          var _loc2_:Alert = Alert(parent);
  338.          _loc2_.visible = false;
  339.          var _loc3_:CloseEvent = new CloseEvent(CloseEvent.CLOSE);
  340.          if(param1 == "YES")
  341.          {
  342.             _loc3_.detail = Alert.YES;
  343.          }
  344.          else if(param1 == "NO")
  345.          {
  346.             _loc3_.detail = Alert.NO;
  347.          }
  348.          else if(param1 == "OK")
  349.          {
  350.             _loc3_.detail = Alert.OK;
  351.          }
  352.          else if(param1 == "CANCEL")
  353.          {
  354.             _loc3_.detail = Alert.CANCEL;
  355.          }
  356.          _loc2_.dispatchEvent(_loc3_);
  357.          PopUpManager.removePopUp(_loc2_);
  358.       }
  359.    }
  360. }
  361.  
  362.