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

carlosrovira 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 b12ff5f  jewel-datagrid: fix an issue in the view where adding and 
removing rows need to update columns in order to do scrolling when needed or 
fill white space when there's not enough rows
b12ff5f is described below

commit b12ff5fb51f66eb4f6792dbfffba4a6a109137e4
Author: Carlos Rovira <[email protected]>
AuthorDate: Sun Jan 12 22:06:52 2020 +0100

    jewel-datagrid: fix an issue in the view where adding and removing rows 
need to update columns in order to do scrolling when needed or fill white space 
when there's not enough rows
---
 .../AddListItemRendererForArrayListData.as         |  1 -
 .../royale/jewel/beads/views/DataGridView.as       | 80 ++++++++++++++++------
 2 files changed, 60 insertions(+), 21 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
index 9d74b3f..8c402ea 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/AddListItemRendererForArrayListData.as
@@ -142,7 +142,6 @@ package org.apache.royale.jewel.beads.itemRenderers
 
             fillRenderer(event.index, event.item, ir, presentationModel);
 
-
                        // update the index values in the itemRenderers to 
correspond to their shifted positions.
                        var n:int = itemRendererParent.numItemRenderers;
                        for (var i:int = event.index; i < n; i++)
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
index 2532046..6c15dd1 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
@@ -30,6 +30,7 @@ package org.apache.royale.jewel.beads.views
        import org.apache.royale.core.IUIBase;
        import org.apache.royale.core.UIBase;
        import org.apache.royale.core.ValuesManager;
+       import org.apache.royale.events.CollectionEvent;
        import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
        import org.apache.royale.html.beads.GroupView;
@@ -88,6 +89,7 @@ package org.apache.royale.jewel.beads.views
             _dg = _strand as IDataGrid;
             _dg.addEventListener("widthChanged", handleSizeChanges);
             _dg.addEventListener("heightChanged", handleSizeChanges);
+            _presentationModel = _dg.presentationModel as 
IDataGridPresentationModel;
             
             // see if there is a presentation model already in place. if not, 
add one.
             _sharedModel = _dg.model as IDataGridModel;
@@ -97,6 +99,28 @@ package org.apache.royale.jewel.beads.views
             createChildren();
                }
 
+        private var _presentationModel:IDataGridPresentationModel;
+
+        /**
+                *  Handles the itemAdded event by adding the item.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.4
+                *  @royaleignorecoercion 
org.apache.royale.core.ISelectableItemRenderer
+                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+         *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+                */
+               protected function 
handleItemAddedAndRemoved(event:CollectionEvent):void
+               {
+            for (var i:int=0; i < _lists.length; i++)
+            {
+                var list:IDataGridColumnList = _lists[i] as 
IDataGridColumnList;
+                updateColumnLayout(list);
+            }
+        }
+
         /**
                 * @private
                 */
@@ -168,6 +192,7 @@ package org.apache.royale.jewel.beads.views
             _listArea.dispatchEvent(new Event("layoutNeeded"));
         }
 
+        private var dp:IEventDispatcher;
         /**
          * @private
          * @royaleignorecoercion org.apache.royale.core.IDataGridModel
@@ -176,28 +201,44 @@ package org.apache.royale.jewel.beads.views
          */
         protected function handleDataProviderChanged(event:Event):void
         {
-            var presentationModel:IDataGridPresentationModel = 
_dg.presentationModel as IDataGridPresentationModel;
-
             for (var i:int=0; i < _lists.length; i++)
             {
                 var list:IDataGridColumnList = _lists[i] as 
IDataGridColumnList;
                 list.dataProvider = _sharedModel.dataProvider;
-                
-                COMPILE::JS
-                {
-                if(_sharedModel.dataProvider && 
_sharedModel.dataProvider.length * presentationModel.rowHeight < _dg.height)
-                {
-                    (list as UIBase).positioner.style.height = "inherit";
-                    _listArea.positioner.style.overflow = "hidden";
-                } else
-                {
-                    (list as UIBase).positioner.style.height = null;
-                    _listArea.positioner.style.overflow = null;
-                }
-                }
-            }
 
-            host.dispatchEvent(new Event("layoutNeeded"));
+                updateColumnLayout(list);
+            }
+            if(dp)
+                       {
+                               
dp.removeEventListener(CollectionEvent.ITEM_ADDED, handleItemAddedAndRemoved);
+                               
dp.removeEventListener(CollectionEvent.ITEM_REMOVED, handleItemAddedAndRemoved);
+                               
dp.removeEventListener(CollectionEvent.ALL_ITEMS_REMOVED, 
handleItemAddedAndRemoved);
+                       }
+                       dp = _sharedModel.dataProvider as IEventDispatcher;
+                       if (dp)
+            {
+                           // listen for individual items being added in the 
future.
+                           dp.addEventListener(CollectionEvent.ITEM_ADDED, 
handleItemAddedAndRemoved);
+                               
dp.addEventListener(CollectionEvent.ITEM_REMOVED, handleItemAddedAndRemoved);
+                               
dp.addEventListener(CollectionEvent.ALL_ITEMS_REMOVED, 
handleItemAddedAndRemoved);
+            }
+        }
+        
+        protected function updateColumnLayout(list:IDataGridColumnList):void
+        {   
+            COMPILE::JS
+            {
+            if(_sharedModel.dataProvider && (_sharedModel.dataProvider.length 
* _presentationModel.rowHeight) < _listArea.height)
+            {
+                (list as UIBase).positioner.style.height = "inherit";
+                _listArea.positioner.style.overflow = "hidden";
+            } else
+            {
+                (list as UIBase).positioner.style.height = null;
+                _listArea.positioner.style.overflow = null;
+            }
+            }
+            //host.dispatchEvent(new Event("layoutNeeded"));
         }
 
         /**
@@ -270,8 +311,7 @@ package org.apache.royale.jewel.beads.views
         {
             // get the name of the class to use for the columns
             var columnClass:Class = ValuesManager.valuesImpl.getValue(host, 
"columnClass") as Class;
-            var presentationModel:IDataGridPresentationModel = 
_dg.presentationModel as IDataGridPresentationModel;
-
+            
             _lists = [];
 
             for (var i:int=0; i < _sharedModel.columns.length; i++)
@@ -302,7 +342,7 @@ package org.apache.royale.jewel.beads.views
                 list.addEventListener('selectionChanged', 
handleColumnListChange);
 
                 var pm:ListPresentationModel = new ListPresentationModel();
-                pm.rowHeight = presentationModel.rowHeight;
+                pm.rowHeight = _presentationModel.rowHeight;
                 pm.align = dataGridColumn.align;
                 list.addBead(pm as IBead);
 

Reply via email to