diff options
| author | Dirk Fauth | 2023-02-24 12:24:23 +0000 |
|---|---|---|
| committer | Dirk Fauth | 2023-02-24 12:24:23 +0000 |
| commit | f6e513a5f85244691bf53b5fa6fd88c504549d8f (patch) | |
| tree | da5a9356f1778acbea3e6c2952799fb5c35e2d06 | |
| parent | 68f11320b05837f12536609d64e5758028235d92 (diff) | |
| download | org.eclipse.nebula.widgets.nattable-f6e513a5f85244691bf53b5fa6fd88c504549d8f.tar.gz org.eclipse.nebula.widgets.nattable-f6e513a5f85244691bf53b5fa6fd88c504549d8f.tar.xz org.eclipse.nebula.widgets.nattable-f6e513a5f85244691bf53b5fa6fd88c504549d8f.zip | |
Bug 581534 - Performance grouping: incorrect group states with freeze
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
Change-Id: I4b13643bd171b3af42b419ed490e46c1ffbdf567
2 files changed, 36 insertions, 14 deletions
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayer.java index 0b4546a8..878aa20e 100644 --- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayer.java +++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/CompositeFreezeLayer.java @@ -256,14 +256,23 @@ public class CompositeFreezeLayer extends CompositeLayer implements IUniqueIndex startColumn = 0; } + // special condition, group frozen while in scrolled state and group is + // only partially visible + if (columnPosition == 0 && startColumn < 0) { + startColumnLayout = 0; + endColumn += this.viewportLayer.getOriginColumnPosition() - this.viewportLayer.getMinimumOriginColumnPosition(); + } + int start = startColumn; int end = endColumn; if (isFrozen() && endColumnLayout == 1) { - int scrollAdjust = 0; + int numberOfNotVisibleColumns = 0; if (this.freezeLayer.getTopLeftPosition().columnPosition >= 0) { - scrollAdjust = this.freezeLayer.getUnderlyingLayerByPosition(0, 0).getStartXOfColumnPosition(this.freezeLayer.getTopLeftPosition().columnPosition); + numberOfNotVisibleColumns = this.freezeLayer.getTopLeftPosition().columnPosition; } - end = endColumn - this.viewportLayer.getScrollableLayer().getColumnPositionByX(this.viewportLayer.getOrigin().getX() - scrollAdjust); + + int toLocal = this.viewportLayer.underlyingToLocalColumnPosition(this.viewportLayer.getScrollableLayer(), endColumn); + end = toLocal + numberOfNotVisibleColumns; } ILayer startLayer = null; @@ -291,10 +300,10 @@ public class CompositeFreezeLayer extends CompositeLayer implements IUniqueIndex } } } else { - startLayer = getChildLayerByLayoutCoordinate(startColumnLayout, 1); - startX = this.freezeLayer.getStartXOfColumnPosition(start); + int startColumnToUse = start < 0 ? 0 : start; + startX = this.freezeLayer.getStartXOfColumnPosition(startColumnToUse); int freezeWidth = 0; - int column = start; + int column = startColumnToUse; for (; column < this.freezeLayer.getColumnCount(); column++) { freezeWidth += this.freezeLayer.getColumnWidthByPosition(column); } @@ -386,14 +395,23 @@ public class CompositeFreezeLayer extends CompositeLayer implements IUniqueIndex startRow = 0; } + // special condition, group frozen while in scrolled state and group is + // only partially visible + if (rowPosition == 0 && startRow < 0) { + startRowLayout = 0; + endRow += this.viewportLayer.getOriginRowPosition() - this.viewportLayer.getMinimumOriginRowPosition(); + } + int start = startRow; int end = endRow; if (isFrozen() && endRowLayout == 1) { - int scrollAdjust = 0; + int numberOfNotVisibleRows = 0; if (this.freezeLayer.getTopLeftPosition().rowPosition >= 0) { - scrollAdjust = this.freezeLayer.getUnderlyingLayerByPosition(0, 0).getStartYOfRowPosition(this.freezeLayer.getTopLeftPosition().rowPosition); + numberOfNotVisibleRows = this.freezeLayer.getTopLeftPosition().rowPosition; } - end = endRow - this.viewportLayer.getScrollableLayer().getRowPositionByY(this.viewportLayer.getOrigin().getY() - scrollAdjust); + + int toLocal = this.viewportLayer.underlyingToLocalRowPosition(this.viewportLayer.getScrollableLayer(), endRow); + end = toLocal + numberOfNotVisibleRows; } ILayer startLayer = null; @@ -421,10 +439,10 @@ public class CompositeFreezeLayer extends CompositeLayer implements IUniqueIndex } } } else { - startLayer = getChildLayerByLayoutCoordinate(1, startRowLayout); - startY = this.freezeLayer.getStartYOfRowPosition(start); + int startRowToUse = start < 0 ? 0 : start; + startY = this.freezeLayer.getStartYOfRowPosition(startRowToUse); int freezeHeight = 0; - int row = start; + int row = startRowToUse; for (; row < this.freezeLayer.getRowCount(); row++) { freezeHeight += this.freezeLayer.getRowHeightByPosition(row); } diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java index 14edbbc8..38abe1d1 100644 --- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java +++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/viewport/ViewportLayer.java @@ -363,8 +363,10 @@ public class ViewportLayer extends AbstractLayerTransform implements IUniqueInde /** * @return The origin column position + * + * @since 2.1 */ - private int getOriginColumnPosition() { + public int getOriginColumnPosition() { // special handling for column resizing to 0 // used e.g. with the ResizeColumnHideShowLayer in combination // with percentage sizing @@ -380,8 +382,10 @@ public class ViewportLayer extends AbstractLayerTransform implements IUniqueInde /** * @return The origin row position + * + * @since 2.1 */ - private int getOriginRowPosition() { + public int getOriginRowPosition() { return this.scrollableLayer.getRowPositionByY(getOrigin().getY()); } |
