Updated Branches:
  refs/heads/develop 894c38fe2 -> 31b19d086

Updated the list controls (List and SimpleList) by adding the generic 
DataItemRendererFactoryForArrayData and DataItemRenderer. Changed List to use 
these new, more generic, classes and added style definition for SimpleList to 
use the Text versions of these classes.


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

Branch: refs/heads/develop
Commit: 31b19d086f923dd2f6990b1f5b7d0593c1b6d296
Parents: 894c38f
Author: Peter Ent <p...@apache.org>
Authored: Thu Sep 12 16:02:51 2013 -0400
Committer: Peter Ent <p...@apache.org>
Committed: Thu Sep 12 16:02:51 2013 -0400

----------------------------------------------------------------------
 frameworks/as/basic-manifest.xml                |  1 +
 frameworks/as/defaults.css                      | 17 +++-
 frameworks/as/src/FlexJSUIClasses.as            |  1 +
 .../DataItemRendererFactoryForArrayData.as      | 89 ++++++++++++++++++++
 .../flex/html/staticControls/beads/ImageView.as |  8 +-
 .../supportClasses/DataItemRenderer.as          | 50 +++++++++++
 .../supportClasses/StringItemRenderer.as        |  9 +-
 .../supportClasses/UIItemRendererBase.as        | 20 +++++
 8 files changed, 183 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/as/basic-manifest.xml b/frameworks/as/basic-manifest.xml
index 843c537..14c2c96 100644
--- a/frameworks/as/basic-manifest.xml
+++ b/frameworks/as/basic-manifest.xml
@@ -61,6 +61,7 @@
     <component id="NumericStepper" 
class="org.apache.flex.html.staticControls.NumericStepper" />
     <component id="TextFieldItemRenderer" 
class="org.apache.flex.html.staticControls.supportClasses.TextFieldItemRenderer"/>
     <component id="StringItemRenderer" 
class="org.apache.flex.html.staticControls.supportClasses.StringItemRenderer"/>
+    <component id="DataItemRenderer" 
class="org.apache.flex.html.staticControls.supportClasses.DataItemRenderer"/>
     <component id="ScrollBar" 
class="org.apache.flex.html.staticControls.supportClasses.ScrollBar"/>
     <component id="NumericOnlyTextInputBead" 
class="org.apache.flex.html.staticControls.accessories.NumericOnlyTextInputBead"
 />
     <component id="PasswordInputBead" 
class="org.apache.flex.html.staticControls.accessories.PasswordInputBead" />

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/as/defaults.css b/frameworks/as/defaults.css
index 7e5e549..cdf7584 100644
--- a/frameworks/as/defaults.css
+++ b/frameworks/as/defaults.css
@@ -137,13 +137,13 @@ Label
 
 List
 {
-       IBeadModel: 
ClassReference("org.apache.flex.html.staticControls.beads.models.ArraySelectionModel");
+    IBeadModel: 
ClassReference("org.apache.flex.html.staticControls.beads.models.ArraySelectionModel");
     IBeadView:  
ClassReference("org.apache.flex.html.staticControls.beads.ListView");           
       
     IBeadController: 
ClassReference("org.apache.flex.html.staticControls.beads.controllers.ListSingleSelectionMouseController");
     IBeadLayout: 
ClassReference("org.apache.flex.html.staticControls.beads.layouts.NonVirtualVerticalScrollingLayout");
-    IDataProviderItemRendererMapper: 
ClassReference("org.apache.flex.html.staticControls.beads.TextItemRendererFactoryForArrayData");
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.flex.html.staticControls.beads.DataItemRendererFactoryForArrayData");
     IItemRendererClassFactory: 
ClassReference("org.apache.flex.core.ItemRendererClassFactory");
-    IItemRenderer: 
ClassReference("org.apache.flex.html.staticControls.supportClasses.StringItemRenderer");
+    IItemRenderer: 
ClassReference("org.apache.flex.html.staticControls.supportClasses.DataItemRenderer");
 }
 
 NumericStepper
@@ -201,6 +201,17 @@ SimpleAlert
     border-thickness: 1;
 }
 
