home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / binding / BindabilityInfo.as next >
Encoding:
Text File  |  2010-06-23  |  4.0 KB  |  122 lines

  1. package mx.binding
  2. {
  3.    import mx.core.mx_internal;
  4.    import mx.events.PropertyChangeEvent;
  5.    
  6.    use namespace mx_internal;
  7.    
  8.    public class BindabilityInfo
  9.    {
  10.       mx_internal static const VERSION:String = "3.5.0.12683";
  11.       
  12.       public static const BINDABLE:String = "Bindable";
  13.       
  14.       public static const MANAGED:String = "Managed";
  15.       
  16.       public static const CHANGE_EVENT:String = "ChangeEvent";
  17.       
  18.       public static const NON_COMMITTING_CHANGE_EVENT:String = "NonCommittingChangeEvent";
  19.       
  20.       public static const ACCESSOR:String = "accessor";
  21.       
  22.       public static const METHOD:String = "method";
  23.       
  24.       private var classChangeEvents:Object;
  25.       
  26.       private var typeDescription:XML;
  27.       
  28.       private var childChangeEvents:Object = {};
  29.       
  30.       public function BindabilityInfo(param1:XML)
  31.       {
  32.          super();
  33.          this.typeDescription = param1;
  34.       }
  35.       
  36.       private function addChangeEvents(param1:XMLList, param2:Object, param3:Boolean) : void
  37.       {
  38.          var _loc4_:XML = null;
  39.          var _loc5_:XMLList = null;
  40.          var _loc6_:String = null;
  41.          for each(_loc4_ in param1)
  42.          {
  43.             _loc5_ = _loc4_.arg;
  44.             if(_loc5_.length() > 0)
  45.             {
  46.                _loc6_ = _loc5_[0].@value;
  47.                param2[_loc6_] = param3;
  48.             }
  49.             else
  50.             {
  51.                trace("warning: unconverted Bindable metadata in class \'" + typeDescription.@name + "\'");
  52.             }
  53.          }
  54.       }
  55.       
  56.       private function getClassChangeEvents() : Object
  57.       {
  58.          if(!classChangeEvents)
  59.          {
  60.             classChangeEvents = {};
  61.             addBindabilityEvents(typeDescription.metadata,classChangeEvents);
  62.             if(typeDescription.metadata.(@name == MANAGED).length() > 0)
  63.             {
  64.                classChangeEvents[PropertyChangeEvent.PROPERTY_CHANGE] = true;
  65.             }
  66.          }
  67.          return classChangeEvents;
  68.       }
  69.       
  70.       private function addBindabilityEvents(param1:XMLList, param2:Object) : void
  71.       {
  72.          var metadata:XMLList = param1;
  73.          var eventListObj:Object = param2;
  74.          addChangeEvents(metadata.(@name == BINDABLE),eventListObj,true);
  75.          addChangeEvents(metadata.(@name == CHANGE_EVENT),eventListObj,true);
  76.          addChangeEvents(metadata.(@name == NON_COMMITTING_CHANGE_EVENT),eventListObj,false);
  77.       }
  78.       
  79.       private function copyProps(param1:Object, param2:Object) : Object
  80.       {
  81.          var _loc3_:String = null;
  82.          for(_loc3_ in param1)
  83.          {
  84.             param2[_loc3_] = param1[_loc3_];
  85.          }
  86.          return param2;
  87.       }
  88.       
  89.       public function getChangeEvents(param1:String) : Object
  90.       {
  91.          var childDesc:XMLList = null;
  92.          var numChildren:int = 0;
  93.          var childName:String = param1;
  94.          var changeEvents:Object = childChangeEvents[childName];
  95.          if(!changeEvents)
  96.          {
  97.             changeEvents = copyProps(getClassChangeEvents(),{});
  98.             childDesc = typeDescription.accessor.(@name == childName) + typeDescription.method.(@name == childName);
  99.             numChildren = int(childDesc.length());
  100.             if(numChildren == 0)
  101.             {
  102.                if(!typeDescription.@dynamic)
  103.                {
  104.                   trace("warning: no describeType entry for \'" + childName + "\' on non-dynamic type \'" + typeDescription.@name + "\'");
  105.                }
  106.             }
  107.             else
  108.             {
  109.                if(numChildren > 1)
  110.                {
  111.                   trace("warning: multiple describeType entries for \'" + childName + "\' on type \'" + typeDescription.@name + "\':\n" + childDesc);
  112.                }
  113.                addBindabilityEvents(childDesc.metadata,changeEvents);
  114.             }
  115.             childChangeEvents[childName] = changeEvents;
  116.          }
  117.          return changeEvents;
  118.       }
  119.    }
  120. }
  121.  
  122.