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

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

commit 1f05de4e899089583436ea3302245843d9092cc1
Author: Alex Harui <[email protected]>
AuthorDate: Thu Aug 15 15:41:18 2019 -0700

    try to get DG columns to behave better
---
 .../royale/html/beads/layouts/DataGridLayout.as    |  19 ++--
 .../royale/html/supportClasses/DataGridColumn.as   |   3 +-
 .../MXRoyale/src/main/resources/defaults.css       |   4 +-
 .../MXRoyale/src/main/royale/MXRoyaleClasses.as    |   1 +
 .../mx/controls/beads/layouts/DataGridLayout.as    | 114 +++++++++++++++++++++
 5 files changed, 130 insertions(+), 11 deletions(-)

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 faf1595..f586943 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
@@ -25,9 +25,9 @@ package org.apache.royale.html.beads.layouts
     import org.apache.royale.core.IDataGridModel;
     import org.apache.royale.core.IStrand;
     import org.apache.royale.core.IUIBase;
-    import org.apache.royale.core.layout.EdgeData;
     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.geom.Rectangle;
@@ -60,7 +60,7 @@ package org.apache.royale.html.beads.layouts
                {
                }
                
-               private var _strand:IStrand;
+               protected var _strand:IStrand;
                
                /**
                 *  @copy org.apache.royale.core.IBead#strand
@@ -84,7 +84,7 @@ package org.apache.royale.html.beads.layouts
                /**
                 * @royaleignorecoercion org.apache.royale.core.UIBase
                 */
-               private function get uiHost():UIBase
+               protected function get uiHost():UIBase
                {
                        return _strand as UIBase;
                }
@@ -112,6 +112,10 @@ 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 listArea:IUIBase = (uiHost.view as 
IDataGridView).listArea;
                        
                        var displayedColumns:Array = (uiHost.view as 
IDataGridView).columnLists;
@@ -122,11 +126,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) / 
model.columns.length;
+                       var defaultColumnWidth:Number = (useWidth) / 
bbmodel.dataProvider.length;
                        var columnWidths:Array = [];
                        
