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/12/28 04:55:47 UTC

[royale-asjs] branch adg_grouped updated (49ff2c7 -> 19391b2)

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

aharui pushed a change to branch adg_grouped
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git.


    from 49ff2c7  column headers now display text, but we still need to display the group header
     new 498b559  some abstractions for the subclasses
     new 19391b2  grouped columns appear in the right places.  Next is to improve the visuals

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/royale/html/beads/DataGridView.as   |   2 +-
 .../royale/html/beads/layouts/DataGridLayout.as    |  33 +++++--
 .../MXRoyale/src/main/resources/defaults.css       |   3 +-
 ...ckLayout.as => AdvancedDataGridHeaderLayout.as} | 100 +++++++++++++--------
 .../main/royale/mx/controls/AdvancedDataGrid.as    |   5 +-
 .../AdvancedDataGridButtonBar.as                   |   9 ++
 .../AdvancedDataGridHeaderRenderer.as              |  54 +++++++++--
 .../mx/controls/beads/AdvancedDataGridView.as      |  18 +++-
 .../main/royale/mx/controls/beads/DataGridView.as  |   4 +
 .../beads/layouts/AdvancedDataGridLayout.as        |  36 ++++++++
 .../mx/controls/beads/layouts/DataGridLayout.as    |  28 +++---
 11 files changed, 220 insertions(+), 72 deletions(-)
 copy frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/{ViewStackLayout.as => AdvancedDataGridHeaderLayout.as} (50%)


[royale-asjs] 02/02: grouped columns appear in the right places. Next is to improve the visuals

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch adg_grouped
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 19391b26d83df985cf0bfb26a8f60bfec1a94ccd
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Dec 27 20:55:33 2019 -0800

    grouped columns appear in the right places.  Next is to improve the visuals
