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();