-                       for(var i:int=0; i < displayedColumns.length; i++) {
-                               var columnDef:IDataGridColumn = 
model.columns[i] as IDataGridColumn;
+                       for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
+                               var columnDef:IDataGridColumn = 
bbmodel.dataProvider[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.
@@ -135,7 +139,7 @@ package org.apache.royale.html.beads.layouts
                                
                                var columnWidth:Number = defaultColumnWidth;
                                if (!isNaN(columnDef.columnWidth)) {
-                                       columnWidth = (columnDef.columnWidth / 
uiHost.width) * useWidth;
+                                       columnWidth = columnDef.columnWidth;
                                }
                                
                                columnList.width = columnWidth;
@@ -144,7 +148,6 @@ package org.apache.royale.html.beads.layouts
                                xpos += columnList.width;
                        }
                        
-                       var bbmodel:ButtonBarModel = 
header.getBeadByType(ButtonBarModel) as ButtonBarModel;
                        bbmodel.buttonWidths = columnWidths;
                        
                        header.x = borderMetrics.left;
diff --git 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
index cc58aff..db02435 100644
--- 
a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
+++ 
b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/supportClasses/DataGridColumn.as
@@ -85,7 +85,8 @@ package org.apache.royale.html.supportClasses
                private var _columnWidth:Number = Number.NaN;
                
                /**
-                *  The width of the column (default is 100 pixels).
+                *  The width of the column.  If not set,
+         *  the columns will be sized to fit.
                 *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
diff --git a/frameworks/projects/MXRoyale/src/main/resources/defaults.css 
b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
index c86d206..e8c6631 100644
--- a/frameworks/projects/MXRoyale/src/main/resources/defaults.css
+++ b/frameworks/projects/MXRoyale/src/main/resources/defaults.css
@@ -81,7 +81,7 @@ AdvancedDataGrid
        IDataGridPresentationModel: 
ClassReference("org.apache.royale.html.beads.models.DataGridPresentationModel");
        IBeadView: ClassReference("mx.controls.beads.AdvancedDataGridView");
        IBeadModel: 
ClassReference("mx.controls.beads.models.DataGridICollectionViewModel");
-       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
+       IBeadLayout: ClassReference("mx.controls.beads.layouts.DataGridLayout");
        columnClass: 
ClassReference("mx.controls.advancedDataGridClasses.AdvancedDataGridColumnList");
        
        background-color: #FFFFFF;
@@ -154,7 +154,7 @@ DataGrid
        IDataGridPresentationModel: 
ClassReference("org.apache.royale.html.beads.models.DataGridPresentationModel");
        IBeadView: ClassReference("org.apache.royale.html.beads.DataGridView");
        IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.DataGridModel");
-       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.DataGridLayout");
+       IBeadLayout: ClassReference("mx.controls.beads.layouts.DataGridLayout");
        columnClass: 
ClassReference("org.apache.royale.html.supportClasses.DataGridColumnList");
        
        background-color: #FFFFFF;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as 
b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index f8977b9..cbe0646 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -162,6 +162,7 @@ internal class MXRoyaleClasses
     import 
mx.controls.advancedDataGridClasses.AdvancedDataGridSingleSelectionMouseController;
 AdvancedDataGridSingleSelectionMouseController;
     import mx.controls.beads.AdvancedDataGridView; AdvancedDataGridView;
     import mx.controls.beads.DataGridView; DataGridView;
+    import mx.controls.beads.layouts.DataGridLayout; DataGridLayout;
        import mx.formatters.Formatter; Formatter;
        import mx.formatters.IFormatter; IFormatter;
        import mx.formatters.NumberBase; NumberBase;
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
new file mode 100644
index 0000000..bfca4d7
--- /dev/null
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/layouts/DataGridLayout.as
@@ -0,0 +1,114 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.controls.beads.layouts
+{
+    import org.apache.royale.core.IUIBase;
+    import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+    import org.apache.royale.core.ValuesManager;
+    import org.apache.royale.core.layout.EdgeData;
+    import org.apache.royale.html.beads.IDataGridView;
+    import org.apache.royale.html.beads.models.ButtonBarModel;
+    import org.apache.royale.html.beads.layouts.DataGridLayout;
+    import mx.controls.dataGridClasses.DataGridColumn;
+
+       
+    /**
+     *  The DataGridLayout class.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.0
+     */
+       public class DataGridLayout extends 
org.apache.royale.html.beads.layouts.DataGridLayout
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.0
+         */
+               public function DataGridLayout()
+               {
+        }
+
+        /**
+         * @copy org.apache.royale.core.IBeadLayout#layout
+         * @royaleignorecoercion 
org.apache.royale.core.IBorderPaddingMarginValuesImpl
+         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+         * @royaleignorecoercion org.apache.royale.core.IUIBase
+         * @royaleignorecoercion org.apache.royale.core.UIBase
+         * @royaleignorecoercion org.apache.royale.html.beads.IDataGridView
+         * @royaleignorecoercion 
org.apache.royale.html.beads.models.ButtonBarModel
+         * @royaleignorecoercion 
org.apache.royale.html.supportClasses.IDataGridColumn
+         */
+        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;
+            // 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);
+            var useHeight:Number = uiHost.height - (borderMetrics.top + 
borderMetrics.bottom);
+            
+            var totalWidths:Number = 0;
+            var unspecifiedWidths:int = 0;
+            for(var i:int=0; i < bbmodel.dataProvider.length; i++) {
+                var columnDef:DataGridColumn = bbmodel.dataProvider[i] as 
DataGridColumn;
+                if (!isNaN(columnDef.width))
+                    totalWidths += columnDef.width;
+                else
+                    unspecifiedWidths++;
+            }
+            
+            if (unspecifiedWidths > 0 && totalWidths > 0)
+            {
+                // some widths are specified, others are not, so fit the 
unspecified
+                // 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;
+                    if (!isNaN(columnDef.width))
+                        columnDef.columnWidth = columnDef.width;
+                    else
+                        columnDef.columnWidth = proportionateShare;
+                }                
+            }
+            else if (totalWidths > 0)
+            {
+                if (totalWidths != useWidth)
+                {
+                    var factor:Number = useWidth / totalWidths;
+                    for(i=0; i < bbmodel.dataProvider.length; i++) {
+                        columnDef = bbmodel.dataProvider[i] as DataGridColumn;
+                        columnDef.columnWidth = columnDef.width * factor;
+                    }                
+                }
+            }
+            
+            return super.layout();
+        }
+       }
+}

Reply via email to