diff dwt/widgets/Spinner.d @ 240:ce446666f5a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Mon, 12 May 2008 19:13:01 +0200
parents 380bad9f6852
children 5a30aa9820f3
line wrap: on
line diff
--- a/dwt/widgets/Spinner.d	Mon May 12 15:36:37 2008 +0200
+++ b/dwt/widgets/Spinner.d	Mon May 12 19:13:01 2008 +0200
@@ -64,6 +64,16 @@
     GdkEventKey* gdkEventKey;
     int fixStart = -1, fixEnd = -1;
 
+    /**
+    * The maximum number of characters that can be entered
+    * into a text widget.
+    * <p>
+    * Note that this value is platform dependent, based upon
+    * the native widget implementation.
+    * </p>
+    */
+    public const static int LIMIT = 0x7FFFFFFF;
+
 /**
  * Constructs a new instance of this class given its parent
  * and a style value describing its behavior and appearance.
@@ -390,7 +400,7 @@
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
     auto value = adjustment.step_increment;
     for (int i = 0; i < digits; i++) value *= 10;
-    return cast(int) (value + 0.5);
+    return cast(int) (value > 0 ? value + 0.5 : value - 0.5);
 }
 
 /**
@@ -409,7 +419,7 @@
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
     auto value = adjustment.upper;
     for (int i = 0; i < digits; i++) value *= 10;
-    return cast(int) (value + 0.5);
+    return cast(int) (value > 0 ? value + 0.5 : value - 0.5);
 }
 
 /**
@@ -428,7 +438,7 @@
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
     auto value = adjustment.lower;
     for (int i = 0; i < digits; i++) value *= 10;
-    return cast(int) (value + 0.5);
+    return cast(int) (value > 0 ? value + 0.5 : value - 0.5);
 }
 
 /**
@@ -448,7 +458,7 @@
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
     auto value = adjustment.page_increment;
     for (int i = 0; i < digits; i++) value *= 10;
-    return cast(int) (value + 0.5);
+    return cast(int) (value > 0 ? value + 0.5 : value - 0.5);
 }
 
 /**
@@ -467,7 +477,19 @@
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
     auto value = adjustment.value;
     for (int i = 0; i < digits; i++) value *= 10;
-    return cast(int) (value + 0.5);
+    return cast(int) (value > 0 ? value + 0.5 : value - 0.5);
+}
+
+public String getText () {
+    checkWidget ();
+    auto str = OS.gtk_entry_get_text (handle);
+    return tango.stdc.stringz.fromStringz(str).dup;
+}
+
+public int getTextLimit () {
+    checkWidget ();
+    int limit = OS.gtk_entry_get_max_length (handle);
+    return limit is 0 ? 0xFFFF : limit;
 }
 
 /**
@@ -646,6 +668,14 @@
     return result;
 }
 
+override int /*long*/ gtk_populate_popup (GtkWidget* widget, GtkWidget* menu) {
+    if ((style & DWT.RIGHT_TO_LEFT) !is 0) {
+        OS.gtk_widget_set_direction (menu, OS.GTK_TEXT_DIR_RTL);
+        display.doSetDirectionProc( menu, OS.GTK_TEXT_DIR_RTL);
+    }
+    return 0;
+}
+
 override int /*long*/ gtk_value_changed (int  adjustment) {
     postEvent (DWT.Selection);
     return 0;
@@ -658,6 +688,7 @@
     OS.g_signal_connect_closure (handle, OS.delete_text.ptr, display.closures [DELETE_TEXT], false);
     OS.g_signal_connect_closure (handle, OS.value_changed.ptr, display.closures [VALUE_CHANGED], false);
     OS.g_signal_connect_closure (handle, OS.activate.ptr, display.closures [ACTIVATE], false);
+    OS.g_signal_connect_closure (handle, OS.populate_popup.ptr, display.closures [POPULATE_POPUP], false);
     auto imContext = imContext ();
     if (imContext !is null) {
         OS.g_signal_connect_closure (imContext, OS.commit.ptr, display.closures [COMMIT], false);
@@ -835,7 +866,6 @@
  */
 public void setMaximum (int value) {
     checkWidget ();
-    if (value < 0) return;
     auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle);
     double newValue = value;
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
@@ -861,7 +891,6 @@
  */
 public void setMinimum (int value) {
     checkWidget ();
-    if (value < 0) return;
     auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle);
     double newValue = value;
     int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle);
@@ -919,6 +948,12 @@
     OS.g_signal_handlers_unblock_matched (handle, OS.G_SIGNAL_MATCH_DATA, 0, 0, null, null, udVALUE_CHANGED);
 }
 
+public void setTextLimit (int limit) {
+    checkWidget ();
+    if (limit is 0) error (DWT.ERROR_CANNOT_BE_ZERO);
+    OS.gtk_entry_set_max_length (handle, limit);
+}
+
 /**
  * Sets the number of decimal places used by the receiver.
  * <p>
@@ -989,7 +1024,6 @@
  */
 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;
@@ -1052,6 +1086,10 @@
         }
         index = 0;
     }
+    if (string.length  > 0) {
+        auto adjustment = OS.gtk_spin_button_get_adjustment (handle);
+        if (adjustment.lower < 0 && string.charAt (0) is '-') index++;
+    }
     while (index < string.length) {
         if (!CharacterIsDigit (string.charAt(index))) break;
         index++;