summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2008-01-14 23:26:53 +0000
committerFelipe Heidrich <fheidric>2008-01-14 23:26:53 +0000
commit3114c0771e236970e2e710942b819990aa75f96f (patch)
tree90698831a3ad4f37762f6087d9fee86e095a8480 /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
parent25fe9dd1d5b36d931690d4a38e3117d3d67fb4cc (diff)
downloadeclipse.platform.swt-3114c0771e236970e2e710942b819990aa75f96f.tar.gz
eclipse.platform.swt-3114c0771e236970e2e710942b819990aa75f96f.tar.xz
eclipse.platform.swt-3114c0771e236970e2e710942b819990aa75f96f.zip
Bug 91317 - Spinner should support negative values
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java36
1 files changed, 22 insertions, 14 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
index cde9fd3108..0180ccb49f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
@@ -375,8 +375,9 @@ public int getIncrement () {
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
int digits = OS.gtk_spin_button_get_digits (handle);
- for (int i = 0; i < digits; i++) adjustment.step_increment *= 10;
- return (int) (adjustment.step_increment + 0.5);
+ double value = adjustment.step_increment;
+ for (int i = 0; i < digits; i++) value *= 10;
+ return (int) (value > 0 ? value + 0.5 : value - 0.5);
}
/**
@@ -395,8 +396,9 @@ public int getMaximum () {
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
int digits = OS.gtk_spin_button_get_digits (handle);
- for (int i = 0; i < digits; i++) adjustment.upper *= 10;
- return (int) (adjustment.upper + 0.5);
+ double value = adjustment.upper;
+ for (int i = 0; i < digits; i++) value *= 10;
+ return (int) (value > 0 ? value + 0.5 : value - 0.5);
}
/**
@@ -415,8 +417,9 @@ public int getMinimum () {
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
int digits = OS.gtk_spin_button_get_digits (handle);
- for (int i = 0; i < digits; i++) adjustment.lower *= 10;
- return (int) (adjustment.lower + 0.5);
+ double value = adjustment.lower;
+ for (int i = 0; i < digits; i++) value *= 10;
+ return (int) (value > 0 ? value + 0.5 : value - 0.5);
}
/**
@@ -436,8 +439,9 @@ public int getPageIncrement () {
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
int digits = OS.gtk_spin_button_get_digits (handle);
- for (int i = 0; i < digits; i++) adjustment.page_increment *= 10;
- return (int) (adjustment.page_increment + 0.5);
+ double value = adjustment.page_increment;
+ for (int i = 0; i < digits; i++) value *= 10;
+ return (int) (value > 0 ? value + 0.5 : value - 0.5);
}
/**
@@ -456,8 +460,9 @@ public int getSelection () {
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
int digits = OS.gtk_spin_button_get_digits (handle);
- for (int i = 0; i < digits; i++) adjustment.value *= 10;
- return (int) (adjustment.value + 0.5);
+ double value = adjustment.value;
+ for (int i = 0; i < digits; i++) value *= 10;
+ return (int) (value > 0 ? value + 0.5 : value - 0.5);
}
/**
@@ -840,7 +845,6 @@ public void setIncrement (int value) {
*/
public void setMaximum (int value) {
checkWidget ();
- if (value < 0) return;
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
@@ -868,7 +872,6 @@ public void setMaximum (int value) {
*/
public void setMinimum (int value) {
checkWidget ();
- if (value < 0) return;
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
GtkAdjustment adjustment = new GtkAdjustment ();
OS.memmove (adjustment, hAdjustment);
@@ -1003,7 +1006,6 @@ public void setDigits (int value) {
*/
public void setValues (int selection, int minimum, int maximum, int digits, int increment, int pageIncrement) {
checkWidget ();
- if (minimum < 0) return;
if (maximum <= minimum) return;
if (digits < 0) return;
if (increment < 1) return;
@@ -1065,8 +1067,14 @@ String verifyText (String string, int start, int end) {
}
index = 0;
}
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ boolean minNegative = adjustment.lower < 0;
+ boolean maxPositive = adjustment.upper > 0;
while (index < string.length ()) {
- if (!Character.isDigit (string.charAt (index))) break;
+ char ch = string.charAt (index);
+ if (!(Character.isDigit (ch) || (minNegative && ch == '-') || (maxPositive && ch == '+'))) break;
index++;
}
event.doit = index == string.length ();