This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 8c07a12  helper function for selection bead
8c07a12 is described below

commit 8c07a12d9386eb75b36ebace497cfc0dc8e194f4
Author: Harbs <[email protected]>
AuthorDate: Sun Feb 23 19:32:54 2020 +0200

    helper function for selection bead
---
 .../org/apache/royale/html/beads/ListView.as       | 136 +++++-------
 .../apache/royale/html/beads/VirtualListView.as    | 149 ++++++-------
 .../controllers/ItemRendererMouseController.as     |  27 +--
 .../ListMultiSelectionMouseController.as           |  24 +--
 .../ListSingleSelectionMouseController.as          |  22 +-
 .../MultiSelectionItemRendererMouseController.as   |  33 ++-
 ...verridableSelectableItemRendererClassFactory.as |  13 +-
 .../apache/royale/utils/getSelectionRenderBead.as  |  46 ++++
 .../controllers/ItemRendererMouseController.as     |  55 ++---
 ...tualDataItemRendererFactoryForCollectionView.as | 142 ++++++------
 .../royale/jewel/beads/views/DropDownListView.as   | 239 +++++++++++----------
 .../apache/royale/jewel/beads/views/ListView.as    | 155 +++++++------
 .../apache/royale/jewel/beads/views/TabBarView.as  |  21 +-
 .../apache/royale/jewel/beads/views/TableView.as   |  33 +--
 .../royale/jewel/beads/views/VirtualListView.as    |  99 ++++-----
 .../AdvancedDataGridItemRenderer.as                |   5 +-
 .../mx/controls/beads/AdvancedDataGridView.as      |   3 +-
 17 files changed, 597 insertions(+), 605 deletions(-)

diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
index fdbae01..dbd8c91 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/ListView.as
@@ -18,29 +18,13 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-       import org.apache.royale.html.beads.DataContainerView;
-       import org.apache.royale.core.BeadViewBase;
-       import org.apache.royale.core.ContainerBase;
-       import org.apache.royale.core.IBead;
-       import org.apache.royale.core.IBeadLayout;
-       import org.apache.royale.core.IBeadModel;
-       import org.apache.royale.core.IBeadView;
-       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.IItemRenderer;
-       import org.apache.royale.core.IItemRendererOwnerView;
-       import org.apache.royale.core.IParent;
-    import org.apache.royale.core.IParentIUIBase;
        import org.apache.royale.core.IRollOverModel;
+       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.ISelectionModel;
-       import org.apache.royale.core.IStrand;
-    import org.apache.royale.core.IUIBase;
-       import org.apache.royale.core.Strand;
-       import org.apache.royale.core.UIBase;
-       import org.apache.royale.core.ValuesManager;
        import org.apache.royale.events.Event;
-       import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.html.supportClasses.Border;
-       import org.apache.royale.html.supportClasses.DataGroup;
+       import org.apache.royale.utils.getSelectionRenderBead;
+       import org.apache.royale.core.IStrand;
 
        /**
         *  The List class creates the visual elements of the 
org.apache.royale.html.List
@@ -79,25 +63,24 @@ package org.apache.royale.html.beads
                }
 
                /**
-                * @private
-                * @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 */
                protected function selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
                        if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
                        ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
                        if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
 
                        lastSelectedIndex = listModel.selectedIndex;
                }
@@ -105,26 +88,25 @@ package org.apache.royale.html.beads
                protected var lastRollOverIndex:int = -1;
 
                /**
-                * @private
-                * @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 * * @royaleignorecoercion org.apache.royale.core.IRollOverModel
                 */
                protected function rollOverIndexChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-                       var ir:ISelectableItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = false;
-            }
-                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = true;
-            }
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
+                       ir = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
                        lastRollOverIndex = (listModel as 
IRollOverModel).rollOverIndex;
                }
        }
@@ -172,21 +154,21 @@ package org.apache.royale.html.beads
                 */
                protected function selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
-            ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as 
IItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
-            lastSelectedIndex = listModel.selectedIndex;
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
+                       ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
+                       lastSelectedIndex = listModel.selectedIndex;
                }
 
                protected var lastRollOverIndex:int = -1;
@@ -196,20 +178,20 @@ package org.apache.royale.html.beads
                 */
                protected function rollOverIndexChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:ISelectableItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = false;
-            }
-            ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = true;
-            }
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
+                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
                        lastRollOverIndex = 
IRollOverModel(listModel).rollOverIndex;
                }
        }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
index a9165dd..3ea9fc7 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/VirtualListView.as
@@ -7,7 +7,7 @@
 //  (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
+//       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,
@@ -18,32 +18,17 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.html.beads
 {
-       import org.apache.royale.core.BeadViewBase;
-       import org.apache.royale.core.ContainerBase;
-       import org.apache.royale.core.IBead;
-       import org.apache.royale.core.IBeadLayout;
-       import org.apache.royale.core.IBeadModel;
-       import org.apache.royale.core.IBeadView;
        import org.apache.royale.core.IDataProviderItemRendererMapper;
-    import org.apache.royale.core.IIndexedItemRenderer;
+       import org.apache.royale.core.IIndexedItemRenderer;
        import org.apache.royale.core.IItemRenderer;
-       import org.apache.royale.core.IItemRendererOwnerView;
-       import org.apache.royale.core.IParent;
-       import org.apache.royale.core.IParentIUIBase;
        import org.apache.royale.core.IRollOverModel;
        import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.ISelectionModel;
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.core.IUIBase;
-       import org.apache.royale.core.Strand;
-       import org.apache.royale.core.UIBase;
-       import org.apache.royale.core.ValuesManager;
        import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.events.ItemRendererEvent;
-       import org.apache.royale.html.supportClasses.Border;
-       import org.apache.royale.html.supportClasses.DataGroup;
-        
+       import org.apache.royale.events.ItemRendererEvent;
+       import org.apache.royale.utils.getSelectionRenderBead;
+               
        /**
         *  The List class creates the visual elements of the 
org.apache.royale.html.List
         *  component. A List consists of the area to display the data (in the 
dataGroup), any
@@ -65,7 +50,7 @@ package org.apache.royale.html.beads
                protected var listModel:ISelectionModel;
 
                protected var lastSelectedIndex:int = -1;
-        
+               
                /**
                 * @private
                 */
@@ -74,69 +59,63 @@ package org.apache.royale.html.beads
                        listModel = _strand.getBeadByType(ISelectionModel) as 
ISelectionModel;
                        listModel.addEventListener("selectedIndexChanged", 
selectionChangeHandler);
                        listModel.addEventListener("rollOverIndexChanged", 
rollOverIndexChangeHandler);
-            var mapper:IEventDispatcher = 
_strand.getBeadByType(IDataProviderItemRendererMapper) as IEventDispatcher;
-            mapper.addEventListener(ItemRendererEvent.CREATED, 
itemCreatedHandler);
+                       var mapper:IEventDispatcher = 
_strand.getBeadByType(IDataProviderItemRendererMapper) as IEventDispatcher;
+                       mapper.addEventListener(ItemRendererEvent.CREATED, 
itemCreatedHandler);
 
                        super.handleInitComplete(event);
                }
 
