Updated Branches:
  refs/heads/develop eb3bcdb05 -> 457e2db51

Added IFactory and ClassFactory. Added itemRenderer property to List component.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/74b671af
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/74b671af
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/74b671af

Branch: refs/heads/develop
Commit: 74b671af714fc5a548cc0913166f606e4ff62073
Parents: eb3bcdb
Author: Peter Ent <[email protected]>
Authored: Wed Jan 8 14:06:30 2014 -0500
Committer: Peter Ent <[email protected]>
Committed: Wed Jan 8 14:06:30 2014 -0500

----------------------------------------------------------------------
 .../as/projects/FlexJSUI/src/FlexJSUIClasses.as |  1 +
 .../FlexJSUI/src/mx/core/ClassFactory.as        | 47 ++++++++++++++++++++
 .../projects/FlexJSUI/src/mx/core/IFactory.as   | 25 +++++++++++
 .../flex/core/ItemRendererClassFactory.as       | 23 ++++++++--
 .../org/apache/flex/html/staticControls/List.as | 12 +++++
 .../js/FlexJS/src/mx/core/ClassFactory.js       | 47 ++++++++++++++++++++
 frameworks/js/FlexJS/src/mx/core/IFactory.js    | 45 +++++++++++++++++++
 7 files changed, 196 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/as/projects/FlexJSUI/src/FlexJSUIClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSUI/src/FlexJSUIClasses.as 
b/frameworks/as/projects/FlexJSUI/src/FlexJSUIClasses.as
index 829c091..22fa85d 100644
--- a/frameworks/as/projects/FlexJSUI/src/FlexJSUIClasses.as
+++ b/frameworks/as/projects/FlexJSUI/src/FlexJSUIClasses.as
@@ -101,6 +101,7 @@ internal class FlexJSUIClasses
        import org.apache.flex.utils.Timer; Timer;
     import org.apache.flex.core.SimpleStatesImpl; SimpleStatesImpl;
     
+       import mx.core.ClassFactory; ClassFactory;
     import mx.states.AddItems; AddItems;
     import mx.states.SetProperty; SetProperty;
     import mx.states.State; State;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/as/projects/FlexJSUI/src/mx/core/ClassFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSUI/src/mx/core/ClassFactory.as 
