more fixes to ScrollBarHandler; SWT ScrollBar doesn't function properly
above 10 billion!
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend
index 90a438e..f908fd2 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend
@@ -9,6 +9,7 @@
 import static org.mockito.Mockito.*
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+import java.math.MathContext
 
 @RunWith(typeof(MockitoJUnitRunner))
 class ScrollBarHandlerRangeLargerThanIntTest extends AbstractScrollBarHandlerTest {
@@ -28,7 +29,7 @@
 	def void viewportAtBeginning() {
 		scrollBarHandler.recalculateScrollBarSize
 
-		verify(scrollBar).maximum = Integer::MAX_VALUE
+		verify(scrollBar).maximum = ScrollBarHandler::MAX_SCROLL_SIZE
 		verify(scrollBar).thumb = 10
 		verify(scrollBar).increment = 1
 		verify(scrollBar).pageIncrement = 10
@@ -40,11 +41,11 @@
 		viewportAxis.pixelOrigin = new BigDecimal(200 * QUADRILLION - 1)
 		scrollBarHandler.recalculateScrollBarSize
 
-		verify(scrollBar).maximum = Integer::MAX_VALUE
+		verify(scrollBar).maximum = ScrollBarHandler::MAX_SCROLL_SIZE
 		verify(scrollBar).thumb = 10
 		verify(scrollBar).increment = 1
 		verify(scrollBar).pageIncrement = 10
-		verify(scrollBar).selection = Integer::MAX_VALUE - 10
+		verify(scrollBar).selection = ScrollBarHandler::MAX_SCROLL_SIZE - 10
 	}
 	
 	@Test
@@ -52,7 +53,8 @@
 		when(scrollBar.selection).thenReturn(1)
 		scrollBarHandler.updateViewportOrigin
 		
-		assertEquals(new BigDecimal((1.0 / Integer::MAX_VALUE) * (200 * QUADRILLION)), viewportAxis.pixelOrigin)
+		val mathContext = new MathContext(15)
+		assertEquals(new BigDecimal((1.0 / (ScrollBarHandler::MAX_SCROLL_SIZE - 10)) * (200 * QUADRILLION - 500)).round(mathContext), viewportAxis.pixelOrigin.round(mathContext))
 	}
 	
 	@Test
@@ -61,12 +63,6 @@
 		scrollBarHandler.updateViewportOrigin
 		
 		assertTrue('''viewport origin «viewportAxis.pixelOrigin» + visible pixel size «viewportAxis.visiblePixelSize» should be >= underlying axis pixel size «viewportAxis.underlyingAxis.pixelSize»''', viewportAxis.pixelOrigin + viewportAxis.visiblePixelSize >= new BigDecimal(200 * QUADRILLION))
-		
-		verify(scrollBar).maximum = Integer::MAX_VALUE
-		verify(scrollBar).thumb = 10
-		verify(scrollBar).increment = 1
-		verify(scrollBar).pageIncrement = 10
-		verify(scrollBar).selection = Integer::MAX_VALUE - 10
 	}
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend
index 9231b7e..ece8eb0 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend
@@ -54,12 +54,6 @@
 		scrollBarHandler.updateViewportOrigin
 		
 		assertTrue('''viewport origin «viewportAxis.pixelOrigin» + visible pixel size «viewportAxis.visiblePixelSize» should be >= underlying axis pixel size «viewportAxis.underlyingAxis.pixelSize»''', viewportAxis.pixelOrigin + viewportAxis.visiblePixelSize >= new BigDecimal(2000))
-		
-		verify(scrollBar).maximum = 2000
-		verify(scrollBar).thumb = 500
-		verify(scrollBar).increment = 125
-		verify(scrollBar).pageIncrement = 500
-		verify(scrollBar).selection = 1990
 	}
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
index f2ab635..34c9e3c 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
@@ -11,7 +11,8 @@
 
 class ScrollBarHandler implements Listener {
 	
-	val static MAXINT = new BigDecimal(Integer::MAX_VALUE)
+	val public static MAX_SCROLL_SIZE = 10000000  // SWT ScrollBar doesn't function properly when the range is > 10 billion
+	val static BD_MAX_SCROLL_SIZE = new BigDecimal(MAX_SCROLL_SIZE)
 	
 	//
 	
@@ -43,37 +44,44 @@
 		updateViewportOrigin
 	}
 	