-        protected function itemCreatedHandler(event:ItemRendererEvent):void
-        {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IIndexedItemRenderer = event.itemRenderer as 
IIndexedItemRenderer;
-            if (ir.index == lastSelectedIndex)
-            {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;                
-            }
-            
-        }
-        
-        protected var firstElementIndex:int = 1;
-        
-        override public function 
getItemRendererForIndex(index:int):IItemRenderer
-        {
-            if (contentView.numElements == 0)
-                return null;
-            
-            var firstIndex:int = (contentView.getElementAt(firstElementIndex) 
as IIndexedItemRenderer).index;
-            
-            if (index < firstIndex) 
-                return null;
-            if (index >= (firstIndex + contentView.numElements))
-                return null;
-            
-            return contentView.getElementAt(index - firstIndex + 
firstElementIndex) as IItemRenderer;            
-        }
-        
+               protected function 
itemCreatedHandler(event:ItemRendererEvent):void
+               {
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IIndexedItemRenderer = event.itemRenderer as 
IIndexedItemRenderer;
+                       if (ir.index == lastSelectedIndex)
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;          
                
+                       }
+                       
+               }
+               
+               protected var firstElementIndex:int = 1;
+               
+               override public function 
getItemRendererForIndex(index:int):IItemRenderer
+               {
+                       if (contentView.numElements == 0)
+                               return null;
+                       
+                       var firstIndex:int = 
(contentView.getElementAt(firstElementIndex) as IIndexedItemRenderer).index;
+                       
+                       if (index < firstIndex) 
+                               return null;
+                       if (index >= (firstIndex + contentView.numElements))
+                               return null;
+                       
+                       return contentView.getElementAt(index - firstIndex + 
firstElementIndex) as IItemRenderer;                       
+               }
+               
                /**
                 * @private
                 * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
                 */
                protected function selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
+                       var selectionBead:ISelectableItemRenderer;
                        var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IIndexedItemRenderer;
                        if(ir)
