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


The following commit(s) were added to refs/heads/develop by this push:
     new 98f3a67  more improvements to horizontal ADG scrolling
98f3a67 is described below

commit 98f3a67dc5abf51877baec8f3716619d6106e3cf
Author: Alex Harui <[email protected]>
AuthorDate: Sun Jan 12 23:35:57 2020 -0800

    more improvements to horizontal ADG scrolling
---
 .../beads/DataGridLinesBeadForICollectionView.as   | 14 ++++-
 .../mx/controls/beads/layouts/DataGridLayout.as    | 68 +++++++++++++++++-----
 2 files changed, 66 insertions(+), 16 deletions(-)

diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridLinesBeadForICollectionView.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridLinesBeadForICollectionView.as
index 9fc6d38..14c45da 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridLinesBeadForICollectionView.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/controls/beads/DataGridLinesBeadForICollectionView.as
@@ -93,6 +93,7 @@ package mx.controls.beads
             }
             
             var i:int;
+            var column:AdvancedDataGridColumn;
             var xpos:Number = 0;
             
             _overlay.clear();
@@ -100,6 +101,15 @@ package mx.controls.beads
             // draw the horizontals
             if (contentView.height > n * rowHeight)
             {
+                var ww:Number = 0;
+                for (i=0; i < columns.length; i++) {
+                    column = columns[i] as AdvancedDataGridColumn;
+                    if (column.visible)
+                    {
+                        ww += column.columnWidth;
+                    }
+                }
+                
                 var bgColors:Array = (_strand as 
UIComponent).getStyle("alternatingItemColors");
                 var yy:Number = n * rowHeight;
                 
@@ -109,14 +119,14 @@ package mx.controls.beads
                 bgFill1.color = bgColors[1];
                 for (i=n; yy < contentView.height; i++, yy += rowHeight) {
                     _overlay.fill = (i % 2 == 1) ? bgFill1 : bgFill0;
-                    _overlay.drawRect(0, yy, _area.width, rowHeight);
+                    _overlay.drawRect(0, yy, ww, rowHeight);
                 }                
             }
             
             _overlay.fill = lineFill;            
             // draw the verticals
             for (i=0; i < columns.length - 1; i++) {
-                var column:AdvancedDataGridColumn = columns[i] as 
AdvancedDataGridColumn;
+                column = columns[i] as AdvancedDataGridColumn;
                 if (column.visible)
                 {
                     xpos += column.columnWidth;
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 f39b42a..31bc476 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
@@ -18,17 +18,18 @@
 
////////////////////////////////////////////////////////////////////////////////
 package mx.controls.beads.layouts
 {
-    import org.apache.royale.core.IUIBase;
+    import mx.controls.beads.DataGridView;
+    import mx.controls.dataGridClasses.DataGridColumn;
+    import mx.core.ScrollControlBase;
+    import mx.core.ScrollPolicy;
+    
     import org.apache.royale.core.IBorderPaddingMarginValuesImpl;
+    import org.apache.royale.core.IUIBase;
     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;
-    import mx.controls.beads.DataGridView;
-    import mx.core.ScrollControlBase;
-    import mx.core.ScrollPolicy;
+    import org.apache.royale.html.beads.models.ButtonBarModel;
        
     /**
      *  The DataGridLayout class.
@@ -58,6 +59,31 @@ package mx.controls.beads.layouts
             return view.visibleColumns;    
         }
         
+        override protected function setHeaderWidths(columnWidths:Array):void
+        {
+            var ww:Number = 0;
+            for (var i:int = 0; i < columnWidths.length; i++)
+            {
+                ww += columnWidths[i];
+            }
+            var view:DataGridView = (uiHost.view as DataGridView);
+            if (ww > view.listArea.width)
+            {
+                // fudge last column if offscreen so it scrolls horizontally 
properly if
+                // vertical scrollbar is always on
+                COMPILE::JS
+                {
+                    if (view.listArea.element.offsetWidth > 
view.listArea.element.clientWidth)
+                    {
+                        columnWidths[columnWidths.length - 1] += 
view.listArea.element.offsetWidth - 
+                            view.listArea.element.clientWidth;
+                    }
+                }
+            }
+            
+            super.setHeaderWidths(columnWidths);
+        }
+        
         /**
          * @copy org.apache.royale.core.IBeadLayout#layout
          * @royaleignorecoercion 
org.apache.royale.core.IBorderPaddingMarginValuesImpl
@@ -93,7 +119,8 @@ package mx.controls.beads.layouts
                 return true;
             }
             
-            if ((uiHost as ScrollControlBase).horizontalScrollPolicy == 
ScrollPolicy.OFF)
+            if ((uiHost as ScrollControlBase).horizontalScrollPolicy == 
ScrollPolicy.OFF ||
+                totalWidths < useWidth)
             {
                 if (unspecifiedWidths > 0 && totalWidths > 0)
                 {
@@ -121,19 +148,32 @@ package mx.controls.beads.layouts
                     }
                 }
             }
-            else
+            
+            // not an else clause because we want to go into this if we can 
scroll
+            // horizontally after the earlier clause scaled column widths to 
fit if
+            // they were too small.
+            if ((uiHost as ScrollControlBase).horizontalScrollPolicy != 
ScrollPolicy.OFF)
             {
                 COMPILE::JS
                 {
                    view.header.element.scrollLeft = 
view.listArea.element.scrollLeft;
                 }
-                for(i=0; i < view.visibleColumns.length; i++) {
-                    columnDef = view.visibleColumns[i] as DataGridColumn;
-                    if (!isNaN(columnDef.width))
-                        columnDef.columnWidth = 100; // hopefully won't get 
here
-                    else
+                if (totalWidths < useWidth)
+                {
+                    // this loop should prevent totalWidth < useWidth next 
time through
+                    for(i=0; i < view.visibleColumns.length; i++) {
+                        columnDef = view.visibleColumns[i] as DataGridColumn;
+                        columnDef.width = columnDef.columnWidth;
+                    }                
+                }
+                else
+                {
+                    // this loop should prevent totalWidth < useWidth next 
time through
+                    for(i=0; i < view.visibleColumns.length; i++) {
+                        columnDef = view.visibleColumns[i] as DataGridColumn;
                         columnDef.columnWidth = columnDef.width;
-                }                
+                    }                
+                }
             }
             
             return super.layout();

Reply via email to