home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2012 April / ME_04_2012.iso / Video-Tutorial / iPhoto / media / player.swf / scripts / mx / accessibility / AccImpl.as < prev    next >
Encoding:
Text File  |  2011-11-11  |  14.1 KB  |  433 lines

  1. package mx.accessibility
  2. {
  3.    import flash.accessibility.Accessibility;
  4.    import flash.accessibility.AccessibilityImplementation;
  5.    import flash.accessibility.AccessibilityProperties;
  6.    import flash.display.DisplayObject;
  7.    import flash.events.Event;
  8.    import flash.system.ApplicationDomain;
  9.    import mx.core.IFlexModuleFactory;
  10.    import mx.core.UIComponent;
  11.    import mx.core.mx_internal;
  12.    import mx.managers.ISystemManager;
  13.    import mx.resources.IResourceManager;
  14.    import mx.resources.ResourceManager;
  15.    
  16.    use namespace mx_internal;
  17.    
  18.    public class AccImpl extends AccessibilityImplementation
  19.    {
  20.       mx_internal static const VERSION:String = "4.5.0.20967";
  21.       
  22.       private static var typeMap:Object = {
  23.          "Container":["spark.components.SkinnableContainer","mx.core.Container"],
  24.          "Form":["spark.components.Form","mx.containers.Form"],
  25.          "FormHeading":["spark.components.FormHeading","mx.containers.FormHeading"],
  26.          "FormItem":["spark.components.FormItem","mx.containers.FormItem"],
  27.          "FormItemLabel":["mx.controls.FormItemLabel"],
  28.          "ScrollBar":["mx.controls.scrollClasses.ScrollBar","spark.components.supportClasses.ScrollBarBase"]
  29.       };
  30.       
  31.       protected var master:UIComponent;
  32.       
  33.       protected var role:uint;
  34.       
  35.       public function AccImpl(param1:UIComponent)
  36.       {
  37.          var _loc3_:int = 0;
  38.          var _loc4_:int = 0;
  39.          super();
  40.          this.master = param1;
  41.          stub = false;
  42.          if(!param1.accessibilityProperties)
  43.          {
  44.             param1.accessibilityProperties = new AccessibilityProperties();
  45.          }
  46.          var _loc2_:Array = this.eventsToHandle;
  47.          if(_loc2_)
  48.          {
  49.             _loc3_ = int(_loc2_.length);
  50.             _loc4_ = 0;
  51.             while(_loc4_ < _loc3_)
  52.             {
  53.                param1.addEventListener(_loc2_[_loc4_],this.eventHandler);
  54.                _loc4_++;
  55.             }
  56.          }
  57.       }
  58.       
  59.       mx_internal static function getDefinition(param1:String, param2:IFlexModuleFactory) : Object
  60.       {
  61.          var _loc3_:ApplicationDomain = null;
  62.          if(param2)
  63.          {
  64.             _loc3_ = param2.info()["currentDomain"];
  65.          }
  66.          else
  67.          {
  68.             _loc3_ = ApplicationDomain.currentDomain;
  69.          }
  70.          if(_loc3_.hasDefinition(param1))
  71.          {
  72.             return _loc3_.getDefinition(param1);
  73.          }
  74.          return null;
  75.       }
  76.       
  77.       mx_internal static function getDefinitions(param1:String, param2:IFlexModuleFactory) : Array
  78.       {
  79.          var _loc4_:Class = null;
  80.          var _loc5_:String = null;
  81.          var _loc3_:Array = [];
  82.          for each(_loc5_ in typeMap[param1])
  83.          {
  84.             _loc4_ = Class(mx_internal::getDefinition(_loc5_,param2));
  85.             if(_loc4_)
  86.             {
  87.                _loc3_.push(_loc4_);
  88.             }
  89.          }
  90.          return _loc3_;
  91.       }
  92.       
  93.       mx_internal static function getMatchingDefinition(param1:Object, param2:Array) : Class
  94.       {
  95.          var _loc3_:Class = null;
  96.          if(!param1)
  97.          {
  98.             return null;
  99.          }
  100.          for each(_loc3_ in param2)
  101.          {
  102.             if(param1 is _loc3_)
  103.             {
  104.                return _loc3_;
  105.             }
  106.          }
  107.          return null;
  108.       }
  109.       
  110.       mx_internal static function findMatchingAncestor(param1:Object, param2:Function) : UIComponent
  111.       {
  112.          while(param1 && param1 is UIComponent && !(param1 is ISystemManager) && param1 != UIComponent(param1).root)
  113.          {
  114.             if(param2(param1))
  115.             {
  116.                return UIComponent(param1);
  117.             }
  118.             param1 = UIComponent(param1).parent;
  119.          }
  120.          return null;
  121.       }
  122.       
  123.       public static function isAncestorDisabled(param1:UIComponent) : Boolean
  124.       {
  125.          return mx_internal::findMatchingAncestor(param1.parent,mx_internal::isComponentDisabled) != null;
  126.       }
  127.       
  128.       mx_internal static function isComponentDisabled(param1:UIComponent) : Boolean
  129.       {
  130.          return !param1.enabled;
  131.       }
  132.       
  133.       mx_internal static function isForm(param1:UIComponent) : Boolean
  134.       {
  135.          var _loc2_:Array = mx_internal::getDefinitions("Form",param1.moduleFactory);
  136.          return mx_internal::getMatchingDefinition(param1,_loc2_) != null;
  137.       }
  138.       
  139.       mx_internal static function isFormHeading(param1:UIComponent) : Boolean
  140.       {
  141.          var _loc2_:Array = mx_internal::getDefinitions("FormHeading",param1.moduleFactory);
  142.          return mx_internal::getMatchingDefinition(param1,_loc2_) != null;
  143.       }
  144.       
  145.       mx_internal static function isFormItem(param1:UIComponent) : Boolean
  146.       {
  147.          var _loc2_:Array = mx_internal::getDefinitions("FormItem",param1.moduleFactory);
  148.          return mx_internal::getMatchingDefinition(param1,_loc2_) != null;
  149.       }
  150.       
  151.       public static function getFormName(param1:UIComponent) : String
  152.       {
  153.          if(mx_internal::getMatchingDefinition(param1,mx_internal::getDefinitions("Container",param1.moduleFactory)))
  154.          {
  155.             return "";
  156.          }
  157.          var _loc2_:UIComponent = mx_internal::findMatchingAncestor(param1.parent,mx_internal::isFormItem);
  158.          if(!_loc2_)
  159.          {
  160.             return "";
  161.          }
  162.          return determineFormItemString(_loc2_);
  163.       }
  164.       
  165.       private static function joinWithSpace(param1:String, param2:String) : String
  166.       {
  167.          if(param1 == " ")
  168.          {
  169.             param1 = "";
  170.          }
  171.          if(param2 == " ")
  172.          {
  173.             param2 = "";
  174.          }
  175.          if(Boolean(param1) && Boolean(param2))
  176.          {
  177.             param1 += " " + param2;
  178.          }
  179.          else if(param2)
  180.          {
  181.             param1 = param2;
  182.          }
  183.          return param1;
  184.       }
  185.       
  186.       private static function determineFormItemString(param1:Object) : String
  187.       {
  188.          var _loc6_:Array = null;
  189.          var _loc7_:int = 0;
  190.          var _loc8_:int = 0;
  191.          var _loc9_:UIComponent = null;
  192.          var _loc10_:Class = null;
  193.          var _loc2_:String = "";
  194.          var _loc3_:IResourceManager = ResourceManager.getInstance();
  195.          var _loc4_:UIComponent = UIComponent(param1.parent);
  196.          if(mx_internal::findMatchingAncestor(_loc4_,mx_internal::isForm))
  197.          {
  198.             _loc6_ = mx_internal::getDefinitions("FormHeading",param1.moduleFactory);
  199.             _loc8_ = _loc7_ = _loc4_.getChildIndex(DisplayObject(param1));
  200.             while(_loc8_ >= 0)
  201.             {
  202.                _loc9_ = UIComponent(_loc4_.getChildAt(_loc8_));
  203.                _loc10_ = mx_internal::getMatchingDefinition(_loc9_,_loc6_);
  204.                if(_loc10_)
  205.                {
  206.                   if(_loc10_(_loc9_).accessibilityProperties)
  207.                   {
  208.                      _loc2_ = _loc10_(_loc9_).accessibilityProperties.name;
  209.                   }
  210.                   if(_loc2_ == "")
  211.                   {
  212.                      _loc2_ = _loc10_(_loc9_).label;
  213.                   }
  214.                   break;
  215.                }
  216.                _loc8_--;
  217.             }
  218.          }
  219.          if(param1.required)
  220.          {
  221.             _loc2_ = joinWithSpace(_loc2_,_loc3_.getString("controls","requiredField"));
  222.          }
  223.          var _loc5_:String = "";
  224.          if(param1.accessibilityProperties)
  225.          {
  226.             _loc5_ = param1.accessibilityProperties.name;
  227.          }
  228.          if(_loc5_ == "")
  229.          {
  230.             _loc5_ = param1.label;
  231.          }
  232.          _loc2_ = joinWithSpace(_loc2_,_loc5_);
  233.          try
  234.          {
  235.             if(Boolean(param1.labelDisplay) && Boolean(param1.labelDisplay.accessibilityEnabled))
  236.             {
  237.                param1.labelDisplay.accessibilityEnabled = false;
  238.             }
  239.          }
  240.          catch(e:Error)
  241.          {
  242.          }
  243.          try
  244.          {
  245.             if(Boolean(param1.sequenceLabelDisplay) && Boolean(param1.sequenceLabelDisplay.accessibilityEnabled))
  246.             {
  247.                param1.sequenceLabelDisplay.accessibilityEnabled = false;
  248.             }
  249.          }
  250.          catch(e:Error)
  251.          {
  252.          }
  253.          try
  254.          {
  255.             if(Boolean(param1.helpContentGroup) && Boolean(param1.helpContentGroup.accessibilityEnabled))
  256.             {
  257.                param1.helpContentGroup.accessibilityEnabled = false;
  258.             }
  259.          }
  260.          catch(e:Error)
  261.          {
  262.          }
  263.          try
  264.          {
  265.             if(Boolean(param1.errorTextDisplay) && Boolean(param1.errorTextDisplay.accessibilityEnabled))
  266.             {
  267.                param1.errorTextDisplay.accessibilityEnabled = false;
  268.             }
  269.          }
  270.          catch(e:Error)
  271.          {
  272.          }
  273.          try
  274.          {
  275.             if(Boolean(param1.itemLabel) && Boolean(param1.itemLabel.accessibilityEnabled))
  276.             {
  277.                param1.itemLabel.accessibilityEnabled = false;
  278.             }
  279.          }
  280.          catch(e:Error)
  281.          {
  282.          }
  283.          return _loc2_;
  284.       }
  285.       
  286.       private static function componentNeedsSkinnableTextBaseException(param1:UIComponent) : Boolean
  287.       {
  288.          var richEditableTextClass:Class;
  289.          var skinnableTextBaseClass:Class;
  290.          var sharesMyAccessibilityProperties:Function;
  291.          var matchingAncestor:UIComponent;
  292.          var myAccessibilityProperties:Object = null;
  293.          var component:UIComponent = param1;
  294.          myAccessibilityProperties = component.accessibilityProperties;
  295.          if(!myAccessibilityProperties)
  296.          {
  297.             return false;
  298.          }
  299.          richEditableTextClass = Class(mx_internal::getDefinition("spark.components.RichEditableText",component.moduleFactory));
  300.          if(!richEditableTextClass || !(component is richEditableTextClass))
  301.          {
  302.             return false;
  303.          }
  304.          skinnableTextBaseClass = Class(mx_internal::getDefinition("spark.components.supportClasses.SkinnableTextBase",component.moduleFactory));
  305.          if(!skinnableTextBaseClass)
  306.          {
  307.             return false;
  308.          }
  309.          sharesMyAccessibilityProperties = function(param1:UIComponent):Boolean
  310.          {
  311.             return param1.accessibilityProperties === myAccessibilityProperties;
  312.          };
  313.          matchingAncestor = mx_internal::findMatchingAncestor(component.parent,sharesMyAccessibilityProperties);
  314.          if(!matchingAncestor)
  315.          {
  316.             return false;
  317.          }
  318.          return matchingAncestor is skinnableTextBaseClass;
  319.       }
  320.       
  321.       protected function get eventsToHandle() : Array
  322.       {
  323.          return ["errorStringChanged","toolTipChanged","show","hide"];
  324.       }
  325.       
  326.       override public function get_accRole(param1:uint) : uint
  327.       {
  328.          return this.role;
  329.       }
  330.       
  331.       override public function get_accName(param1:uint) : String
  332.       {
  333.          var _loc2_:String = null;
  334.          if(param1)
  335.          {
  336.             _loc2_ = this.getName(param1);
  337.             return _loc2_ != null && _loc2_ != "" ? _loc2_ : null;
  338.          }
  339.          _loc2_ = getFormName(this.master);
  340.          if(this.master.accessibilityProperties && this.master.accessibilityProperties.name != null && this.master.accessibilityProperties.name != "" && !componentNeedsSkinnableTextBaseException(this.master))
  341.          {
  342.             _loc2_ = joinWithSpace(_loc2_,this.master.accessibilityProperties.name);
  343.          }
  344.          else
  345.          {
  346.             _loc2_ = joinWithSpace(_loc2_,this.getName(0) || this.master.toolTip);
  347.          }
  348.          _loc2_ = joinWithSpace(_loc2_,this.getStatusName());
  349.          return _loc2_ != null && _loc2_ != "" ? _loc2_ : null;
  350.       }
  351.       
  352.       override public function getChildIDArray() : Array
  353.       {
  354.          return [];
  355.       }
  356.       
  357.       override public function accSelect(param1:uint, param2:uint) : void
  358.       {
  359.       }
  360.       
  361.       protected function getName(param1:uint) : String
  362.       {
  363.          return null;
  364.       }
  365.       
  366.       protected function getState(param1:uint) : uint
  367.       {
  368.          var _loc2_:uint = AccConst.STATE_SYSTEM_NORMAL;
  369.          if(!UIComponent(this.master).enabled || isAncestorDisabled(this.master))
  370.          {
  371.             _loc2_ &= ~AccConst.STATE_SYSTEM_FOCUSABLE;
  372.             _loc2_ |= AccConst.STATE_SYSTEM_UNAVAILABLE;
  373.          }
  374.          else
  375.          {
  376.             _loc2_ |= AccConst.STATE_SYSTEM_FOCUSABLE;
  377.             if(UIComponent(this.master) == UIComponent(this.master).getFocus() && param1 == 0)
  378.             {
  379.                _loc2_ |= AccConst.STATE_SYSTEM_FOCUSED;
  380.             }
  381.          }
  382.          return _loc2_;
  383.       }
  384.       
  385.       private function getStatusName() : String
  386.       {
  387.          var _loc1_:String = "";
  388.          if(this.master is UIComponent && Boolean(UIComponent(this.master).errorString))
  389.          {
  390.             _loc1_ = UIComponent(this.master).errorString;
  391.          }
  392.          return _loc1_;
  393.       }
  394.       
  395.       protected function createChildIDArray(param1:int) : Array
  396.       {
  397.          var _loc2_:Array = new Array(param1);
  398.          var _loc3_:int = 0;
  399.          while(_loc3_ < param1)
  400.          {
  401.             _loc2_[_loc3_] = _loc3_ + 1;
  402.             _loc3_++;
  403.          }
  404.          return _loc2_;
  405.       }
  406.       
  407.       protected function eventHandler(param1:Event) : void
  408.       {
  409.          this.$eventHandler(param1);
  410.       }
  411.       
  412.       final protected function $eventHandler(param1:Event) : void
  413.       {
  414.          switch(param1.type)
  415.          {
  416.             case "errorStringChanged":
  417.             case "toolTipChanged":
  418.                Accessibility.sendEvent(this.master,0,AccConst.EVENT_OBJECT_NAMECHANGE);
  419.                Accessibility.updateProperties();
  420.                break;
  421.             case "show":
  422.                Accessibility.sendEvent(this.master,0,AccConst.EVENT_OBJECT_SHOW);
  423.                Accessibility.updateProperties();
  424.                break;
  425.             case "hide":
  426.                Accessibility.sendEvent(this.master,0,AccConst.EVENT_OBJECT_HIDE);
  427.                Accessibility.updateProperties();
  428.          }
  429.       }
  430.    }
  431. }
  432.  
  433.