You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2019/12/12 23:47:41 UTC
[royale-asjs] 40/42: jewel-datagrid: clean and redo some parts in
datagrid to support changes in buttonbar
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
commit 445879550aaad3ac7ec0998c1bf569d97622545d
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Fri Dec 13 00:27:58 2019 +0100
jewel-datagrid: clean and redo some parts in datagrid to support changes in buttonbar
---
.../royale/jewel/beads/layouts/DataGridLayout.as | 21 +--
.../royale/jewel/beads/views/DataGridView.as | 146 ++++++++++-----------
.../supportClasses/datagrid/DataGridListArea.as | 5 +-
.../Jewel/src/main/sass/components/_datagrid.sass | 65 ++-------
4 files changed, 96 insertions(+), 141 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/DataGridLayout.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/DataGridLayout.as
index 8dff87f..bec60ca 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/layouts/DataGridLayout.as
@@ -20,13 +20,10 @@ package org.apache.royale.jewel.beads.layouts
{
import org.apache.royale.collections.ArrayList;
import org.apache.royale.core.IBeadLayout;
- import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
import org.apache.royale.core.IDataGridModel;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
import org.apache.royale.core.UIBase;
- import org.apache.royale.core.ValuesManager;
- import org.apache.royale.core.layout.EdgeData;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.IDataGridView;
@@ -113,24 +110,26 @@ package org.apache.royale.jewel.beads.layouts
// in the bbmodel, so do all layout based on the bbmodel, not the set
// of columns that may contain invisible columns
var bbmodel:ButtonBarModel = header.getBeadByType(ButtonBarModel) as ButtonBarModel;
+ var bblayout:ButtonBarLayout = header.getBeadByType(ButtonBarLayout) as ButtonBarLayout;
+ // (header as ButtonBar).widthType = ButtonBarModel.PROPORTIONAL_WIDTHS;
var listArea:IUIBase = (uiHost.view as IDataGridView).listArea;
var displayedColumns:Array = (uiHost.view as IDataGridView).columnLists;
var model:IDataGridModel = uiHost.model as IDataGridModel;
- var borderMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderMetrics(_strand as IUIBase);
- var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
-
- var defaultColumnWidth:Number = (useWidth) / bbmodel.dataProvider.length;
+ var defaultColumnWidth:Number = (uiHost.percentWidth) / bbmodel.dataProvider.length;
var columnWidths:Array = [];
for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
var columnDef:IDataGridColumn = (bbmodel.dataProvider as ArrayList).getItemAt(i) as IDataGridColumn;
var columnList:UIBase = displayedColumns[i] as UIBase;
+ //temporal- if only 1 isNaN(columnDef.columnWidth) make it true so widthType = ButtonBarModel.PIXEL_WIDTHS
+ var pixelflag:Boolean = false;
var columnWidth:Number = defaultColumnWidth;
if (!isNaN(columnDef.columnWidth)) {
columnWidth = columnDef.columnWidth;
+ pixelflag = true;
}
columnList.width = columnWidth;
@@ -138,6 +137,12 @@ package org.apache.royale.jewel.beads.layouts
}
bbmodel.buttonWidths = columnWidths;
+ if(pixelflag)
+ {
+ // bbmodel.widthType = ButtonBarModel.PIXEL_WIDTHS;
+ bblayout.widthType = ButtonBarModel.PIXEL_WIDTHS;
+ // bblayout.layout();
+ }
header.dispatchEvent(new Event("layoutNeeded"));
listArea.dispatchEvent(new Event("layoutNeeded"));
@@ -145,4 +150,4 @@ package org.apache.royale.jewel.beads.layouts
return true;
}
}
-}
+}
\ No newline at end of file
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 93cffd8..15874af 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
@@ -25,26 +25,29 @@ package org.apache.royale.jewel.beads.views
import org.apache.royale.core.IChild;
import org.apache.royale.core.IDataGridModel;
import org.apache.royale.core.IDataGridPresentationModel;
- import org.apache.royale.core.ILayoutChild;
import org.apache.royale.core.IParent;
+ import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
import org.apache.royale.core.ValuesManager;
- import org.apache.royale.debugging.assert;
import org.apache.royale.events.Event;
import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.html.beads.GroupView;
import org.apache.royale.html.beads.IDataGridView;
- import org.apache.royale.html.beads.layouts.ButtonBarLayout;
+ import org.apache.royale.jewel.beads.layouts.ButtonBarLayout;
import org.apache.royale.jewel.supportClasses.Viewport;
import org.apache.royale.jewel.supportClasses.datagrid.DataGridButtonBar;
import org.apache.royale.jewel.supportClasses.datagrid.IDataGrid;
import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumn;
import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
-
+ import org.apache.royale.core.UIBase;
+
/**
* The DataGridView class is the visual bead for the org.apache.royale.jewel.DataGrid.
* This class constructs the items that make the DataGrid: Lists for each column and a
* org.apache.royale.jewel.ButtonBar for the column headers.
+ *
+ * Columns without specific columnWidths gets 1/n of the maximun space available where n is the
+ * number of columns.
*
* @viewbead
* @langversion 3.0
@@ -67,11 +70,60 @@ package org.apache.royale.jewel.beads.views
super();
}
+ private var _dg:IDataGrid = _strand as IDataGrid;
+ private var _sharedModel:IDataGridModel;
private var _header:DataGridButtonBar;
private var _listArea:IUIBase;
-
private var _lists:Array;
+ COMPILE::JS
+ private var rq:int;
+
+ override public function set strand(value:IStrand):void
+ {
+ super.strand = value;
+
+ _dg = _strand as IDataGrid;
+ _dg.addEventListener("widthChanged", handleSizeChanges);
+ _dg.addEventListener("heightChanged", handleSizeChanges);
+
+ // see if there is a presentation model already in place. if not, add one.
+ _sharedModel = _dg.model as IDataGridModel;
+ IEventDispatcher(_sharedModel).addEventListener("dataProviderChanged", handleDataProviderChanged);
+ IEventDispatcher(_sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
+
+ createChildren();
+ }
+
+ /**
+ * @private
+ */
+ private function createChildren():void
+ {
+ // header
+ var headerClass:Class = ValuesManager.valuesImpl.getValue(host, "headerClass") as Class;
+ _header = new headerClass() as DataGridButtonBar;
+ _header.dataProvider = new ArrayList(_sharedModel.columns);
+ _header.emphasis = _dg.emphasis;
+ _header.labelField = "label";
+ var headerLayoutClass:Class = ValuesManager.valuesImpl.getValue(host, "headerLayoutClass") as Class;
+ var bblayout:ButtonBarLayout = new headerLayoutClass() as ButtonBarLayout;
+ _header.addBead(bblayout as IBead);
+ _header.addBead(new Viewport() as IBead);
+ _sharedModel.headerModel = _header.model as IBeadModel;
+ _dg.strandChildren.addElement(_header as IChild);
+
+ // columns
+ var listAreaClass:Class = ValuesManager.valuesImpl.getValue(host, "listAreaClass") as Class;
+ _listArea = new listAreaClass() as IUIBase;
+ _dg.strandChildren.addElement(_listArea as IChild);
+
+ if (_sharedModel.columns)
+ createLists();
+
+ handleDataProviderChanged(null);
+ }
+
/**
* An array of List objects the comprise the columns of the DataGrid.
*/
@@ -82,7 +134,6 @@ package org.apache.royale.jewel.beads.views
/**
* The area used to hold the columns
- *
*/
public function get listArea():IUIBase
{
@@ -97,63 +148,19 @@ package org.apache.royale.jewel.beads.views
return _header;
}
- // public function refreshContent():void
- // {
- // handleInitComplete(null);
- // }
-
/**
* @private
* @royaleignorecoercion org.apache.royale.core.IDataGridModel
* @royaleignorecoercion org.apache.royale.core.IBead
* @royaleignorecoercion org.apache.royale.core.IBeadModel
* @royaleignorecoercion org.apache.royale.core.IChild
- * @royaleignorecoercion org.apache.royale.core.ILayoutChild
* @royaleignorecoercion org.apache.royale.core.IUIBase
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
*/
override protected function handleInitComplete(event:Event):void
{
- var host:IDataGrid = _strand as IDataGrid;
-
- // see if there is a presentation model already in place. if not, add one.
- var sharedModel:IDataGridModel = host.model as IDataGridModel;
- IEventDispatcher(sharedModel).addEventListener("dataProviderChanged", handleDataProviderChanged);
- IEventDispatcher(sharedModel).addEventListener("selectedIndexChanged", handleSelectedIndexChanged);
-
- var columnContainerClass:Class = ValuesManager.valuesImpl.getValue(host, "columnContainerClass") as Class;
- assert(columnContainerClass != null,"columnContainerClass for DataGrid must be set!")
- _header = new columnContainerClass() as DataGridButtonBar;
- // header's height is set in CSS
- _header.percentWidth = 100;
- _header.dataProvider = new ArrayList(sharedModel.columns);
- _header.emphasis = host.emphasis;
- _header.labelField = "label";
- sharedModel.headerModel = _header.model as IBeadModel;
-
- var listAreaClass:Class = ValuesManager.valuesImpl.getValue(host, "listAreaClass") as Class;
- assert(listAreaClass != null,"listAreaClass for DataGrid must be set!")
- _listArea = new listAreaClass() as IUIBase;
- (_listArea as ILayoutChild).percentWidth = 100;
-
- if (sharedModel.columns)
- createLists();
-
- var columnLayoutClass:Class = ValuesManager.valuesImpl.getValue(host, "columnLayoutClass") as Class;
- assert(columnLayoutClass != null,"columnLayoutClass for DataGrid must be set!")
- var bblayout:ButtonBarLayout = new columnLayoutClass() as ButtonBarLayout;
- _header.addBead(bblayout as IBead);
- _header.addBead(new Viewport() as IBead);
- host.strandChildren.addElement(_header as IChild);
-
- host.strandChildren.addElement(_listArea as IChild);
-
- handleDataProviderChanged(event);
-
- host.addEventListener("widthChanged", handleSizeChanges);
- host.addEventListener("heightChanged", handleSizeChanges);
-
- host.dispatchEvent(new Event("dataGridViewCreated"));
+ // _header.dispatchEvent(new Event("layoutNeeded"));
+ // _listArea.dispatchEvent(new Event("layoutNeeded"));
}
/**
@@ -161,8 +168,8 @@ package org.apache.royale.jewel.beads.views
*/
private function handleSizeChanges(event:Event):void
{
- _header.dispatchEvent(new Event("layoutChanged"));
- _listArea.dispatchEvent(new Event("layoutChanged"));
+ _header.dispatchEvent(new Event("layoutNeeded"));
+ _listArea.dispatchEvent(new Event("layoutNeeded"));
}
/**
@@ -172,11 +179,10 @@ package org.apache.royale.jewel.beads.views
*/
protected function handleDataProviderChanged(event:Event):void
{
- var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
for (var i:int=0; i < _lists.length; i++)
{
var list:IDataGridColumnList = _lists[i] as IDataGridColumnList;
- list.dataProvider = sharedModel.dataProvider;
+ list.dataProvider = _sharedModel.dataProvider;
}
host.dispatchEvent(new Event("layoutNeeded"));
}
@@ -188,8 +194,7 @@ package org.apache.royale.jewel.beads.views
*/
private function handleSelectedIndexChanged(event:Event):void
{
- var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
- var newIndex:int = sharedModel.selectedIndex;
+ var newIndex:int = _sharedModel.selectedIndex;
for (var i:int=0; i < _lists.length; i++)
{
@@ -205,9 +210,8 @@ package org.apache.royale.jewel.beads.views
*/
private function handleColumnListChange(event:Event):void
{
- var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
var list:IDataGridColumnList = event.target as IDataGridColumnList;
- sharedModel.selectedIndex = list.selectedIndex;
+ _sharedModel.selectedIndex = list.selectedIndex;
for(var i:int=0; i < _lists.length; i++) {
if (list != _lists[i]) {
@@ -225,9 +229,8 @@ package org.apache.royale.jewel.beads.views
*/
private function handleColumnListRollOverChange(event:Event):void
{
- var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
var list:IDataGridColumnList = event.target as IDataGridColumnList;
- sharedModel.rollOverIndex = list.rollOverIndex;
+ _sharedModel.rollOverIndex = list.rollOverIndex;
for(var i:int=0; i < _lists.length; i++) {
if (list != _lists[i]) {
@@ -252,20 +255,15 @@ package org.apache.royale.jewel.beads.views
*/
protected function createLists():void
{
- var host:IDataGrid = _strand as IDataGrid;
-
// get the name of the class to use for the columns
var columnClass:Class = ValuesManager.valuesImpl.getValue(host, "columnClass") as Class;
- assert(columnClass != null, "ColumnClass for DataGrid must be set!")
-
- var sharedModel:IDataGridModel = host.model as IDataGridModel;
- var presentationModel:IDataGridPresentationModel = host.presentationModel as IDataGridPresentationModel;
+ var presentationModel:IDataGridPresentationModel = _dg.presentationModel as IDataGridPresentationModel;
_lists = [];
- for (var i:int=0; i < sharedModel.columns.length; i++)
+ for (var i:int=0; i < _sharedModel.columns.length; i++)
{
- var dataGridColumn:IDataGridColumn = sharedModel.columns[i] as IDataGridColumn;
+ var dataGridColumn:IDataGridColumn = _sharedModel.columns[i] as IDataGridColumn;
var list:IDataGridColumnList = new columnClass();
@@ -273,7 +271,7 @@ package org.apache.royale.jewel.beads.views
{
list.className = "first";
}
- else if (i == sharedModel.columns.length-1)
+ else if (i == _sharedModel.columns.length-1)
{
list.className = "last";
}
@@ -282,8 +280,8 @@ package org.apache.royale.jewel.beads.views
list.className = "middle";
}
- list.id = "dataGridColumn" + i;
- list.dataProvider = sharedModel.dataProvider;
+ // by default make columns get the 1/n of the maximun space available
+ (list as UIBase).percentWidth = 100 / _sharedModel.columns.length;
list.itemRenderer = dataGridColumn.itemRenderer;
list.labelField = dataGridColumn.dataField;
list.addEventListener('rollOverIndexChanged', handleColumnListRollOverChange);
@@ -293,8 +291,6 @@ package org.apache.royale.jewel.beads.views
(_listArea as IParent).addElement(list as IChild);
_lists.push(list);
}
-
- host.dispatchEvent(new Event("layoutNeeded"));
}
}
}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridListArea.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridListArea.as
index 38bd6d8..c818bca 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridListArea.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridListArea.as
@@ -26,10 +26,7 @@ package org.apache.royale.jewel.supportClasses.datagrid
{
super();
- // COMPILE::JS
- // {
- // typeNames = 'jewel dataGridListArea';
- // }
+ typeNames = 'listarea';
}
}
}
\ No newline at end of file
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_datagrid.sass b/frameworks/projects/Jewel/src/main/sass/components/_datagrid.sass
index 6af0bc2..f3215d2 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_datagrid.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_datagrid.sass
@@ -26,12 +26,17 @@ $border-radius: .25rem
height: 290px
.jewel.buttonbar.header
+ width: 100%
+
.jewel.button
&.first
border-bottom-left-radius: 0
&.last
border-bottom-right-radius: 0
+
+ .listarea
+ width: 100%
.jewel.list.column
border-radius: 0px
@@ -54,36 +59,20 @@ j|DataGrid
IBeadView: ClassReference("org.apache.royale.jewel.beads.views.DataGridView")
IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridCollectionViewModel")
IBeadLayout: ClassReference("org.apache.royale.jewel.beads.layouts.DataGridLayout")
- columnClass: ClassReference("org.apache.royale.jewel.supportClasses.datagrid.DataGridColumnList")
- columnContainerClass: ClassReference("org.apache.royale.jewel.supportClasses.datagrid.DataGridButtonBar")
- columnLayoutClass: ClassReference("org.apache.royale.html.beads.layouts.ButtonBarLayout")
+ headerClass: ClassReference("org.apache.royale.jewel.supportClasses.datagrid.DataGridButtonBar")
+ headerLayoutClass: ClassReference("org.apache.royale.jewel.beads.layouts.ButtonBarLayout")
listAreaClass: ClassReference("org.apache.royale.jewel.supportClasses.datagrid.DataGridListArea")
+ columnClass: ClassReference("org.apache.royale.jewel.supportClasses.datagrid.DataGridColumnList")
j|DataGridListArea
IBeadView: ClassReference("org.apache.royale.html.beads.ContainerView")
IBeadLayout: ClassReference("org.apache.royale.jewel.beads.layouts.HorizontalLayout")
IViewport: ClassReference("org.apache.royale.jewel.supportClasses.scrollbar.ScrollingViewport")
IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel")
-//align-items: flex-start
-// DataGridListArea {
-// background-color: #FFFFFF
-// IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.HorizontalLayout")
-// IViewport: ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport")
-// IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel")
-// flex-grow: 1
-// }
-
-// j|DataGridColumnList
-// IBeadView: ClassReference("org.apache.royale.html.beads.ListView")
-// IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController")
-// IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout")
-// IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory")
-// IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer")
-// IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridModel")
-// IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")
-// IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport")
-// IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel")
+//Nothing to change from j|ButtonBar
+j|DataGridButtonBar
+// flex-grow: 1
// DynamicDataGrid {
// IChangePropagator: ClassReference("org.apache.royale.html.beads.DataGridColumnChangePropagator")
@@ -97,38 +86,6 @@ j|DataGridListArea
// border: 1px solid #222222
// }
-// DataGridButtonBar
-// {
-// IBeadModel: ClassReference("org.apache.royale.html.beads.models.ButtonBarModel")
-// IBeadView: ClassReference("org.apache.royale.html.beads.ButtonBarView")
-// IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController")
-// IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.ButtonBarLayout")
-// IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.TextItemRendererFactoryForArrayData")
-// IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory")
-// IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.TextButtonItemRenderer")
-
-// border-style: none
-// height: 40px
-// min-height: 40px
-// flex-grow: 0
-// }
-
-// DataGridColumnList {
-// IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridModel")
-// IBeadView: ClassReference("org.apache.royale.html.beads.ListView")
-// IBeadController: ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController")
-// IBeadLayout: ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout")
-// IDataProviderItemRendererMapper: ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData")
-// IItemRendererClassFactory: ClassReference("org.apache.royale.core.ItemRendererClassFactory")
-// IItemRenderer: ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer")
-// IViewport: ClassReference("org.apache.royale.html.supportClasses.Viewport")
-// IViewportModel: ClassReference("org.apache.royale.html.beads.models.ViewportModel")
-// border-style: none
-// background-color: #FFFFFF
-// }
-
-
-
// DynamicDataGridColumnList {
// IBeadModel: ClassReference("org.apache.royale.html.beads.models.DataGridCollectionViewModel")
// IBeadView: ClassReference("org.apache.royale.html.beads.ListView")