You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2019/11/01 23:16:05 UTC
[royale-asjs] branch develop updated: handle scenario where no
columns are specified and generate columns later when dataprovider is
specified
This is an automated email from the ASF dual-hosted git repository.
aharui 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 71992d7 handle scenario where no columns are specified and generate columns later when dataprovider is specified
71992d7 is described below
commit 71992d72bee42de02b6da4c2e89552a6a963cce2
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Nov 1 16:15:42 2019 -0700
handle scenario where no columns are specified and generate columns later when dataprovider is specified
---
.../org/apache/royale/html/beads/DataGridView.as | 7 +-
.../mx/controls/beads/AdvancedDataGridView.as | 2 +
.../main/royale/mx/controls/beads/DataGridView.as | 114 +++++++++++++++++++--
.../beads/layouts/AdvancedDataGridLayout.as | 1 +
.../mx/controls/beads/layouts/DataGridLayout.as | 19 ++--
5 files changed, 128 insertions(+), 15 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
index 7f77b65..0e7d8ec 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/DataGridView.as
@@ -134,7 +134,8 @@ package org.apache.royale.html.beads
_listArea = new listAreaClass() as IUIBase;
(_listArea as ILayoutChild).percentWidth = 100;
- createLists();
+ if (sharedModel.columns)
+ createLists();
var columnLayoutClass:Class = ValuesManager.valuesImpl.getValue(host, "columnLayoutClass") as Class;
assert(columnLayoutClass != null,"columnLayoutClass for DataGrid must be set!")
@@ -165,7 +166,7 @@ package org.apache.royale.html.beads
/**
* @private
*/
- private function handleDataProviderChanged(event:Event):void
+ protected function handleDataProviderChanged(event:Event):void
{
var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
for (var i:int=0; i < _lists.length; i++)
@@ -226,7 +227,7 @@ package org.apache.royale.html.beads
* @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
* @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumn
*/
- private function createLists():void
+ protected function createLists():void
{
var host:IDataGrid = _strand as IDataGrid;
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 38764f6..c3bcfe7 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
@@ -67,6 +67,8 @@ package mx.controls.beads
private function handleColumnsInvalid(event:Event):void
{
+ if (!columnLists) return;
+
var host:IDataGrid = _strand as IDataGrid;
var sharedModel:IDataGridModel = (host.model as IDataGridModel);
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
index 0070e03..94707d2 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridView.as
@@ -18,15 +18,24 @@
////////////////////////////////////////////////////////////////////////////////
package mx.controls.beads
{
+ import mx.collections.CursorBookmark;
+ import mx.collections.ICollectionView;
+ import mx.collections.IViewCursor;
+ import mx.controls.AdvancedDataGrid;
+ import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
+ import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList;
+ import mx.events.CollectionEvent;
+ import mx.utils.ObjectUtil;
+
+ import org.apache.royale.core.IBeadModel;
import org.apache.royale.core.IDataGrid;
+ import org.apache.royale.core.IDataGridModel;
import org.apache.royale.core.UIBase;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.DataGridView;
-
- import mx.events.CollectionEvent;
- import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList;
- import mx.controls.AdvancedDataGrid;
+ import org.apache.royale.html.DataGridButtonBar;
+ import org.apache.royale.html.supportClasses.IDataGridColumnList;
/**
* The AlertView class.
@@ -52,10 +61,15 @@ package mx.controls.beads
override protected function handleInitComplete(event:Event):void
{
- super.handleInitComplete(event);
-
var host:IDataGrid = _strand as IDataGrid;
+ if (host.model.columns == null && host.model.dataProvider != null)
+ {
+ generateCols();
+ }
+
+ super.handleInitComplete(event);
+
IEventDispatcher(host).addEventListener(CollectionEvent.COLLECTION_CHANGE, handleCollectionChanged);
if (host.model.dataProvider != null && host.model.dataProvider.length > 0)
{
@@ -79,5 +93,93 @@ package mx.controls.beads
host.dispatchEvent(new Event("layoutNeeded"));
}
+
+ /**
+ * @private
+ */
+ override protected function handleDataProviderChanged(event:Event):void
+ {
+ var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+ if (sharedModel.columns == null && sharedModel.dataProvider != null)
+ {
+ generateCols();
+ createLists();
+ (header as DataGridButtonBar).dataProvider = sharedModel.columns;
+ }
+ if (sharedModel.columns == null)
+ return;
+ super.handleDataProviderChanged(event);
+ }
+
+ /**
+ * @private
+ * Searches the iterator to determine columns.
+ */
+ private function generateCols():void
+ {
+ var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+ if (sharedModel.dataProvider.length > 0)
+ {
+ var col:AdvancedDataGridColumn;
+ var newCols:Array = [];
+ var cols:Array;
+ if (sharedModel.dataProvider)
+ {
+ var iterator:IViewCursor = sharedModel.dataProvider.createCursor();
+ //try
+ //{
+ iterator.seek(CursorBookmark.FIRST);
+ //}
+ /*
+ catch (e:ItemPendingError)
+ {
+ lastSeekPending = new ListBaseSeekPending(CursorBookmark.FIRST, 0);
+ e.addResponder(new ItemResponder(generateColumnsPendingResultHandler, seekPendingFailureHandler,
+ lastSeekPending));
+ iteratorValid = false;
+ return;
+ }
+ */
+ var info:Object =
+ ObjectUtil.getClassInfo(iterator.current,
+ ["uid", "mx_internal_uid"]);
+
+ if(info)
+ cols = info.properties;
+ }
+
+ if (!cols)
+ {
+ // introspect the first item and use its fields
+ var itmObj:Object = iterator.current;
+ for (var p:String in itmObj)
+ {
+ if (p != "uid")
+ {
+ col = new AdvancedDataGridColumn();
+ col.dataField = p;
+ newCols.push(col);
+ }
+ }
+ }
+ else
+ {
+ // this is an old recordset - use its columns
+ var n:int = cols.length;
+ var colName:Object;
+ for (var i:int = 0; i < n; i++)
+ {
+ colName = cols[i];
+ if (colName is QName)
+ colName = QName(colName).localName;
+ col = new AdvancedDataGridColumn();
+ col.dataField = String(colName);
+ newCols.push(col);
+ }
+ }
+ sharedModel.columns = newCols;
+ //generatedColumns = true;
+ }
+ }
}
}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridLayout.as
index 37216e4..6bf8694 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridLayout.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/AdvancedDataGridLayout.as
@@ -100,6 +100,7 @@ package mx.controls.beads.layouts
var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
var displayedColumns:Array = (uiHost.view as IDataGridView).columnLists;
+ if (!displayedColumns) return retval;
var n:int = displayedColumns.length;
var listArea:IUIBase = (uiHost.view as IDataGridView).listArea;
COMPILE::JS
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
index bfca4d7..9f47d19 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
@@ -74,12 +74,19 @@ package mx.controls.beads.layouts
var totalWidths:Number = 0;
var unspecifiedWidths:int = 0;
- for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
- var columnDef:DataGridColumn = bbmodel.dataProvider[i] as DataGridColumn;
- if (!isNaN(columnDef.width))
- totalWidths += columnDef.width;
- else
- unspecifiedWidths++;
+ if (bbmodel.dataProvider)
+ {
+ for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
+ var columnDef:DataGridColumn = bbmodel.dataProvider[i] as DataGridColumn;
+ if (!isNaN(columnDef.width))
+ totalWidths += columnDef.width;
+ else
+ unspecifiedWidths++;
+ }
+ }
+ else
+ {
+ return true;
}
if (unspecifiedWidths > 0 && totalWidths > 0)