Bug 504915 - Freeze in scrolled state puts non-frozen region in scrolled
state

Change-Id: Idb06d5c603c5d278d1b7956b3a20b2e86893e057
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/command/FreezeHandlerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/command/FreezeHandlerTest.java
index 5d49204..f638b11 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/command/FreezeHandlerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/freeze/command/FreezeHandlerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2013 Original authors and others.
+ * Copyright (c) 2012, 2016 Original authors and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -139,7 +139,7 @@
         // Test viewport
         Assert.assertEquals(3, this.viewportLayer.getMinimumOriginColumnPosition());
         Assert.assertEquals(3, this.viewportLayer.getMinimumOriginRowPosition());
-        Assert.assertEquals(4, this.viewportLayer.getColumnIndexByPosition(0));
+        Assert.assertEquals(3, this.viewportLayer.getColumnIndexByPosition(0));
     }
 
     @Test
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/FreezeHelper.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/FreezeHelper.java
index 2e3fcef..c091453 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/FreezeHelper.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/freeze/FreezeHelper.java
@@ -1,12 +1,12 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2013 Dirk Fauth and others.
+ * Copyright (c) 2012, 2016 Dirk Fauth and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation
+ *    Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
  *******************************************************************************/
 package org.eclipse.nebula.widgets.nattable.freeze;
 
@@ -33,9 +33,6 @@
  * @see FreezePositionCommand
  * @see FreezeSelectionCommand
  * @see UnFreezeGridCommand
- *
- * @author Dirk Fauth
- *
  */
 public class FreezeHelper {
 
@@ -58,8 +55,10 @@
      * @see FreezePositionCommand
      * @see FreezeSelectionCommand
      */
-    public static void freeze(FreezeLayer freezeLayer,
-            ViewportLayer viewportLayer, PositionCoordinate topLeftPosition,
+    public static void freeze(
+            FreezeLayer freezeLayer,
+            ViewportLayer viewportLayer,
+            PositionCoordinate topLeftPosition,
             PositionCoordinate bottomRightPosition) {
 
         if (freezeLayer == null || viewportLayer == null) {
@@ -67,23 +66,21 @@
         }
 
         if (topLeftPosition != null && bottomRightPosition != null) {
-            freezeLayer.setTopLeftPosition(topLeftPosition.columnPosition,
+            freezeLayer.setTopLeftPosition(
+                    topLeftPosition.columnPosition,
                     topLeftPosition.rowPosition);
             freezeLayer.setBottomRightPosition(
                     bottomRightPosition.columnPosition,
                     bottomRightPosition.rowPosition);
 
-            IUniqueIndexLayer scrollableLayer = viewportLayer
-                    .getScrollableLayer();
-            int originX = bottomRightPosition.columnPosition == scrollableLayer
-                    .getColumnCount() - 1 ? scrollableLayer.getWidth()
-                    : scrollableLayer
-                            .getStartXOfColumnPosition(bottomRightPosition.columnPosition + 1);
-            int originY = bottomRightPosition.rowPosition == scrollableLayer
-                    .getRowCount() - 1 ? scrollableLayer.getHeight()
-                    : scrollableLayer
-                            .getStartYOfRowPosition(bottomRightPosition.rowPosition + 1);
+            IUniqueIndexLayer scrollableLayer = viewportLayer.getScrollableLayer();
+            int originX = (bottomRightPosition.columnPosition == scrollableLayer.getColumnCount() - 1)
+                    ? scrollableLayer.getWidth() : scrollableLayer.getStartXOfColumnPosition(bottomRightPosition.columnPosition + 1);
+            int originY = (bottomRightPosition.rowPosition == scrollableLayer.getRowCount() - 1)
+                    ? scrollableLayer.getHeight() : scrollableLayer.getStartYOfRowPosition(bottomRightPosition.rowPosition + 1);
             viewportLayer.setMinimumOrigin(originX, originY);
+            viewportLayer.setOriginX(0);
+            viewportLayer.setOriginY(0);
             viewportLayer.fireLayerEvent(new FreezeEvent(viewportLayer));
         }
     }
@@ -100,8 +97,7 @@
      *
      * @see UnFreezeGridCommand
      */
-    public static void unfreeze(FreezeLayer freezeLayer,
-            ViewportLayer viewportLayer) {
+    public static void unfreeze(FreezeLayer freezeLayer, ViewportLayer viewportLayer) {
         if (freezeLayer == null || viewportLayer == null) {
             throw new IllegalArgumentException("freezeLayer and viewportLayer can not be null!"); //$NON-NLS-1$
         }
@@ -123,13 +119,10 @@
      * @param viewportLayer
      *            The ViewportLayer of the grid to perform the freeze action.
      */
-    public static void resetViewport(FreezeLayer freezeLayer,
-            ViewportLayer viewportLayer) {
+    public static void resetViewport(FreezeLayer freezeLayer, ViewportLayer viewportLayer) {
         PositionCoordinate topLeftPosition = freezeLayer.getTopLeftPosition();
         viewportLayer.resetOrigin(
-                viewportLayer.getScrollableLayer().getStartXOfColumnPosition(
-                        Math.max(0, topLeftPosition.columnPosition)),
-                viewportLayer.getScrollableLayer().getStartYOfRowPosition(
-                        Math.max(0, topLeftPosition.rowPosition)));
+                viewportLayer.getScrollableLayer().getStartXOfColumnPosition(Math.max(0, topLeftPosition.columnPosition)),
+                viewportLayer.getScrollableLayer().getStartYOfRowPosition(Math.max(0, topLeftPosition.rowPosition)));
     }
 }