Mercurial > projects > dwt-linux
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++;