Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich2005-03-28 22:21:48 +0000
committerFelipe Heidrich2005-03-28 22:21:48 +0000
commit109dd991548420f954abe996a5e2c0884a026ea5 (patch)
tree36503ed387e648410565ff0d60441b14ff5d13c3
parente9b2a3f1566e55718bdac644a0b8c42a42baa7cb (diff)
downloadeclipse.platform.swt-109dd991548420f954abe996a5e2c0884a026ea5.tar.gz
eclipse.platform.swt-109dd991548420f954abe996a5e2c0884a026ea5.tar.xz
eclipse.platform.swt-109dd991548420f954abe996a5e2c0884a026ea5.zip
86079
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java115
1 files changed, 106 insertions, 9 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 ac128e972f..fa45c57e43 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
@@ -179,7 +179,20 @@ public Point computeSize (int wHint, int hHint, boolean changed) {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
String string = String.valueOf ((int) adjustment.upper);
+ if (digits > 0) {
+ StringBuffer buffer = new StringBuffer ();
+ buffer.append (string);
+ buffer.append (getDecimalSeparator ());
+ int count = digits - string.length ();
+ while (count >= 0) {
+ buffer.append ("0");
+ count--;
+ }
+ string = buffer.toString ();
+ }
byte [] buffer1 = Converter.wcsToMbcs (null, string, false);
int /*long*/ ptr = OS.pango_layout_get_text (layout);
int length = OS.strlen (ptr);
@@ -333,6 +346,8 @@ public int getIncrement () {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
}
@@ -351,6 +366,8 @@ public int getMaximum () {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
}
@@ -369,6 +386,8 @@ public int getMinimum () {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
}
@@ -388,6 +407,8 @@ public int getPageIncrement () {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
}
@@ -406,9 +427,24 @@ public int getSelection () {
int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
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;
}
+public int getDigits () {
+ checkWidget ();
+ return OS.gtk_spin_button_get_digits (handle);
+}
+
+String getDecimalSeparator () {
+ int /*long*/ ptr = OS.localeconv_decimal_point ();
+ int length = OS.strlen (ptr);
+ byte [] buffer = new byte [length];
+ OS.memmove (buffer, ptr, length);
+ return new String (Converter.mbcsToWcs (null, buffer));
+}
+
int gtk_activate (int widget) {
postEvent (SWT.DefaultSelection);
return 0;
@@ -673,8 +709,14 @@ void setForegroundColor (GdkColor color) {
public void setIncrement (int value) {
checkWidget ();
if (value < 1) return;
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ double newValue = value;
+ int digits = OS.gtk_spin_button_get_digits (handle);
+ for (int i = 0; i < digits; i++) newValue /= 10;
OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
- OS.gtk_spin_button_set_increments (handle, value, getPageIncrement ());
+ OS.gtk_spin_button_set_increments (handle, newValue, adjustment.page_increment);
OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
}
@@ -694,10 +736,15 @@ public void setIncrement (int value) {
public void setMaximum (int value) {
checkWidget ();
if (value < 0) return;
- int minimum = getMinimum();
- if (value <= minimum) return;
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ double newValue = value;
+ int digits = OS.gtk_spin_button_get_digits (handle);
+ for (int i = 0; i < digits; i++) newValue /= 10;
+ if (newValue <= adjustment.lower) return;
OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
- OS.gtk_spin_button_set_range (handle, minimum, value);
+ OS.gtk_spin_button_set_range (handle, adjustment.lower, newValue);
OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
}
@@ -717,10 +764,15 @@ public void setMaximum (int value) {
public void setMinimum (int value) {
checkWidget ();
if (value < 0) return;
- int maximum = getMaximum ();
- if (value >= maximum) return;
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ double newValue = value;
+ int digits = OS.gtk_spin_button_get_digits (handle);
+ for (int i = 0; i < digits; i++) newValue /= 10;
+ if (newValue >= adjustment.upper) return;
OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
- OS.gtk_spin_button_set_range (handle, value, maximum);
+ OS.gtk_spin_button_set_range (handle, newValue, adjustment.upper);
OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
}
@@ -739,8 +791,14 @@ public void setMinimum (int value) {
public void setPageIncrement (int value) {
checkWidget ();
if (value < 1) return;
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ double newValue = value;
+ int digits = OS.gtk_spin_button_get_digits (handle);
+ for (int i = 0; i < digits; i++) newValue /= 10;
OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
- OS.gtk_spin_button_set_increments (handle, getIncrement (), value);
+ OS.gtk_spin_button_set_increments (handle, adjustment.step_increment, newValue);
OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
}
@@ -759,11 +817,42 @@ public void setPageIncrement (int value) {
*/
public void setSelection (int value) {
checkWidget ();
+ double newValue = value;
+ int digits = OS.gtk_spin_button_get_digits (handle);
+ for (int i = 0; i < digits; i++) newValue /= 10;
OS.g_signal_handlers_block_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
- OS.gtk_spin_button_set_value (handle, value);
+ OS.gtk_spin_button_set_value (handle, newValue);
OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, 0, 0, VALUE_CHANGED);
}
+public void setDigits (int digits) {
+ checkWidget ();
+ if (digits < 0) return;
+ int oldDigits = OS.gtk_spin_button_get_digits (handle);
+ if (digits == oldDigits) return;
+ int /*long*/ hAdjustment = OS.gtk_spin_button_get_adjustment (handle);
+ GtkAdjustment adjustment = new GtkAdjustment ();
+ OS.memmove (adjustment, hAdjustment);
+ int diff = Math.abs (digits - oldDigits);
+ int factor = 1;
+ for (int i = 0; i < diff; i++) factor *= 10;
+ if (oldDigits > digits) {
+ adjustment.value *= factor;
+ adjustment.upper *= factor;
+ adjustment.lower *= factor;
+ adjustment.step_increment *= factor;
+ adjustment.page_increment *= factor;
+ } else {
+ adjustment.value /= factor;
+ adjustment.upper /= factor;
+ adjustment.lower /= factor;
+ adjustment.step_increment /= factor;
+ adjustment.page_increment /= factor;
+ }
+ OS.memmove (hAdjustment, adjustment);
+ OS.gtk_spin_button_set_digits (handle, digits);
+}
+
boolean translateTraversal (GdkEventKey keyEvent) {
int key = keyEvent.keyval;
switch (key) {
@@ -802,6 +891,14 @@ String verifyText (String string, int start, int end) {
OS.gdk_event_free (eventPtr);
}
int index = 0;
+ if (OS.gtk_spin_button_get_digits (handle) > 0) {
+ String decimalSeparator = getDecimalSeparator ();
+ index = string.indexOf (decimalSeparator);
+ if (index != -1) {
+ string = string.substring (0, index) + string.substring (index + 1);
+ }
+ index = 0;
+ }
while (index < string.length ()) {
if (!Character.isDigit (string.charAt (index))) break;
index++;

Back to the top