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