---
 .../MXRoyale/src/main/resources/defaults.css       |   3 +-
 .../beads/AdvancedDataGridHeaderLayout.as          | 161 +++++++++++++++++++++
 .../main/royale/mx/controls/AdvancedDataGrid.as    |   5 +-
 .../AdvancedDataGridButtonBar.as                   |   9 ++
 .../AdvancedDataGridHeaderRenderer.as              |  54 ++++++-
 .../mx/controls/beads/AdvancedDataGridView.as      |  18 ++-
 .../main/royale/mx/controls/beads/DataGridView.as  |   4 +
 .../beads/layouts/AdvancedDataGridLayout.as        |  36 +++++
 .../mx/controls/beads/layouts/DataGridLayout.as    |  28 ++--
 9 files changed, 290 insertions(+), 28 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index 0001694..f07e80a 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -76,6 +76,7 @@ Basic|DataGridButtonBar {
 
 adg|AdvancedDataGridButtonBar {
 	IItemRenderer: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridHeaderRenderer");
+	position: absolute;
 }
 
 AdvancedDataGrid
@@ -89,7 +90,7 @@ AdvancedDataGrid
 	IDataProviderNotifier: ClassReference("mx.controls.beads.DataProviderChangeNotifier");
 	columnClass: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList");
 	columnContainerClass: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridButtonBar");
-	columnLayoutClass: ClassReference("org.apache.royale.html.beads.layouts.ButtonBarLayout");
+	columnLayoutClass: ClassReference("mx.containers.beads.AdvancedDataGridHeaderLayout");
 	listAreaClass: ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridListArea");
 	
 	background-color: #FFFFFF;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/AdvancedDataGridHeaderLayout.as b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/AdvancedDataGridHeaderLayout.as
new file mode 100644
index 0000000..8d3ffc3
--- /dev/null
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/containers/beads/AdvancedDataGridHeaderLayout.as
@@ -0,0 +1,161 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.containers.beads
+{
+	import mx.core.EdgeMetrics;
+	import mx.core.UIComponent;
+	
+	import org.apache.royale.core.LayoutBase;
+	import org.apache.royale.geom.Rectangle;
+    import org.apache.royale.core.IBeadLayout;
+    import org.apache.royale.core.ILayoutChild;
+    import org.apache.royale.core.ILayoutView;
+    import org.apache.royale.core.IStyleableObject;
+    import org.apache.royale.core.IStrand;
+    import org.apache.royale.html.beads.models.ButtonBarModel;
+
+/*
+import mx.core.mx_internal;
+import mx.events.ChildExistenceChangedEvent;
+import mx.events.MoveEvent;
+import mx.resources.IResourceManager;
+import mx.resources.ResourceManager;
+import flash.utils.Dictionary;
+
+use namespace mx_internal;
+*/
+
+/**
+ *  @private
+ *  The AdvancedDataGridHeaderLayout class is for internal use only.
+ */
+public class AdvancedDataGridHeaderLayout extends LayoutBase
+{
+    
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
+    public function AdvancedDataGridHeaderLayout()
+    {
+        super();
+    }
+	
+	//--------------------------------------------------------------------------
+	//
+	//  Properties
+	//
+	//--------------------------------------------------------------------------
+	
+	private var _strand:IStrand;
+	
+	override public function set strand(value:IStrand):void
+	{
+		_strand = value;
+		super.strand = value;
+		
+	}
+	
+    private var _buttonWidths:Array = null;
+    
+    /**
+     *  An array of widths (Number), one per button. These values supersede the
+     *  default of equally-sized buttons.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9
+     */
+    public function get buttonWidths():Array
+    {
+        return _buttonWidths;
+    }
+    public function set buttonWidths(value:Array):void
+    {
+        _buttonWidths = value;
+    }
+    
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+
+	override public function layout():Boolean
+	{
+        var contentView:ILayoutView = layoutView;
+        
+        var model:ButtonBarModel = (host as IStrand).getBeadByType(ButtonBarModel) as ButtonBarModel;
+        if (model) {
+            buttonWidths = model.buttonWidths;
+        }
+        
+        var n:int = contentView.numElements;
+        if (n <= 0) return false;
+        
+        var xx:Number = 0;
+        
+        for (var i:int=0; i < n; i++)
+        {	
+            var ilc:ILayoutChild = contentView.getElementAt(i) as ILayoutChild;
+            if (ilc == null || !ilc.visible) continue;
+            if (!(ilc is IStyleableObject)) continue;
+            
+            COMPILE::SWF {
+                if (buttonWidths) {
+                    var widthValue:* = buttonWidths[i];
+                    
+                    if (widthValue != null) ilc.width = Number(widthValue);
+                    ilc.x = xx;
+                    xx += ilc.width;
+                }
+            }
+                
+            COMPILE::JS {
+                // otherwise let the flexbox layout handle matters on its own.
+                if (buttonWidths) {
+                    var widthValue:* = buttonWidths[i];
+                    if (widthValue != null) ilc.width = Number(widthValue);
+                    ilc.x = xx;
+                    xx += ilc.width;
+                }                
+                if (!host.isHeightSizedToContent())
+                    ilc.height = contentView.height;
+            }
+        }
+        
+        return true;
+	}
+}
+}
+
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/AdvancedDataGrid.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/AdvancedDataGrid.as
index 96b7961..4be01c0 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/AdvancedDataGrid.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/AdvancedDataGrid.as
@@ -48,12 +48,12 @@ package mx.controls
     import mx.collections.IViewCursor;
     import mx.collections.Sort;
     import mx.collections.SortField;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
     import mx.controls.beads.AdvancedDataGridSortBead;
     import mx.controls.beads.AdvancedDataGridView;
     import mx.controls.beads.DataGridColumnResizeBead;
     import mx.controls.beads.DataGridLinesBeadForICollectionView;
-    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
-    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
     import mx.controls.dataGridClasses.DataGridColumn;
     import mx.controls.listClasses.AdvancedListBase;
     import mx.core.mx_internal;
@@ -6442,6 +6442,7 @@ public class AdvancedDataGrid extends AdvancedListBase implements IDataGrid
         var i:int=0; 
         while (i < groupedColumns.length)
         {
+            (groupedColumns[i] as AdvancedDataGridColumn).owner = this;
             if (groupedColumns[i] is AdvancedDataGridColumnGroup && groupedColumns[i].children && groupedColumns[i].children.length >0)
             {
                 var prefix:Array = groupedColumns.slice(0,i);
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridButtonBar.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridButtonBar.as
index 1fbfb95..758ca4d 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridButtonBar.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridButtonBar.as
@@ -20,6 +20,8 @@
 package mx.controls.advancedDataGridClasses
 {
 
+    import mx.containers.beads.AdvancedDataGridHeaderLayout;
+    
     import org.apache.royale.html.DataGridButtonBar;
 
     /**
@@ -39,6 +41,13 @@ package mx.controls.advancedDataGridClasses
             typeNames += " AdvancedDataGridButtonBar";
 
         }
+        
+        override public function addedToParent():void
+        {
+            var layout:AdvancedDataGridHeaderLayout = new AdvancedDataGridHeaderLayout();
+            addBead(layout);
+            super.addedToParent();
+        }
 
     }
 
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
index 3c196c0..2dac500 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/advancedDataGridClasses/AdvancedDataGridHeaderRenderer.as
@@ -29,6 +29,8 @@ import flash.geom.Rectangle;
 import flash.text.TextLineMetrics;
 */
 import mx.controls.AdvancedDataGrid;
+import mx.controls.advancedDataGridClasses.AdvancedDataGridButtonBar;
+import mx.controls.dataGridClasses.DataGridColumn;
 import mx.controls.listClasses.BaseListData;
 import mx.controls.listClasses.IDropInListItemRenderer;
 import mx.controls.listClasses.IListItemRenderer;
@@ -37,18 +39,22 @@ import mx.core.IDataRenderer;
 import mx.core.IFactory;
 import mx.core.IInvalidating;
 import mx.core.IToolTip;
+import mx.core.IUIComponent;
 import mx.core.IUITextField;
 import mx.core.UIComponent;
 import mx.core.UITextField;
 import mx.core.mx_internal;
 import mx.events.FlexEvent;
 import mx.events.ToolTipEvent;
-import mx.core.IUIComponent;
-import org.apache.royale.geom.Point;
+import mx.managers.ISystemManager;
+
+import org.apache.royale.core.IChild;
 import org.apache.royale.core.TextLineMetrics;
-import org.apache.royale.geom.Rectangle;
 import org.apache.royale.events.Event;
 import org.apache.royale.events.MouseEvent;
+import org.apache.royale.geom.Point;
+import org.apache.royale.geom.Rectangle;
+import org.apache.royale.html.DataGridButtonBar;
 
 use namespace mx_internal;
 
@@ -186,11 +192,6 @@ public class AdvancedDataGridHeaderRenderer extends UIComponent implements IData
 
         // InteractiveObject variables.
         tabEnabled   = false;
-        COMPILE::JS
-        {
-            isAbsolute = false;
-        }
-
         addEventListener(ToolTipEvent.TOOL_TIP_SHOW, toolTipShowHandler); 
     }
     
@@ -427,6 +428,8 @@ public class AdvancedDataGridHeaderRenderer extends UIComponent implements IData
             addChild(background);
         }
     } 
+    
+    private var childHeaders:DataGridButtonBar;
 
     /**
      *  @private
@@ -521,6 +524,13 @@ public class AdvancedDataGridHeaderRenderer extends UIComponent implements IData
                 {
                     toolTip = null;
                 }
+                if (data is AdvancedDataGridColumnGroup)
+                {
+                    var adgcg:AdvancedDataGridColumnGroup = data as AdvancedDataGridColumnGroup;
+                    childHeaders = new AdvancedDataGridButtonBar();
+                    childHeaders.dataProvider = adgcg.children;
+                    addElement(childHeaders);                    
+                }
              }
         }
         else
@@ -774,6 +784,18 @@ public class AdvancedDataGridHeaderRenderer extends UIComponent implements IData
             background.graphics.endFill();
             setChildIndex( IUIComponent(background), 0 );
         }
+        if (childHeaders)
+        {
+            var adgcg:AdvancedDataGridColumnGroup = data as AdvancedDataGridColumnGroup;
+            var buttonWidths:Array = [];
+            for (var i:int = 0; i < adgcg.children.length; i++)
+                buttonWidths.push((adgcg.children[i] as DataGridColumn).columnWidth);
+            childHeaders.buttonWidths = buttonWidths;
+            childHeaders.height = unscaledHeight / 2;
+            childHeaders.width = unscaledWidth;
+            childHeaders.x = 0;
+            childHeaders.y = unscaledHeight / 2;
+        }
     } 
 
     //--------------------------------------------------------------------------
@@ -884,7 +906,23 @@ public class AdvancedDataGridHeaderRenderer extends UIComponent implements IData
         return label;
     } 
 
+    override public function setWidth(value:Number, noEvent:Boolean = false):void
+    {
+        super.setWidth(value, noEvent);
+        updateDisplayList(width, height);
+    }
 
+    override public function get systemManager():ISystemManager
+    {
+        var sm:ISystemManager = super.systemManager;
+        if (!sm)
+        {
+            // skip a layer because parent ButtonBar is not IUIComponent
+            systemManager = ((parent as IChild).parent as IUIComponent).systemManager;
+        }
+        return sm;
+    }
+    
     public function get nestLevel():int
     {
     	throw new Error("Method not implemented.");
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 b5fe4aa..70d3e2a 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,15 +67,14 @@ package mx.controls.beads
             IEventDispatcher(host).addEventListener("columnsInvalid", handleColumnsInvalid);
             handleColumnsInvalid(null);
         }		
-        
+
         private function handleColumnsInvalid(event:Event):void
         {
             if (!columnLists) return;
             
-            var host:IDataGrid = _strand as IDataGrid;
+            var host:AdvancedDataGrid = _strand as AdvancedDataGrid;
             var sharedModel:IDataGridModel = (host.model as IDataGridModel);
             
-            var visibleColumns:Array = [];
             columnLists.length = 0;
             for (var i:int=0; i < sharedModel.columns.length; i++)
             {
@@ -90,7 +89,18 @@ package mx.controls.beads
                     columnLists.push(list);
                 }
             }
-            (header as DataGridButtonBar).dataProvider = visibleColumns;
+            if (host.groupedColumns != null)
+            {
+                var groupedColumns:Array = [];
+                for (i = 0; i < host.groupedColumns.length; i++)
+                {
+                    if ((host.groupedColumns[i] as AdvancedDataGridColumn).visible)
+                        groupedColumns.push(host.groupedColumns[i]);
+                }
+                (header as DataGridButtonBar).dataProvider = groupedColumns;
+            }
+            else
+                (header as DataGridButtonBar).dataProvider = visibleColumns;
             
             host.dispatchEvent(new Event("layoutNeeded"));
         }
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 2a89092..5a20ad1 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
@@ -61,6 +61,8 @@ package mx.controls.beads
 		{
         }
 
+        public var visibleColumns:Array = [];
+        
         override protected function handleInitComplete(event:Event):void
         {
             var host:IDataGrid = _strand as IDataGrid;
@@ -112,6 +114,8 @@ package mx.controls.beads
             }
             if (sharedModel.columns == null)
                 return;
+            if (visibleColumns == null)
+                visibleColumns = sharedModel.columns;
             super.handleDataProviderChanged(event);
         }
 
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 1e031e5..23956d4 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
@@ -18,6 +18,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 package mx.controls.beads.layouts
 {
+    import mx.controls.advancedDataGridClasses.AdvancedDataGridColumnGroup;
     import mx.controls.dataGridClasses.DataGridColumn;
     
     import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
@@ -68,6 +69,41 @@ package mx.controls.beads.layouts
         COMPILE::JS
         private var listening:Boolean;
         
+        override protected function setHeaderWidths(columnWidths:Array):void
+        {
+            var header:IUIBase = (uiHost.view as IDataGridView).header;
+            // fancier DG's will filter invisible columns and only put visible columns
+            // 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;
+            if (bbmodel.dataProvider.length != columnWidths.length)
+            {
+                // probably some grouped columns so recompute widths;
+                var newColumnWidths:Array = [];
+                for (var i:int = 0; i < bbmodel.dataProvider.length; i++)
+                {
+                    newColumnWidths.push(getHeaderColumnWidth(bbmodel.dataProvider[i] as DataGridColumn));
+                }
+                columnWidths = newColumnWidths;
+            }
+            super.setHeaderWidths(columnWidths);
+        }
+        
+        private function getHeaderColumnWidth(column:DataGridColumn):Number
+        {
+            if (column is AdvancedDataGridColumnGroup)
+            {
+                var adgcg:AdvancedDataGridColumnGroup = column as AdvancedDataGridColumnGroup;
+                var w:Number = 0;
+                for (var i:int = 0; i < adgcg.children.length; i++)
+                {
+                    w += getHeaderColumnWidth(adgcg.children[i] as DataGridColumn);
+                }
+                return w;
+            }
+            return column.columnWidth;
+        }
+        
         /**
          * @copy org.apache.royale.core.IBeadLayout#layout
          * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
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 9f47d19..05312a6 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
@@ -26,7 +26,7 @@ package mx.controls.beads.layouts
     import org.apache.royale.html.beads.models.ButtonBarModel;
     import org.apache.royale.html.beads.layouts.DataGridLayout;
     import mx.controls.dataGridClasses.DataGridColumn;
-
+    import mx.controls.beads.DataGridView;
 	
     /**
      *  The DataGridLayout class.
@@ -50,6 +50,12 @@ package mx.controls.beads.layouts
 		{
         }
 
+        override protected function getColumnsForLayout():Array
+        {
+            var view:DataGridView = (uiHost.view as DataGridView);
+            return view.visibleColumns;    
+        }
+        
         /**
          * @copy org.apache.royale.core.IBeadLayout#layout
          * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
@@ -62,11 +68,7 @@ package mx.controls.beads.layouts
          */
         override public function layout():Boolean
         {
-            var header:IUIBase = (uiHost.view as IDataGridView).header;
-            // fancier DG's will filter invisible columns and only put visible columns
-            // 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 view:DataGridView = (uiHost.view as DataGridView);
             // do the proportional sizing of columns
             var borderMetrics:EdgeData = (ValuesManager.valuesImpl as IBorderPaddingMarginValuesImpl).getBorderMetrics(_strand as IUIBase);			
             var useWidth:Number = uiHost.width - (borderMetrics.left + borderMetrics.right);
@@ -74,10 +76,10 @@ package mx.controls.beads.layouts
             
             var totalWidths:Number = 0;
             var unspecifiedWidths:int = 0;
-            if (bbmodel.dataProvider)
+            if (view.visibleColumns)
             {
-                for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
-                    var columnDef:DataGridColumn = bbmodel.dataProvider[i] as DataGridColumn;
+                for(var i:int=0; i < view.visibleColumns.length; i++) {
+                    var columnDef:DataGridColumn = view.visibleColumns[i] as DataGridColumn;
                     if (!isNaN(columnDef.width))
                         totalWidths += columnDef.width;
                     else
@@ -95,8 +97,8 @@ package mx.controls.beads.layouts
                 // in the remaining space
                 var remainingSpace:Number = useWidth - totalWidths;
                 var proportionateShare:Number = remainingSpace / unspecifiedWidths;
-                for(i=0; i < bbmodel.dataProvider.length; i++) {
-                    columnDef = bbmodel.dataProvider[i] as DataGridColumn;
+                for(i=0; i < view.visibleColumns.length; i++) {
+                    columnDef = view.visibleColumns[i] as DataGridColumn;
                     if (!isNaN(columnDef.width))
                         columnDef.columnWidth = columnDef.width;
                     else
@@ -108,8 +110,8 @@ package mx.controls.beads.layouts
                 if (totalWidths != useWidth)
                 {
                     var factor:Number = useWidth / totalWidths;
-                    for(i=0; i < bbmodel.dataProvider.length; i++) {
-                        columnDef = bbmodel.dataProvider[i] as DataGridColumn;
+                    for(i=0; i < view.visibleColumns.length; i++) {
+                        columnDef = view.visibleColumns[i] as DataGridColumn;
                         columnDef.columnWidth = columnDef.width * factor;
                     }                
                 }


[royale-asjs] 01/02: some abstractions for the subclasses

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch adg_grouped
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 498b55921cfbb03ef9a142b762600ef80dc562c1
Author: Alex Harui <ah...@apache.org>
AuthorDate: Fri Dec 27 20:54:51 2019 -0800

    some abstractions for the subclasses
---
 .../org/apache/royale/html/beads/DataGridView.as   |  2 +-
 .../royale/html/beads/layouts/DataGridLayout.as    | 33 ++++++++++++++++------
 2 files changed, 26 insertions(+), 9 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 0e7d8ec..597559c 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
@@ -139,7 +139,7 @@ package org.apache.royale.html.beads
 
                 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;
+				var bblayout:IBead = new columnLayoutClass() as IBead;
 				_header.addBead(bblayout as IBead);
 				_header.addBead(new Viewport() as IBead);
 				host.strandChildren.addElement(_header as IChild);
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
index ae55038..be56f19 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/layouts/DataGridLayout.as
@@ -99,6 +99,26 @@ package org.apache.royale.html.beads.layouts
 			layout();
 		}
 		
+        protected function getColumnsForLayout():Array
+        {
+            var header:IUIBase = (uiHost.view as IDataGridView).header;
+            // fancier DG's will filter invisible columns and only put visible columns
+            // 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;
+            return bbmodel.dataProvider as Array;
+        }
+
+        protected function setHeaderWidths(columnWidths:Array):void
+        {
+            var header:IUIBase = (uiHost.view as IDataGridView).header;
+            // fancier DG's will filter invisible columns and only put visible columns
+            // 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;
+            bbmodel.buttonWidths = columnWidths;
+        }
+        
 		/**
 		 * @copy org.apache.royale.core.IBeadLayout#layout
          * @royaleignorecoercion org.apache.royale.core.IBorderPaddingMarginValuesImpl
@@ -112,10 +132,7 @@ package org.apache.royale.html.beads.layouts
 		public function layout():Boolean
 		{
 			var header:IUIBase = (uiHost.view as IDataGridView).header;
-            // fancier DG's will filter invisible columns and only put visible columns
-            // 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 arrayOfColumns:Array = getColumnsForLayout();
 			var listArea:IUIBase = (uiHost.view as IDataGridView).listArea;
 			
 			var displayedColumns:Array = (uiHost.view as IDataGridView).columnLists;
@@ -126,11 +143,11 @@ package org.apache.royale.html.beads.layouts
 			var useHeight:Number = uiHost.height - (borderMetrics.top + borderMetrics.bottom);
 			
 			var xpos:Number = 0;
-			var defaultColumnWidth:Number = (useWidth) / bbmodel.dataProvider.length;
+			var defaultColumnWidth:Number = (useWidth) / arrayOfColumns.length;
 			var columnWidths:Array = [];
 			
-			for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
-				var columnDef:IDataGridColumn = bbmodel.dataProvider[i] as IDataGridColumn;
+			for(var i:int=0; i < arrayOfColumns.length; i++) {
+				var columnDef:IDataGridColumn = arrayOfColumns[i] as IDataGridColumn;
 				var columnList:UIBase = displayedColumns[i] as UIBase;
 				
 				// probably do not need to set (x,y), but if the Container's layout requires it, they will be set.
@@ -148,7 +165,7 @@ package org.apache.royale.html.beads.layouts
 				xpos += columnList.width;
 			}
 			
-			bbmodel.buttonWidths = columnWidths;
+            setHeaderWidths(columnWidths);
 			
 			COMPILE::SWF {
                 header.y = borderMetrics.top;