-            {
-                if (ir is IStrand)
-                {
-                    selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                        selectionBead.selected = false;
-                }
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
                        ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as 
IIndexedItemRenderer;
                        if(ir)
-            {
-                if (ir is IStrand)
-                {
-                    selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                        selectionBead.selected = true;
-                }
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
 
                        lastSelectedIndex = listModel.selectedIndex;
                }
@@ -150,27 +129,21 @@ package org.apache.royale.html.beads
                 */
                protected function rollOverIndexChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IIndexedItemRenderer;
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IIndexedItemRenderer;
                        if(ir)
-            {
-                if (ir is IStrand)
-                {
-                    selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                        selectionBead.hovered = false;
-                }
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
                        ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as IIndexedItemRenderer;
                        if(ir)
-            {
-                if (ir is IStrand)
-                {
-                    selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                        selectionBead.hovered = true;
-                }
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
                        lastRollOverIndex = (listModel as 
IRollOverModel).rollOverIndex;
                }
 
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
index 62cc5f5..c40e599 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ItemRendererMouseController.as
@@ -20,7 +20,7 @@ package org.apache.royale.html.beads.controllers
 {
        import org.apache.royale.core.IBeadController;
        import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.IStrand;
 COMPILE::SWF {
        import org.apache.royale.events.Event;
@@ -36,6 +36,7 @@ COMPILE::JS {
 }
        import org.apache.royale.events.ItemClickedEvent;
        import org.apache.royale.utils.sendEvent;
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The ItemRendererMouseController class can mouse events in 
itemRenderers. This
@@ -158,12 +159,9 @@ COMPILE::JS {
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (target)
                        {
-                if (target is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                        selectionBead.down = true;
-                }                              
+                                       var 
selectionBead:ISelectableItemRenderer = getSelectionRenderBead(renderer);
+                                       if (selectionBead)
+                                               selectionBead.down = true;
                                var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemMouseDown");
                                newEvent.data = target.data;
                                newEvent.index = target.index;
@@ -182,15 +180,12 @@ COMPILE::JS {
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (target)
                        {
-                if (target is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                    {
-                        selectionBead.down = true;
-                        selectionBead.hovered = false;
-                    }
-                }
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(renderer);
+                               if (selectionBead)
+                               {
+                                       selectionBead.down = true;
+                                       selectionBead.hovered = false;
+                               }
                                var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemMouseDown");
                                newEvent.data = target.data;
                                newEvent.index = target.index;
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
index fef9e79..196f153 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListMultiSelectionMouseController.as
@@ -7,7 +7,7 @@
 //  (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
+//       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,
@@ -29,9 +29,9 @@ package org.apache.royale.html.beads.controllers
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.events.ItemAddedEvent;
        import org.apache.royale.events.ItemRemovedEvent;
-       import org.apache.royale.events.MouseEvent;
        import org.apache.royale.events.MultiSelectionItemClickedEvent;
        import org.apache.royale.html.beads.IListView;
+       import org.apache.royale.utils.getSelectionRenderBead;
        import org.apache.royale.utils.sendEvent;
 
        /**
@@ -41,7 +41,7 @@ package org.apache.royale.html.beads.controllers
         *  update the data model or dispatch a semantic event.
         *  This controller watches for events from the item renderers
         *  and updates an IMultiSelectionModel (which supports multi
-        *  selection).      
+        *  selection).   
         * 
         *  @langversion 3.0
         *  @playerversion Flash 10.2
@@ -215,15 +215,15 @@ package org.apache.royale.html.beads.controllers
                {
                        var renderer:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (renderer) {
-                if (renderer is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                    {
-                        selectionBead.hovered = false;
-                        selectionBead.down = false;                        
-                    }
-                }
+                               if (renderer is IStrand)
+                               {
+                                       var 
selectionBead:ISelectableItemRenderer = getSelectionRenderBead(renderer);
+                                       if (selectionBead)
+                                       {
+                                               selectionBead.hovered = false;
+                                               selectionBead.down = false;     
                                        
+                                       }
+                               }
                                IRollOverModel(listModel).rollOverIndex = -1;
                        }
                }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListSingleSelectionMouseController.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListSingleSelectionMouseController.as
index 69fb16b..da7028f 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListSingleSelectionMouseController.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/ListSingleSelectionMouseController.as
@@ -7,7 +7,7 @@
 //  (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
+//       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,
@@ -23,7 +23,7 @@ package org.apache.royale.html.beads.controllers
        import org.apache.royale.core.IItemRendererOwnerView;
        import org.apache.royale.core.IRollOverModel;
        import org.apache.royale.core.IIndexedItemRenderer;
-    import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.Event;
@@ -33,6 +33,7 @@ package org.apache.royale.html.beads.controllers
        import org.apache.royale.events.ItemRemovedEvent;
        import org.apache.royale.html.beads.IListView;
        import org.apache.royale.utils.sendEvent;
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The ListSingleSelectionMouseController class is a controller for
@@ -137,7 +138,7 @@ package org.apache.royale.html.beads.controllers
                {
                        listModel.selectedIndex = event.index;
                        listModel.selectedItem = event.data;
-            sendEvent(listView.host,"change");
+                       sendEvent(listView.host,"change");
                }
                
                /**
@@ -160,15 +161,12 @@ package org.apache.royale.html.beads.controllers
                {
                        var renderer:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (renderer) {
-                if (renderer is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                    {
-                        selectionBead.hovered = false;
-                        selectionBead.down = false;                        
-                    }
-                }
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(renderer);
+                               if (selectionBead)
+                               {
+                                       selectionBead.hovered = false;
+                                       selectionBead.down = false;             
                                
+                               }
                                IRollOverModel(listModel).rollOverIndex = -1;
                        }
                }
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MultiSelectionItemRendererMouseController.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MultiSelectionItemRendererMouseController.as
index a9f5588..0dc606a 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MultiSelectionItemRendererMouseController.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/controllers/MultiSelectionItemRendererMouseController.as
@@ -7,7 +7,7 @@
 //  (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
+//       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,
@@ -19,7 +19,7 @@
 package org.apache.royale.html.beads.controllers
 {
        import org.apache.royale.core.IBeadController;
-    import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.IIndexedItemRenderer;
        import org.apache.royale.core.IStrand;
        COMPILE::SWF {
@@ -36,6 +36,7 @@ package org.apache.royale.html.beads.controllers
        }
        import org.apache.royale.events.MultiSelectionItemClickedEvent;
        import org.apache.royale.utils.sendEvent;
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The MultiSelectionItemRendererMouseController class can mouse 
events in itemRenderers. This
@@ -159,14 +160,11 @@ package org.apache.royale.html.beads.controllers
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (target)
                        {
-                if (target is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                    {
-                        selectionBead.down = true;
-                    }            
-                }
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(renderer);
+                               if (selectionBead)
+                               {
+                                       selectionBead.down = true;
+                               }                       
                                var newEvent:MultiSelectionItemClickedEvent = 
new MultiSelectionItemClickedEvent("itemMouseDown", true, true);
                                newEvent.shiftKey = event.shiftKey;
                                newEvent.ctrlKey = event.ctrlKey;
@@ -188,15 +186,12 @@ package org.apache.royale.html.beads.controllers
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (target)
                        {
-                if (target is IStrand)
-                {
-                    var selectionBead:ISelectableItemRenderer = (renderer as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                    if (selectionBead)
-                    {
-                        selectionBead.down = true;
-                        selectionBead.hovered = false;                    
-                    }            
-                }
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(renderer);
+                               if (selectionBead)
+                               {
+                                       selectionBead.down = true;
+                                       selectionBead.hovered = false;
+                               }                       
                                var newEvent:MultiSelectionItemClickedEvent = 
MultiSelectionItemClickedEvent.createMultiSelectionItemClickedEvent("itemMouseDown",
 event);
                                newEvent.data = target.data;
                                newEvent.index = target.index;
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/OverridableSelectableItemRendererClassFactory.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/OverridableSelectableItemRendererClassFactory.as
index e1f05c3..841f367 100644
--- 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/OverridableSelectableItemRendererClassFactory.as
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/OverridableSelectableItemRendererClassFactory.as
@@ -25,6 +25,7 @@ package org.apache.royale.core
     import org.apache.royale.core.ISelectableItemRenderer;
     
     import org.apache.royale.utils.MXMLDataInterpreter;
+    import org.apache.royale.utils.getSelectionRenderBead;
 
        [DefaultProperty("mxmlContent")]
     
@@ -82,8 +83,16 @@ package org.apache.royale.core
         override public function createItemRenderer():IItemRenderer
         {
             var ir:IItemRenderer = super.createItemRenderer();
-                       if (!ir.getBeadByType(ISelectableItemRenderer))
-                   ir.addBead(new selectableBeadClass());
+            var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(ir);
+                       if (!selectionBead)
+            {
+                selectionBead = new selectableBeadClass();
+                COMPILE::JS
+                {
+                    ir["_selectionBead_"] = selectionBead;
+                }
+                   ir.addBead(selectionBead);
+            }
             return ir;
         }
        }
diff --git 
a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/getSelectionRenderBead.as
 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/getSelectionRenderBead.as
new file mode 100644
index 0000000..aff00dd
--- /dev/null
+++ 
b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/getSelectionRenderBead.as
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.utils
+{
+  import org.apache.royale.core.IItemRenderer;
+  import org.apache.royale.core.ISelectableItemRenderer;
+
+  /**
+   * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
+   */
+  public function 
getSelectionRenderBead(renderer:IItemRenderer):ISelectableItemRenderer
+  {
+    COMPILE::JS
+    {
+      var selectionBead:ISelectableItemRenderer = renderer["_selectionBead_"];
+      if(!selectionBead)
+      {
+        selectionBead = renderer.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
+        if(selectionBead)
+          renderer["_selectionBead_"] = selectionBead;
+      }
+      return selectionBead;
+    }
+
+    COMPILE::SWF
+    {
+      return renderer.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ItemRendererMouseController.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ItemRendererMouseController.as
index 0929caf..42e3fd8 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ItemRendererMouseController.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ItemRendererMouseController.as
@@ -31,11 +31,12 @@ package org.apache.royale.jewel.beads.controllers
        import org.apache.royale.core.WrappedHTMLElement;
        import org.apache.royale.events.BrowserEvent;
        }
-    import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.IBeadController;
        import org.apache.royale.core.IIndexedItemRenderer;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.ItemClickedEvent;
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The ItemRendererMouseController class can mouse events in 
itemRenderers. This
@@ -62,7 +63,7 @@ package org.apache.royale.jewel.beads.controllers
                {
                }
                
-        private var renderer:IIndexedItemRenderer;
+               private var renderer:IIndexedItemRenderer;
                private var _strand:IStrand;
                
                /**
@@ -78,11 +79,11 @@ package org.apache.royale.jewel.beads.controllers
                public function set strand(value:IStrand):void
                {
                        _strand = value;
-            renderer = value as IIndexedItemRenderer;
+                       renderer = value as IIndexedItemRenderer;
                        
                        COMPILE::SWF {
-                   renderer.addEventListener(MouseEvent.ROLL_OVER, 
rollOverHandler);
-                   renderer.addEventListener(MouseEvent.ROLL_OUT, 
rollOutHandler);
+                               renderer.addEventListener(MouseEvent.ROLL_OVER, 
rollOverHandler);
+                               renderer.addEventListener(MouseEvent.ROLL_OUT, 
rollOutHandler);
                                
renderer.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
                                renderer.addEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);
                        }
@@ -157,8 +158,8 @@ package org.apache.royale.jewel.beads.controllers
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
                        if (target)
                        {
-                var selectionBead:ISelectableItemRenderer = 
target.getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                selectionBead.down = true;
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(target);
+                               selectionBead.down = true;
                                target.addEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);
                        }
                }
@@ -171,12 +172,12 @@ package org.apache.royale.jewel.beads.controllers
                protected function handleMouseDown(event:BrowserEvent):void
                {
                        var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
-            if (target)
-            {
-                var selectionBead:ISelectableItemRenderer = 
target.getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                selectionBead.down = true;
-                selectionBead.hovered = false;
-            }
+                       if (target)
+                       {
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(target);
+                               selectionBead.down = true;
+                               selectionBead.hovered = false;
+                       }
                }
                
                /**
@@ -193,7 +194,7 @@ package org.apache.royale.jewel.beads.controllers
                                newEvent.data = target.data;
                                newEvent.index = target.index;
                                
-                target.removeEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);                
+                               target.removeEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);                                
                                target.dispatchEvent(newEvent);
                        }                       
                }
@@ -206,19 +207,19 @@ package org.apache.royale.jewel.beads.controllers
                protected function handleMouseUp(event:BrowserEvent):void
                {
                        event.stopImmediatePropagation();
-            var target:IIndexedItemRenderer = event.currentTarget as 
IIndexedItemRenderer;
-            if (target)
-            {
-                       var selectionBead:ISelectableItemRenderer = 
target.getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                       if (selectionBead && selectionBead.down)
-                       {
-                               var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemClicked");
-                               newEvent.data = target.data;
-                               newEvent.index = target.index;
-    
-                               target.dispatchEvent(newEvent);
-                       }
-            }
+                       var target:IIndexedItemRenderer = event.currentTarget 
as IIndexedItemRenderer;
+                       if (target)
+                       {
+                               var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(target);
+                               if (selectionBead && selectionBead.down)
+                               {
+                                       var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemClicked");
+                                       newEvent.data = target.data;
+                                       newEvent.index = target.index;
+       
+                                       target.dispatchEvent(newEvent);
+                               }
+                       }
                }
        
        }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/VirtualDataItemRendererFactoryForCollectionView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/VirtualDataItemRendererFactoryForCollectionView.as
index 6d3a89b..804e0e6 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/VirtualDataItemRendererFactoryForCollectionView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/VirtualDataItemRendererFactoryForCollectionView.as
@@ -19,52 +19,38 @@
 package org.apache.royale.jewel.beads.itemRenderers
 {
        import org.apache.royale.collections.ArrayList;
-       import org.apache.royale.collections.ICollectionView;
-       import org.apache.royale.core.IBead;
-       import org.apache.royale.core.IDataProviderModel;
-       import org.apache.royale.core.IDataProviderVirtualItemRendererMapper;
-       import org.apache.royale.core.IItemRendererClassFactory;
        import org.apache.royale.core.IIndexedItemRenderer;
        import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.ISelectionModel;
-       import org.apache.royale.core.IStrand;
-       import org.apache.royale.core.IStrandWithModelView;
-       import org.apache.royale.core.UIBase;
        import org.apache.royale.events.Event;
-       import org.apache.royale.events.EventDispatcher;
-       import org.apache.royale.events.IEventDispatcher;
-       import org.apache.royale.events.ItemRendererEvent;
-       import org.apache.royale.html.beads.IListView;
        import org.apache.royale.html.beads.VirtualDataItemRendererFactoryBase;
-       import org.apache.royale.html.supportClasses.DataItemRenderer;
-       import 
org.apache.royale.jewel.supportClasses.list.IListPresentationModel;
-       import org.apache.royale.utils.loadBeadFromValuesManager;
+       import org.apache.royale.utils.getSelectionRenderBead;
        import org.apache.royale.utils.sendStrandEvent;
 
-    
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
+       
[Event(name="itemRendererCreated",type="org.apache.royale.events.ItemRendererEvent")]
        
-    /**
-     *  The DataItemRendererFactoryForArrayData class reads an
-     *  array of data and creates an item renderer for every
-     *  item in the array.  Other implementations of
-     *  IDataProviderItemRendererMapper map different data 
-     *  structures or manage a virtual set of renderers.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.7
-     */
+       /**
+        *  The DataItemRendererFactoryForArrayData class reads an
+        *  array of data and creates an item renderer for every
+        *  item in the array.  Other implementations of
+        *  IDataProviderItemRendererMapper map different data 
+        *  structures or manage a virtual set of renderers.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.7
+        */
        public class VirtualDataItemRendererFactoryForCollectionView extends 
VirtualDataItemRendererFactoryBase
        {
-        /**
-         *  Constructor.
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.7
-         */
+               /**
+                *  Constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.7
+                */
                public function 
VirtualDataItemRendererFactoryForCollectionView(target:Object=null)
                {
                        super(target);
@@ -72,61 +58,61 @@ package org.apache.royale.jewel.beads.itemRenderers
 
                private var dp:ArrayList;
                
-        /**
-         *  
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.7
-         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
-         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-         */            
+               /**
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.7
+                *  @royaleignorecoercion 
org.apache.royale.core.IStrandWithModelView
+                *  @royaleignorecoercion org.apache.royale.html.beads.IListView
+                */             
                override protected function 
dataProviderChangeHandler(event:Event):void
                {
-            if (!dataProviderModel)
+                       if (!dataProviderModel)
                                return;
-            dp = dataProviderModel.dataProvider as ArrayList;
+                       dp = dataProviderModel.dataProvider as ArrayList;
                        if (!dp)
                                return;
                        
                        super.dataProviderChangeHandler(event);
 
-            sendStrandEvent(_strand, "layoutNeeded");
-        }
-        
-        /**
-         *  Get an item renderer for a given index.
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.7
-         *  @royaleignorecoercion org.apache.royale.core.IStrandWithModelView
-         *  @royaleignorecoercion org.apache.royale.html.beads.IListView
-         */
-        override public function getItemRendererForIndex(index:int, 
elementIndex:int):IIndexedItemRenderer
-        {
-            var ir:IIndexedItemRenderer = rendererMap[index];
-            if (ir) return ir;
-            
+                       sendStrandEvent(_strand, "layoutNeeded");
+               }
+               
+               /**
+                *  Get an item renderer for a given index.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.7
+                *  @royaleignorecoercion 
org.apache.royale.core.IStrandWithModelView
+                *  @royaleignorecoercion org.apache.royale.html.beads.IListView
+                */
+               override public function getItemRendererForIndex(index:int, 
elementIndex:int):IIndexedItemRenderer
+               {
+                       var ir:IIndexedItemRenderer = rendererMap[index];
+                       if (ir) return ir;
+                       
                        ir = super.getItemRendererForIndex(index, elementIndex);
-                                   
-            // if the item was already selected make the item show it
-            if(index == (dataProviderModel as ISelectionModel).selectedIndex)
-            {
-                   var selectionBead:ISelectableItemRenderer;
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
+                                               
+                       // if the item was already selected make the item show 
it
+                       if(index == (dataProviderModel as 
ISelectionModel).selectedIndex)
+                       {
+                               var selectionBead:ISelectableItemRenderer;
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
                                
-            return ir;
+                       return ir;
                }
                
                override public function getItemAt(index:int):Object
-        {
-            return dp.getItemAt(index);
-        }
+               {
+                       return dp.getItemAt(index);
+               }
 
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
index 627d23e..0b6094c 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DropDownListView.as
@@ -18,83 +18,84 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.views
 {
-    COMPILE::JS
-    {
-    import org.apache.royale.html.elements.Select;
-    }
-    import org.apache.royale.core.IItemRenderer;
-    import org.apache.royale.core.ISelectableItemRenderer;
-    import org.apache.royale.core.ISelectionModel;
-    import org.apache.royale.core.IStrand;
-    import org.apache.royale.events.Event;
-    import org.apache.royale.html.beads.DataContainerView;
-    import org.apache.royale.jewel.DropDownList;
-    import org.apache.royale.jewel.beads.models.IDropDownListModel;
-
-    /**
-     *  The DropDownListView class creates the visual elements of the 
org.apache.royale.jewel.DropDownList
-     *  component. The job of the view bead is to put together the parts of 
the DropDownList such as the Select
-     *
-     *  @viewbead
-     *  @langversion 3.0
-     *  @playerversion Flash 10.2
-     *  @playerversion AIR 2.6
-     *  @productversion Royale 0.9.4
-     */
-    public class DropDownListView extends DataContainerView
-    {
-        public function DropDownListView()
-        {
-            super();
-        }
-
-        private var dropDownList:DropDownList;
-
-        /**
-         *  The prompt
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.4
-         *  @royalesuppresspublicvarwarning
-         */
-        public var prompt:String = "";
-
-        /**
-         *  @copy org.apache.royale.core.IBead#strand
-         *
-         *  @royaleignorecoercion HTMLLabelElement
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.4
-         */
-        override public function set strand(value:IStrand):void
-        {
-            super.strand = value;
-
-            COMPILE::JS
-            {
-                dropDownList = value as DropDownList;
-                dropDownList.dropDown = new Select();
-
-                var name:String = "dropDownList" + Math.random();
-                dropDownList.dropDown.element.name = name;
-
-                dropDownList.addElement(dropDownList.dropDown);
-            }
-        }
-
-        override protected function dataProviderChangeHandler(event:Event):void
-        {
-            super.dataProviderChangeHandler(event);
-
-            changedSelection();
-        }
-
-        /**
+       COMPILE::JS
+       {
+       import org.apache.royale.html.elements.Select;
+       }
+       import org.apache.royale.core.IItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectionModel;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.html.beads.DataContainerView;
+       import org.apache.royale.jewel.DropDownList;
+       import org.apache.royale.jewel.beads.models.IDropDownListModel;
+       import org.apache.royale.utils.getSelectionRenderBead;
+
+       /**
+        *  The DropDownListView class creates the visual elements of the 
org.apache.royale.jewel.DropDownList
+        *  component. The job of the view bead is to put together the parts of 
the DropDownList such as the Select
+        *
+        *  @viewbead
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.4
+        */
+       public class DropDownListView extends DataContainerView
+       {
+               public function DropDownListView()
+               {
+                       super();
+               }
+
+               private var dropDownList:DropDownList;
+
+               /**
+                *  The prompt
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                *  @royalesuppresspublicvarwarning
+                */
+               public var prompt:String = "";
+
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                *
+                *  @royaleignorecoercion HTMLLabelElement
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       super.strand = value;
+
+                       COMPILE::JS
+                       {
+                               dropDownList = value as DropDownList;
+                               dropDownList.dropDown = new Select();
+
+                               var name:String = "dropDownList" + 
Math.random();
+                               dropDownList.dropDown.element.name = name;
+
+                               dropDownList.addElement(dropDownList.dropDown);
+                       }
+               }
+
+               override protected function 
dataProviderChangeHandler(event:Event):void
+               {
+                       super.dataProviderChangeHandler(event);
+
+                       changedSelection();
+               }
+
+               /**
                 * @private
                 * @royaleignorecoercion org.apache.royale.core.ISelectionModel
                 */
@@ -107,61 +108,61 @@ package org.apache.royale.jewel.beads.views
                }
 
 
-        protected var lastSelectedIndex:int = -1;
-        /**
+               protected var lastSelectedIndex:int = -1;
+               /**
                 * @private
                 * @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
-         * @royaleignorecoercion 
org.apache.royale.jewel.beads.models.IDropDownListModel
+                * @royaleignorecoercion 
org.apache.royale.jewel.beads.models.IDropDownListModel
                 */
                protected function selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer;
-            if (lastSelectedIndex != -1) {
-                ir = dataGroup.getItemRendererAt(lastSelectedIndex) as 
IItemRenderer;
-            }
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer;
+                       if (lastSelectedIndex != -1) {
+                               ir = 
dataGroup.getItemRendererAt(lastSelectedIndex) as IItemRenderer;
+                       }
 
                        if(ir)
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
-            var newIndex:int = model.selectedIndex;
-            if (model is IDropDownListModel) {
-                newIndex += IDropDownListModel(model).offset;
-            }
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
+                       var newIndex:int = model.selectedIndex;
+                       if (model is IDropDownListModel) {
+                               newIndex += IDropDownListModel(model).offset;
+                       }
 
                        ir = dataGroup.getItemRendererAt(newIndex) as 
IItemRenderer;
-            if(ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
+                       if(ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
 
                        lastSelectedIndex = newIndex;
-        }
-
-        override protected function 
itemsCreatedHandler(event:org.apache.royale.events.Event):void
-        {
-            super.itemsCreatedHandler(event);
+               }
 
-            changedSelection();
-        }
+               override protected function 
itemsCreatedHandler(event:org.apache.royale.events.Event):void
+               {
+                       super.itemsCreatedHandler(event);
 
-        private var model:ISelectionModel;
+                       changedSelection();
+               }
 
-        private function changedSelection():void
-        {
-            model = dataModel as ISelectionModel;
-            //var selectedIndex:int = dropDownList.selectedIndex;
+               private var model:ISelectionModel;
 
-          /*  if (model.selectedIndex > -1 && model.dataProvider)
-            {*/
-                dropDownList.selectedIndex = model.selectedIndex;
-                dropDownList.selectedItem = model.selectedItem;
-           /* }*/
-        }
-    }
+               private function changedSelection():void
+               {
+                       model = dataModel as ISelectionModel;
+                       //var selectedIndex:int = dropDownList.selectedIndex;
+
+                 /*  if (model.selectedIndex > -1 && model.dataProvider)
+                       {*/
+                               dropDownList.selectedIndex = 
model.selectedIndex;
+                               dropDownList.selectedItem = model.selectedItem;
+                  /* }*/
+               }
+       }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
index cb781f8..b8f3723 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/ListView.as
@@ -27,6 +27,7 @@ package org.apache.royale.jewel.beads.views
        import org.apache.royale.core.IStrand;
        import org.apache.royale.events.Event;
        import org.apache.royale.html.beads.DataContainerView;
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The ListView class creates the visual elements of the 
org.apache.royale.jewel.List
@@ -102,60 +103,58 @@ package org.apache.royale.jewel.beads.views
                 */
                override protected function 
itemsCreatedHandler(event:Event):void
                {
-            super.itemsCreatedHandler(event);
+                       super.itemsCreatedHandler(event);
                        if(listModel.selectedIndex != -1)
                                selectionChangeHandler(null);
                }
 
                /**
-                * @private
-                * @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 */
-        protected function selectionChangeHandler(event:Event):void
-        {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
-            ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as 
IItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
-            
-            lastSelectedIndex = listModel.selectedIndex;
-        }
+               protected function selectionChangeHandler(event:Event):void
+               {
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
+                       ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
+                       
+                       lastSelectedIndex = listModel.selectedIndex;
+               }
 
                protected var lastRollOverIndex:int = -1;
 
                /**
-                * @private
-                * @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 * @royaleignorecoercion org.apache.royale.core.IRollOverModel
                 */
-        protected function rollOverIndexChangeHandler(event:Event):void
-        {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:ISelectableItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = false;
-            }
-            ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = true;
-            }
-            lastRollOverIndex = (listModel as IRollOverModel).rollOverIndex;
-        }
+               protected function rollOverIndexChangeHandler(event:Event):void
+               {
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
+                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
+                       lastRollOverIndex = (listModel as 
IRollOverModel).rollOverIndex;
+               }
        }
 
        COMPILE::SWF
@@ -212,47 +211,47 @@ package org.apache.royale.jewel.beads.views
                /**
                 * @private
                 */
-        protected function selectionChangeHandler(event:Event):void
-        {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
-            ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as 
IItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
-            lastSelectedIndex = listModel.selectedIndex;
-        }
+               protected function selectionChangeHandler(event:Event):void
+               {
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
+                       ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
+                       lastSelectedIndex = listModel.selectedIndex;
+               }
 
                protected var lastRollOverIndex:int = -1;
 
                /**
                 * @private
                 */
-        protected function rollOverIndexChangeHandler(event:Event):void
-        {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:ISelectableItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as ISelectableItemRenderer;
-            if (ir) 
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = false;
-            }
-            ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as ISelectableItemRenderer;
-            if (ir) {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = true;
-            }
-            lastRollOverIndex = IRollOverModel(listModel).rollOverIndex;
-        }
+               protected function rollOverIndexChangeHandler(event:Event):void
+               {
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
+                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
+                       lastRollOverIndex = 
IRollOverModel(listModel).rollOverIndex;
+               }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TabBarView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TabBarView.as
index 91e94b3..116489d 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TabBarView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TabBarView.as
@@ -18,13 +18,14 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.views
 {
-    import org.apache.royale.core.ISelectableItemRenderer;
+       import org.apache.royale.core.ISelectableItemRenderer;
 
        COMPILE::JS
        {
        import org.apache.royale.events.Event;
        import org.apache.royale.jewel.itemRenderers.TabBarButtonItemRenderer;
        }
+       import org.apache.royale.utils.getSelectionRenderBead;
 
        /**
         *  The TabBarView class creates the visual elements of the 
org.apache.royale.jewel.TabBar
@@ -42,8 +43,8 @@ package org.apache.royale.jewel.beads.views
                 *  constructor.
                 *
                 *  <inject_html>
-         *  <script 
src="https://cdnjs.cloudflare.com/ajax/libs/web-animations/2.3.1/web-animations.min.js";></script>
-         *  </inject_html>
+                *  <script 
src="https://cdnjs.cloudflare.com/ajax/libs/web-animations/2.3.1/web-animations.min.js";></script>
+                *  </inject_html>
                 * 
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
@@ -64,11 +65,11 @@ package org.apache.royale.jewel.beads.views
                {
                        var prev_ir:TabBarButtonItemRenderer = 
dataGroup.getItemRendererAt(lastSelectedIndex) as TabBarButtonItemRenderer;
                        var ir:TabBarButtonItemRenderer = 
dataGroup.getItemRendererAt(listModel.selectedIndex) as 
TabBarButtonItemRenderer;
-            var selectionBead:ISelectableItemRenderer;
+                       var selectionBead:ISelectableItemRenderer;
 
                        if(prev_ir) {
-                selectionBead = prev_ir.getBeadByType(ISelectableItemRenderer) 
as ISelectableItemRenderer;
-                selectionBead.selected = false;
+                               selectionBead = getSelectionRenderBead(prev_ir);
+                               selectionBead.selected = false;
                                var lastRect:ClientRect = 
prev_ir.getBoundingBox;
                                var currentRect:ClientRect = ir.getBoundingBox;
                                var widthDiff:Number = lastRect.width / 
currentRect.width;
@@ -76,13 +77,13 @@ package org.apache.royale.jewel.beads.views
                                        widthDiff = 1;
                                var positionDiff:Number = lastRect.left - 
currentRect.left;
                                
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                selectionBead.selected = true;
+                               selectionBead = getSelectionRenderBead(ir);
+                               selectionBead.selected = true;
                                ir.animateIndicator(positionDiff, widthDiff, 
300, 'ease-in-out');                               
                        } else
                        {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                selectionBead.selected = true;
+                               selectionBead = getSelectionRenderBead(ir);
+                               selectionBead.selected = true;
                        }
                        
                        lastSelectedIndex = listModel.selectedIndex;
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
index c7a7cdb..1acb128 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
@@ -18,7 +18,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.views
 {
-    import org.apache.royale.core.IItemRenderer;
+       import org.apache.royale.core.IItemRenderer;
        import org.apache.royale.core.ISelectableItemRenderer;
        import org.apache.royale.core.IStrand;
        import org.apache.royale.core.IStrandWithModel;
@@ -28,6 +28,7 @@ package org.apache.royale.jewel.beads.views
        import org.apache.royale.jewel.beads.views.ListView;
        import org.apache.royale.jewel.supportClasses.table.TFoot;
        import org.apache.royale.jewel.supportClasses.table.THead;
+       import org.apache.royale.utils.getSelectionRenderBead;
        
        /**
         *  The TableView class creates the visual elements of the 
org.apache.royale.jewel.Table component.
@@ -52,7 +53,7 @@ package org.apache.royale.jewel.beads.views
                public function TableView()
                {
                        super();
-        }
+               }
 
                /**
                 *  @copy org.apache.royale.core.IBead#strand
@@ -95,7 +96,7 @@ package org.apache.royale.jewel.beads.views
                 */
                override protected function 
itemsCreatedHandler(event:Event):void
                {
-            super.itemsCreatedHandler(event);
+                       super.itemsCreatedHandler(event);
                        if(listModel.selectedIndex != -1)
                                selectionChangeHandler(null);
                }
@@ -116,23 +117,23 @@ package org.apache.royale.jewel.beads.views
                 */
                override protected function 
selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
+                       var selectionBead:ISelectableItemRenderer;
                        var ir:IItemRenderer = 
dataGroup.getItemRendererAt(lastSelectedIndex) as IItemRenderer;
-            if (ir)
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
+                       if (ir)
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
                        
                        ir = 
dataGroup.getItemRendererAt(listModel.selectedIndex) as IItemRenderer;
                        if (ir)
-            {
-                selectionBead = (ir as 
IStrand).getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
-            lastSelectedIndex = listModel.selectedIndex;
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
+                       lastSelectedIndex = listModel.selectedIndex;
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/VirtualListView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/VirtualListView.as
index a65bcb4..ec1f3de 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/VirtualListView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/VirtualListView.as
@@ -25,7 +25,8 @@ package org.apache.royale.jewel.beads.views
        import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.events.Event;
        import org.apache.royale.html.beads.VirtualDataContainerView;
-        
+       import org.apache.royale.utils.getSelectionRenderBead;
+               
        /**
         *  The VirtualListView class creates the visual elements of the 
org.apache.royale.jewel.List
         *  component in a way that can be recicled to reuse as the user 
scrolls the list getting performance improvements
@@ -72,50 +73,52 @@ package org.apache.royale.jewel.beads.views
                 */
                // override protected function 
itemsCreatedHandler(event:Event):void
                // {
-        //     super.itemsCreatedHandler(event);
+               //       super.itemsCreatedHandler(event);
                //      if(listModel.selectedIndex != -1)
                //              selectionChangeHandler(null);
                // }
 
-        protected var firstElementIndex:int = 1;
+               protected var firstElementIndex:int = 1;
                /**
                 * Retrieve the renderer for a given index
+                * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 */
-        override public function 
getItemRendererForIndex(index:int):IItemRenderer
-        {
-            if (contentView.numElements == 0)
-                return null;
-            
-            var firstIndex:int = (contentView.getElementAt(firstElementIndex) 
as IIndexedItemRenderer).index;
-            
-            if (index < firstIndex) 
-                return null;
-            if (index >= (firstIndex + contentView.numElements))
-                return null;
-            
-            return contentView.getElementAt(index - firstIndex + 
firstElementIndex) as IItemRenderer;            
-        }
-        
+               override public function 
getItemRendererForIndex(index:int):IItemRenderer
+               {
+                       if (contentView.numElements == 0)
+                               return null;
+                       
+                       var firstIndex:int = 
(contentView.getElementAt(firstElementIndex) as IIndexedItemRenderer).index;
+                       
+                       if (index < firstIndex) 
+                               return null;
+                       if (index >= (firstIndex + contentView.numElements))
+                               return null;
+                       
+                       return contentView.getElementAt(index - firstIndex + 
firstElementIndex) as IItemRenderer;                       
+               }
+               
                /**
                 * @private
-                * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
+                * @royaleignorecoercion org.apache.royale.core.IItemRenderer
                 */
                protected function selectionChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as IItemRenderer;
-            if (ir) 
-            {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = false;
-            }
-            ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as 
IItemRenderer;
-            if (ir) {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.selected = true;
-            }
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex);
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = false;
+                       }
+                       ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as IItemRenderer;
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.selected = true;
+                       }
                                
                        lastSelectedIndex = listModel.selectedIndex;
                }
@@ -125,24 +128,24 @@ package org.apache.royale.jewel.beads.views
                /**
                 * @private
                 * @royaleignorecoercion 
org.apache.royale.core.IIndexedItemRenderer
-                * * @royaleignorecoercion org.apache.royale.core.IRollOverModel
+                * @royaleignorecoercion org.apache.royale.core.IRollOverModel
                 */
                protected function rollOverIndexChangeHandler(event:Event):void
                {
-            var selectionBead:ISelectableItemRenderer;
-            var ir:IIndexedItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IIndexedItemRenderer;
-            if (ir) 
-            {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = false;
-            }
-            ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as IIndexedItemRenderer;
-            if (ir) {
-                selectionBead = ir.getBeadByType(ISelectableItemRenderer) as 
ISelectableItemRenderer;
-                if (selectionBead)
-                    selectionBead.hovered = true;
-            }
+                       var selectionBead:ISelectableItemRenderer;
+                       var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex);
+                       if (ir) 
+                       {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = false;
+                       }
+                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex);
+                       if (ir) {
+                               selectionBead = getSelectionRenderBead(ir);
+                               if (selectionBead)
+                                       selectionBead.hovered = true;
+                       }
                        lastRollOverIndex = (listModel as 
IRollOverModel).rollOverIndex;
                }
 
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
index 218693a..b38ba13 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridItemRenderer.as
@@ -51,6 +51,7 @@ import mx.collections.IHierarchicalData;
 import mx.events.ListEvent;
 import org.apache.royale.core.ISelectableItemRenderer;
 import org.apache.royale.core.IListDataItemRenderer;
+import org.apache.royale.utils.getSelectionRenderBead;
 
 //--------------------------------------
 //  Events
@@ -231,12 +232,12 @@ public class AdvancedDataGridItemRenderer extends 
StringItemRenderer
         {
             if (styleName == "textRollOverColor")
                        {
-                               selectionBead = 
getBeadByType(ISelectableItemRenderer) as 
AdvancedDataGridSelectableItemRendererBead;
+                               selectionBead = getSelectionRenderBead(this) as 
AdvancedDataGridSelectableItemRendererBead;
                 selectionBead.textRollOverColor = String(value);
                        }
             else if (styleName == "textSelectedColor")
                        {
-                               selectionBead = 
getBeadByType(ISelectableItemRenderer) as 
AdvancedDataGridSelectableItemRendererBead;
+                               selectionBead = getSelectionRenderBead(this) as 
AdvancedDataGridSelectableItemRendererBead;
                 selectionBead.textSelectedColor = String(value);
                        }
             else
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as
index fc25a33..168d4fe 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/AdvancedDataGridView.as
@@ -36,6 +36,7 @@ package mx.controls.beads
     import org.apache.royale.events.Event;
     import org.apache.royale.events.IEventDispatcher;
     import org.apache.royale.html.DataGridButtonBar;
+    import org.apache.royale.utils.getSelectionRenderBead;
 
     use namespace mx_internal;
 
@@ -177,7 +178,7 @@ package mx.controls.beads
                 var ir:IItemRenderer = view.getItemRendererForIndex(index) as 
IItemRenderer;
                 if (ir)
                 {
-                    var selectionBead:ISelectableItemRenderer = 
ir.getBeadByType(ISelectableItemRenderer) as ISelectableItemRenderer;
+                    var selectionBead:ISelectableItemRenderer = 
getSelectionRenderBead(ir);
                     selectionBead.selected = selected;
                     selectionBead.hovered = highlighted;
                     COMPILE::JS

Reply via email to