b/frameworks/as/projects/FlexJSUI/src/mx/core/ClassFactory.as
new file mode 100644
index 0000000..7287a7a
--- /dev/null
+++ b/frameworks/as/projects/FlexJSUI/src/mx/core/ClassFactory.as
@@ -0,0 +1,47 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package mx.core
+{
+       import mx.core.IFactory;
+       
+       public class ClassFactory implements IFactory
+       {
+               public var generator:Class;
+               public var properties:Object;
+               
+               public function ClassFactory(generator:Class=null)
+               {
+                       this.generator = generator;
+               }
+               
+               public function newInstance():*
+               {
+                       var obj:* = new generator();
+                       
+                       if (properties) {
+                               for (var prop:String in properties) {
+                                       obj[prop] = properties[prop];
+                               }
+                       }
+                       
+                       return obj;
+               }
+       }
+}
+

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/as/projects/FlexJSUI/src/mx/core/IFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSUI/src/mx/core/IFactory.as 
b/frameworks/as/projects/FlexJSUI/src/mx/core/IFactory.as
new file mode 100644
index 0000000..492a530
--- /dev/null
+++ b/frameworks/as/projects/FlexJSUI/src/mx/core/IFactory.as
@@ -0,0 +1,25 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package mx.core
+{
+       public interface IFactory
+       {
+               function newInstance():*;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ItemRendererClassFactory.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ItemRendererClassFactory.as
 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ItemRendererClassFactory.as
index 0dc1959..e561d38 100644
--- 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ItemRendererClassFactory.as
+++ 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ItemRendererClassFactory.as
@@ -21,6 +21,8 @@ package org.apache.flex.core
     import flash.display.DisplayObject;
     import flash.display.DisplayObjectContainer;
     
+    import mx.core.ClassFactory;
+    
     import org.apache.flex.utils.MXMLDataInterpreter;
 
        [DefaultProperty("mxmlContent")]
@@ -36,9 +38,22 @@ package org.apache.flex.core
         public function set strand(value:IStrand):void
         {
             _strand = value;
-            itemRendererClass = ValuesManager.valuesImpl.getValue(_strand, 
"iItemRenderer") as Class;
-            if (itemRendererClass)
+                       
+                       // see if the _strand has an itemRenderer property that 
isn't empty. if that's
+                       // true, use that value instead of pulling it from the 
the style
+                       if (Object(_strand).hasOwnProperty("itemRenderer")) {
+                               itemRendererClassFactory = 
Object(_strand)["itemRenderer"] as ClassFactory;
+                               if (itemRendererClassFactory) {
+                                       createFunction = createFromClass;
+                                       return;
+                               }
+                       }
+                       
+            var itemRendererClass:Class = 
ValuesManager.valuesImpl.getValue(_strand, "iItemRenderer") as Class;
+            if (itemRendererClass) {
+                               itemRendererClassFactory = new 
ClassFactory(itemRendererClass);
                 createFunction = createFromClass;
+                       }
         }
 
                public function get MXMLDescriptor():Array
@@ -65,11 +80,11 @@ package org.apache.flex.core
             return MXMLDataInterpreter.generateMXMLArray(document, parent as 
IParent, MXMLDescriptor, true)[0];
         }
         
-        public var itemRendererClass:Class;
+        public var itemRendererClassFactory:ClassFactory;
         
         public function 
createFromClass(parent:IItemRendererParent):IItemRenderer
         {
-            var renderer:IItemRenderer = new itemRendererClass();
+            var renderer:IItemRenderer = 
itemRendererClassFactory.newInstance();
             parent.addElement(renderer);
             return renderer;
         }

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/staticControls/List.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/staticControls/List.as
 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/staticControls/List.as
index c44101e..a74d65a 100644
--- 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/staticControls/List.as
+++ 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/staticControls/List.as
@@ -18,6 +18,8 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html.staticControls
 {
+       import mx.core.IFactory;
+       
        import org.apache.flex.core.IDataProviderItemRendererMapper;
        import org.apache.flex.core.IRollOverModel;
        import org.apache.flex.core.ISelectionModel;
@@ -76,6 +78,16 @@ package org.apache.flex.html.staticControls
                        ISelectionModel(model).selectedItem = value;
                }
                
+               private var _itemRenderer:IFactory;
+               public function get itemRenderer():IFactory
+               {
+                       return _itemRenderer;
+               }
+               public function set itemRenderer(value:IFactory):void
+               {
+                       _itemRenderer = value;
+               }
+               
                override public function addedToParent():void
                {
             super.addedToParent();

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/js/FlexJS/src/mx/core/ClassFactory.js
----------------------------------------------------------------------
diff --git a/frameworks/js/FlexJS/src/mx/core/ClassFactory.js 
b/frameworks/js/FlexJS/src/mx/core/ClassFactory.js
new file mode 100644
index 0000000..f87f327
--- /dev/null
+++ b/frameworks/js/FlexJS/src/mx/core/ClassFactory.js
@@ -0,0 +1,47 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+goog.provide('mx.core.ClassFactory');
+
+goog.require('mx.core.IFactory');
+
+
+
+/**
+ * @constructor
+ * @implements {mx.core.IFactory}
+ */
+mx.core.ClassFactory = function() {
+  this.generator = null;
+  this.properties = null;
+};
+
+
+/**
+ * @expose
+ * @return {Object} The new instance of the class described by generator.
+ */
+mx.core.ClassFactory.
+    prototype.newInstance = function() {
+  var obj = new generator();
+
+  if (properties) {
+    var prop;
+    for each(prop in properties) {
+      obj[prop] = properties[prop];
+    }
+  }
+
+  return obj;
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/74b671af/frameworks/js/FlexJS/src/mx/core/IFactory.js
----------------------------------------------------------------------
diff --git a/frameworks/js/FlexJS/src/mx/core/IFactory.js 
b/frameworks/js/FlexJS/src/mx/core/IFactory.js
new file mode 100644
index 0000000..d74f47f
--- /dev/null
+++ b/frameworks/js/FlexJS/src/mx/core/IFactory.js
@@ -0,0 +1,45 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * @suppress {checkTypes}
+ */
+
+goog.provide('mx.core.IFactory');
+
+
+
+/**
+ * @interface
+ */
+mx.core.IFactory = function() {
+};
+
+
+/**
+ * @expose
+ * @return {Object} A new instance of the itemRenderer.
+ */
+mx.core.IFactory.prototype.newInstance = function() {};
+
+
+/**
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+mx.core.IFactory.prototype.FLEXJS_CLASS_INFO =
+    { names: [{ name: 'IFactory',
+                qName: 'mx.core.IFactory' }] };
\ No newline at end of file

Reply via email to