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);