Changeset 212:8ab606c00520

Show
Ignore:
Timestamp:
04/06/08 14:26:37 (5 months ago)
Author:
Frank Benoit <benoit@tionex.de>
branch:
default
Message:

Fix side effects in getter methods

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dwt/widgets/Spinner.d

    r158 r212  
    2929import tango.stdc.stringz; 
    3030import tango.util.Convert; 
    31 import Math = tango.math.Math; 
    32 static import tango.stdc.string; 
    33 static import tango.text.Util; 
    34 import Unicode = tango.text.Unicode; 
     31import dwt.dwthelper.utils; 
     32alias char[] String; 
    3533 
    3634/** 
     
    204202    if (wHint !is DWT.DEFAULT && wHint < 0) wHint = 0; 
    205203    if (hHint !is DWT.DEFAULT && hHint < 0) hHint = 0; 
    206     int w, h; 
     204    int[1] w, h; 
    207205    OS.gtk_widget_realize (handle); 
    208206    auto layout = OS.gtk_entry_get_layout (cast(GtkEntry*)handle); 
     
    210208    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    211209    for (int i = 0; i < digits; i++) adjustment.upper *= 10; 
    212     char[] string = to!(char[])( (cast(int) adjustment.upper) ); 
     210    String string = to!(String)( (cast(int) adjustment.upper) ); 
    213211    if (digits > 0) { 
    214212        //PROTING_TODO: Efficiency 
    215         char[] buffer = string ~ getDecimalSeparator (); 
     213        String buffer = string ~ getDecimalSeparator (); 
    216214        int count = digits - string.length; 
    217215        while (count >= 0) { 
     
    223221    char [] buffer1 = string; 
    224222    auto ptr = OS.pango_layout_get_text (layout); 
    225     char[] buffer2 = fromStringz( ptr ).dup; 
     223    String buffer2 = fromStringz( ptr ).dup; 
    226224    OS.pango_layout_set_text (layout, buffer1.ptr, buffer1.length); 
    227     OS.pango_layout_get_size (layout, &w, &h); 
     225    OS.pango_layout_get_size (layout, w.ptr, h.ptr); 
    228226    OS.pango_layout_set_text (layout, buffer2.ptr, buffer2.length); 
    229     int width = OS.PANGO_PIXELS (w); 
    230     int height = OS.PANGO_PIXELS (h); 
     227    int width = OS.PANGO_PIXELS (w [0]); 
     228    int height = OS.PANGO_PIXELS (h [0]); 
    231229    width = wHint is DWT.DEFAULT ? width : wHint; 
    232230    height = hHint is DWT.DEFAULT ? height : hHint; 
     
    392390    auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle); 
    393391    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    394     for (int i = 0; i < digits; i++) adjustment.step_increment *= 10; 
    395     return cast(int) (adjustment.step_increment + 0.5); 
     392    auto value = adjustment.step_increment; 
     393    for (int i = 0; i < digits; i++) value *= 10; 
     394    return cast(int) (value + 0.5); 
    396395} 
    397396 
     
    410409    auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle); 
    411410    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    412     for (int i = 0; i < digits; i++) adjustment.upper *= 10; 
    413     return cast(int) (adjustment.upper + 0.5); 
     411    auto value = adjustment.upper; 
     412    for (int i = 0; i < digits; i++) value *= 10; 
     413    return cast(int) (value + 0.5); 
    414414} 
    415415 
     
    428428    auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle); 
    429429    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    430     for (int i = 0; i < digits; i++) adjustment.lower *= 10; 
    431     return cast(int) (adjustment.lower + 0.5); 
     430    auto value = adjustment.lower; 
     431    for (int i = 0; i < digits; i++) value *= 10; 
     432    return cast(int) (value + 0.5); 
    432433} 
    433434 
     
    447448    auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle); 
    448449    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    449     for (int i = 0; i < digits; i++) adjustment.page_increment *= 10; 
    450     return cast(int) (adjustment.page_increment + 0.5); 
     450    auto value = adjustment.page_increment; 
     451    for (int i = 0; i < digits; i++) value *= 10; 
     452    return cast(int) (value + 0.5); 
    451453} 
    452454 
     
    465467    auto adjustment = OS.gtk_spin_button_get_adjustment (cast(GtkSpinButton*)handle); 
    466468    int digits = OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle); 
    467     for (int i = 0; i < digits; i++) adjustment.value *= 10; 
    468     return cast(int) (adjustment.value + 0.5); 
     469    auto value = adjustment.value; 
     470    for (int i = 0; i < digits; i++) value *= 10; 
     471    return cast(int) (value + 0.5); 
    469472} 
    470473 
     
    484487} 
    485488 
    486 char[] getDecimalSeparator () { 
     489String getDecimalSeparator () { 
    487490    auto ptr = OS.localeconv_decimal_point (); 
    488491    return fromStringz( ptr ).dup; 
     
    571574override int /*long*/ gtk_delete_text (GtkWidget* widget, int start_pos, int end_pos) { 
    572575    if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0; 
    573     char[] newText = verifyText ("", cast(int)/*64*/start_pos, cast(int)/*64*/end_pos); 
     576    String newText = verifyText ("", cast(int)/*64*/start_pos, cast(int)/*64*/end_pos); 
    574577    if (newText is null) { 
    575578        OS.g_signal_stop_emission_by_name (handle, OS.delete_text.ptr); 
     
    602605//  if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return 0; 
    603606    if (new_text is null || new_text_length is 0) return 0; 
    604     char[] oldText = new_text[ 0 .. new_text_length ].dup; 
     607    String oldText = new_text[ 0 .. new_text_length ].dup; 
    605608    int pos; 
    606609    pos = position; 
     
    609612        pos = cast(int)/*64*/OS.g_utf8_strlen (ptr, -1); 
    610613    } 
    611     char[] newText = verifyText (oldText, pos, pos); 
     614    String newText = verifyText (oldText, pos, pos); 
    612615    if (newText !is oldText) { 
    613616        int newStart, newEnd; 
     
    10251028} 
    10261029 
    1027 char[] verifyText (char[] string, int start, int end) { 
     1030String verifyText (String string, int start, int end) { 
    10281031    if (string.length is 0 && start is end) return null; 
    10291032    Event event = new Event (); 
     
    10441047    int index = 0; 
    10451048    if (OS.gtk_spin_button_get_digits (cast(GtkSpinButton*)handle) > 0) { 
    1046         char[] decimalSeparator = getDecimalSeparator (); 
    1047         index = tango.text.Util.locatePattern( string, decimalSeparator ); 
    1048         if (index !is string.length) { 
    1049             string = string[ 0 .. index ] ~ string[ index + 1 ]
     1049        String decimalSeparator = getDecimalSeparator (); 
     1050        index = string.indexOf( decimalSeparator ); 
     1051        if (index !is -1 ) { 
     1052            string = string.substring( 0, index ) ~ string.substring( index + 1 )
    10501053        } 
    10511054        index = 0; 
    10521055    } 
    10531056    while (index < string.length) { 
    1054         if (!Unicode.isDigit (string[index])) break; 
     1057        if (!CharacterIsDigit (string.charAt(index))) break; 
    10551058        index++; 
    10561059    }