+SimpleList
+{
+    IBeadModel: 
ClassReference("org.apache.flex.html.staticControls.beads.models.ArraySelectionModel");
+    IBeadView:  
ClassReference("org.apache.flex.html.staticControls.beads.ListView");
+    IBeadController: 
ClassReference("org.apache.flex.html.staticControls.beads.controllers.ListSingleSelectionMouseController");
+    IBeadLayout: 
ClassReference("org.apache.flex.html.staticControls.beads.layouts.NonVirtualVerticalScrollingLayout");
+    IDataProviderItemRendererMapper: 
ClassReference("org.apache.flex.html.staticControls.beads.TextItemRendererFactoryForArrayData");
+    IItemRendererClassFactory: 
ClassReference("org.apache.flex.core.ItemRendererClassFactory");
+    IItemRenderer: 
ClassReference("org.apache.flex.html.staticControls.supportClasses.StringItemRenderer");
+}
+
 Slider
 {
     IBeadModel: 
ClassReference("org.apache.flex.html.staticControls.beads.models.RangeModel");

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/FlexJSUIClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/as/src/FlexJSUIClasses.as 
b/frameworks/as/src/FlexJSUIClasses.as
index 76d26c3..8b1b205 100644
--- a/frameworks/as/src/FlexJSUIClasses.as
+++ b/frameworks/as/src/FlexJSUIClasses.as
@@ -77,6 +77,7 @@ internal class FlexJSUIClasses
     import 
org.apache.flex.html.staticControls.beads.layouts.NonVirtualVerticalScrollingLayout;
 NonVirtualVerticalScrollingLayout;    
     import org.apache.flex.html.staticControls.beads.layouts.VScrollBarLayout; 
VScrollBarLayout;    
     import 
org.apache.flex.html.staticControls.beads.TextItemRendererFactoryForArrayData; 
TextItemRendererFactoryForArrayData;
+       import 
org.apache.flex.html.staticControls.beads.DataItemRendererFactoryForArrayData; 
DataItemRendererFactoryForArrayData;
     import org.apache.flex.core.ItemRendererClassFactory; 
ItemRendererClassFactory;    
        import org.apache.flex.events.CustomEvent; CustomEvent;
        import org.apache.flex.events.Event; Event;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataItemRendererFactoryForArrayData.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataItemRendererFactoryForArrayData.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataItemRendererFactoryForArrayData.as
new file mode 100644
index 0000000..186a77d
--- /dev/null
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataItemRendererFactoryForArrayData.as
@@ -0,0 +1,89 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.staticControls.beads
+{
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IItemRenderer;
+       import org.apache.flex.core.IItemRendererClassFactory;
+       import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.ISelectionModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.ValuesManager;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       
+       public class DataItemRendererFactoryForArrayData implements IBead, 
IDataProviderItemRendererMapper
+       {
+               public function DataItemRendererFactoryForArrayData()
+               {
+               }
+               
+               private var selectionModel:ISelectionModel;
+               
+               private var _strand:IStrand;
+               
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       selectionModel = value.getBeadByType(ISelectionModel) 
as ISelectionModel;
+                       var listView:IListView = value.getBeadByType(IListView) 
as IListView;
+                       dataGroup = listView.dataGroup;
+                       selectionModel.addEventListener("dataProviderChanged", 
dataProviderChangeHandler);
+                       
+                       if (!itemRendererFactory)
+                       {
+                               _itemRendererFactory = new 
(ValuesManager.valuesImpl.getValue(_strand, "iItemRendererClassFactory")) as 
IItemRendererClassFactory;
+                               _strand.addBead(_itemRendererFactory);
+                       }
+                       
+                       dataProviderChangeHandler(null);
+               }
+               
+               public var _itemRendererFactory:IItemRendererClassFactory;
+               
+               public function get 
itemRendererFactory():IItemRendererClassFactory
+               {
+                       return _itemRendererFactory
+               }
+               
+               public function set 
itemRendererFactory(value:IItemRendererClassFactory):void
+               {
+                       _itemRendererFactory = value;
+               }
+               
+               protected var dataGroup:IItemRendererParent;
+               
+               private function dataProviderChangeHandler(event:Event):void
+               {
+                       var dp:Array = selectionModel.dataProvider as Array;
+                       if (!dp)
+                               return;
+                       var n:int = dp.length; 
+                       for (var i:int = 0; i < n; i++)
+                       {
+                               var ir:IItemRenderer = 
itemRendererFactory.createItemRenderer(dataGroup) as IItemRenderer;
+                               ir.index = i;
+                               dataGroup.addElement(ir);
+                               ir.data = dp[i];
+                       }
+                       
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("itemsCreated"));
+               }
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageView.as 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageView.as
index bcb6044..1171e15 100644
--- a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageView.as
+++ b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ImageView.as
@@ -57,9 +57,11 @@ package org.apache.flex.html.staticControls.beads
                
                private function handleUrlChange(event:Event):void
                {
-                       loader = new Loader();
-                       
loader.contentLoaderInfo.addEventListener("complete",onComplete);
-                       loader.load(new URLRequest(_model.source));
+                       if (_model.source) {
+                               loader = new Loader();
+                               
loader.contentLoaderInfo.addEventListener("complete",onComplete);
+                               loader.load(new URLRequest(_model.source));
+                       }
                }
                
                private function onComplete(event:Object):void

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/DataItemRenderer.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/DataItemRenderer.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/DataItemRenderer.as
new file mode 100644
index 0000000..9a0a58a
--- /dev/null
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/DataItemRenderer.as
@@ -0,0 +1,50 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 org.apache.flex.html.staticControls.supportClasses
+{
+       import flash.display.Sprite;
+
+       public class DataItemRenderer extends UIItemRendererBase
+       {
+               public function DataItemRenderer()
+               {
+                       super();
+               }
+               
+               private var background:Sprite;
+               
+               override public function addedToParent():void
+               {
+                       super.addedToParent();
+                       
+                       background = new Sprite();
+                       addChild(background);
+               }
+               
+               override public function updateRenderer():void
+               {
+                       super.updateRenderer();
+                       
+                       background.graphics.clear();
+                       background.graphics.beginFill(backgroundColor, 
(down||selected||hovered)?1:0);
+                       background.graphics.drawRect(0, 0, this.width, 
this.height);
+                       background.graphics.endFill();
+               }
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/StringItemRenderer.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/StringItemRenderer.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/StringItemRenderer.as
index fdcee9f..1cef4c4 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/StringItemRenderer.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/StringItemRenderer.as
@@ -42,14 +42,11 @@ package org.apache.flex.html.staticControls.supportClasses
                        super.addedToParent();
                        
                        addChild(textField);
-                       
-                       addEventListener("widthChanged", sizeChangeHandler);
-                       addEventListener("heightChanged", sizeChangeHandler);
-                       
-                       sizeChangeHandler(null);
+
+                       adjustSize();
                }
                
-               private function sizeChangeHandler(event:Event):void
+               override public function adjustSize():void
                {
                        textField.x = 0;
                        textField.y = 0;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/31b19d08/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/UIItemRendererBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/UIItemRendererBase.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/UIItemRendererBase.as
index f32083b..5936387 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/UIItemRendererBase.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/supportClasses/UIItemRendererBase.as
@@ -20,6 +20,7 @@ package org.apache.flex.html.staticControls.supportClasses
 {
        import org.apache.flex.core.IItemRenderer;
        import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
        
        public class UIItemRendererBase extends UIBase implements IItemRenderer
        {
@@ -27,6 +28,15 @@ package org.apache.flex.html.staticControls.supportClasses
                {
                }
                
+               override public function addedToParent():void
+               {
+                       super.addedToParent();
+                       
+                       // very common for item renderers to be resized by 
their containers,
+                       addEventListener("widthChanged", sizeChangeHandler);
+                       addEventListener("heightChanged", sizeChangeHandler);
+               }
+               
                public var backgroundColor:uint = 0xFFFFFF;
                public var highlightColor:uint = 0xCEDBEF;
                public var selectedColor:uint = 0xA8C6EE;
@@ -99,5 +109,15 @@ package org.apache.flex.html.staticControls.supportClasses
                        else if (selected)
                                backgroundColor = selectedColor;
                }
+               
+               private function sizeChangeHandler(event:Event):void
+               {
+                       adjustSize();
+               }
+               
+               public function adjustSize():void
+               {
+                       // handle in subclass
+               }
        }
 }
\ No newline at end of file

Reply via email to