-	def void updateViewportOrigin() {
-		recalculateScrollBarSize(true)
-	}
-	
-	def void recalculateScrollBarSize() {
-		recalculateScrollBarSize(false)
-	}
-	
 	/**
-	 * Recalculate scrollbar values from viewport axis values. Optionally update the viewport origin from the scrollbar selection first.
-	 * @param updateViewportOrigin Indicates whether or not to update the viewport origin.
+	 * Update the viewport origin from the scrollbar selection.
 	 */
-	def private void recalculateScrollBarSize(boolean updateViewportOrigin) {
+	def void updateViewportOrigin() {
 		val visiblePixelSize = viewportAxis.visiblePixelSize
 		val maxPixelSize = viewportAxis.underlyingAxis.pixelSize
-		val maxScrollSize = maxPixelSize.min(MAXINT)
+		val maxScrollSize = maxPixelSize.min(BD_MAX_SCROLL_SIZE)
 		val thumbSize = minThumbSize.max((visiblePixelSize / maxPixelSize) * maxScrollSize)
 		
 		val intPerPixelRatio = 
 			if (thumbSize / maxScrollSize < visiblePixelSize / maxPixelSize)
 				thumbSize / visiblePixelSize
 			else
-				if (maxScrollSize + thumbSize < MAXINT)
+				if (maxScrollSize + thumbSize < BD_MAX_SCROLL_SIZE)
 					maxScrollSize / maxPixelSize
 				else
 					(maxScrollSize - thumbSize) / (maxPixelSize - visiblePixelSize)
 		
-		if (updateViewportOrigin) {
-			println(scrollBar.selection)
-			viewportAxis.pixelOrigin = new BigDecimal(scrollBar.selection) / intPerPixelRatio
-		}
+		viewportAxis.pixelOrigin = new BigDecimal(scrollBar.selection) / intPerPixelRatio
+	}
+	
+	/**
+	 * Recalculate scrollbar values from viewport axis values.
+	 */
+	def void recalculateScrollBarSize() {
+		val visiblePixelSize = viewportAxis.visiblePixelSize
+		val maxPixelSize = viewportAxis.underlyingAxis.pixelSize
+		val maxScrollSize = maxPixelSize.min(BD_MAX_SCROLL_SIZE)
+		val thumbSize = minThumbSize.max((visiblePixelSize / maxPixelSize) * maxScrollSize)
+		
+		val intPerPixelRatio = 
+			if (thumbSize / maxScrollSize < visiblePixelSize / maxPixelSize)
+				thumbSize / visiblePixelSize
+			else
+				if (maxScrollSize + thumbSize < BD_MAX_SCROLL_SIZE)
+					maxScrollSize / maxPixelSize
+				else
+					(maxScrollSize - thumbSize) / (maxPixelSize - visiblePixelSize)
 		
 		val viewportOrigin = viewportAxis.pixelOrigin
 		
@@ -87,7 +95,6 @@
 			scrollBar.increment = minIncrement.max((pixelIncrement * intPerPixelRatio).intValue)
 			
 			scrollBar.selection = (viewportOrigin * intPerPixelRatio).intValue
-			println('''«scrollBar.selection» = («viewportOrigin» * «intPerPixelRatio»).intValue''')
 			
 			scrollBar.enabled = true
 			scrollBar.visible = true
@@ -97,8 +104,4 @@
 		}
 	}
 	
-//	def operator_divide(BigDecimal a, BigDecimal b) {
-//		a.divide(b, new MathContext(a.precision.max(b.precision), RoundingMode::CEILING))
-//	}
-	
 }
\ No newline at end of file