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:49 UTC

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

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