Mercurial > projects > dwt-win
changeset 65:66203354c9d3
Spinner
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 04 Feb 2008 15:39:21 +0100 |
parents | 8c6992b95018 |
children | 774d936d1380 |
files | dwt/dwthelper/utils.d dwt/internal/win32/OS.d dwt/widgets/Spinner.d tango_sys_win32/Types.di |
diffstat | 4 files changed, 214 insertions(+), 208 deletions(-) [+] |
line wrap: on
line diff
--- a/dwt/dwthelper/utils.d Mon Feb 04 14:53:27 2008 +0100 +++ b/dwt/dwthelper/utils.d Mon Feb 04 15:39:21 2008 +0100 @@ -62,6 +62,9 @@ bool CharacterIsWhitespace( dchar c ){ return tango.text.Unicode.isWhitespace( c ); } +bool CharacterIsDigit( dchar c ){ + return tango.text.Unicode.isDigit( c ); +} public int indexOf( char[] str, char searched ){ int res = tango.text.Util.locate( str, searched ); @@ -75,6 +78,10 @@ return res; } +public int indexOf(char[] str, char[] ch){ + return indexOf( str, ch, 0 ); +} + public int indexOf(char[] str, char[] ch, int start){ int res = tango.text.Util.locatePattern( str, ch, start ); if( res is str.length ) res = -1;
--- a/dwt/internal/win32/OS.d Mon Feb 04 14:53:27 2008 +0100 +++ b/dwt/internal/win32/OS.d Mon Feb 04 15:39:21 2008 +0100 @@ -1887,7 +1887,7 @@ public static const int UIS_INITIALIZE = 3; public static const int UISF_HIDEACCEL = 0x2; public static const int UISF_HIDEFOCUS = 0x1; - public static const char[] UPDOWN_CLASS = "msctls_updown32"; //$NON-NLS-1$ + public static const TCHAR[] UPDOWN_CLASS = "msctls_updown32"; //$NON-NLS-1$ public static const int USP_E_SCRIPT_NOT_IN_FONT = 0x80040200; public static const int VERTRES = 0xa; public static const int VK_BACK = 0x8;
--- a/dwt/widgets/Spinner.d Mon Feb 04 14:53:27 2008 +0100 +++ b/dwt/widgets/Spinner.d Mon Feb 04 15:39:21 2008 +0100 @@ -10,10 +10,6 @@ *******************************************************************************/ module dwt.widgets.Spinner; -import dwt.widgets.Composite; -class Spinner : Composite { -} -/++ import dwt.DWT; import dwt.DWTException; import dwt.events.ModifyListener; @@ -22,17 +18,19 @@ import dwt.events.VerifyListener; import dwt.graphics.Point; import dwt.graphics.Rectangle; -import dwt.internal.win32.LRESULT; -import dwt.internal.win32.NMHDR; -import dwt.internal.win32.NMUPDOWN; import dwt.internal.win32.OS; -import dwt.internal.win32.RECT; -import dwt.internal.win32.TCHAR; -import dwt.internal.win32.TEXTMETRIC; -import dwt.internal.win32.TEXTMETRICA; -import dwt.internal.win32.TEXTMETRICW; -import dwt.internal.win32.UDACCEL; -import dwt.internal.win32.WNDCLASS; + +import dwt.widgets.Composite; +import dwt.widgets.TypedListener; +import dwt.widgets.Event; +import dwt.widgets.Shell; + + +import dwt.dwthelper.utils; +import dwt.dwthelper.Integer; +import tango.text.convert.Integer : toString; +static import tango.text.Text; +alias tango.text.Text.Text!(char) StringBuffer; /** * Instances of this class are selectable user interface @@ -54,7 +52,7 @@ * * @since 3.1 */ -public class Spinner extends Composite { +public class Spinner : Composite { alias Composite.computeSize computeSize; alias Composite.sendKeyEvent sendKeyEvent; @@ -62,18 +60,18 @@ alias Composite.setToolTipText setToolTipText; alias Composite.windowProc windowProc; - int hwndText, hwndUpDown; + HWND hwndText, hwndUpDown; bool ignoreModify; int pageIncrement, digits; - static final int EditProc; - static final TCHAR EditClass = new TCHAR (0, "EDIT", true); - static final int UpDownProc; - static final TCHAR UpDownClass = new TCHAR (0, OS.UPDOWN_CLASS, true); - static { - WNDCLASS lpWndClass = new WNDCLASS (); - OS.GetClassInfo (0, EditClass, lpWndClass); + static const WNDPROC EditProc; + static const TCHAR[] EditClass = "EDIT"; + static const WNDPROC UpDownProc; + static const TCHAR[] UpDownClass = OS.UPDOWN_CLASS; + static this() { + WNDCLASS lpWndClass; + OS.GetClassInfo (null, EditClass.ptr, &lpWndClass); EditProc = lpWndClass.lpfnWndProc; - OS.GetClassInfo (0, UpDownClass, lpWndClass); + OS.GetClassInfo (null, UpDownClass.ptr, &lpWndClass); UpDownProc = lpWndClass.lpfnWndProc; } @@ -106,19 +104,19 @@ * @see Widget#checkSubclass * @see Widget#getStyle */ -public Spinner (Composite parent, int style) { +public this (Composite parent, int style) { super (parent, checkStyle (style)); } -override int callWindowProc (int hwnd, int msg, int wParam, int lParam) { - if (handle is 0) return 0; +override LRESULT callWindowProc (HWND hwnd, int msg, int wParam, int lParam) { + if (handle is null) return LRESULT.ZERO; if (hwnd is hwndText) { - return OS.CallWindowProc (EditProc, hwnd, msg, wParam, lParam); + return cast(LRESULT) OS.CallWindowProc (EditProc, hwnd, msg, wParam, lParam); } if (hwnd is hwndUpDown) { - return OS.CallWindowProc (UpDownProc, hwnd, msg, wParam, lParam); + return cast(LRESULT) OS.CallWindowProc (UpDownProc, hwnd, msg, wParam, lParam); } - return OS.DefWindowProc (handle, msg, wParam, lParam); + return cast(LRESULT) OS.DefWindowProc (handle, msg, wParam, lParam); } static int checkStyle (int style) { @@ -132,7 +130,7 @@ return style & ~(DWT.H_SCROLL | DWT.V_SCROLL); } -override bool checkHandle (int hwnd) { +override bool checkHandle (HWND hwnd) { return hwnd is handle || hwnd is hwndText || hwnd is hwndUpDown; } @@ -143,7 +141,7 @@ override void createHandle () { super.createHandle (); state &= ~(CANVAS | THEME_BACKGROUND); - int hInstance = OS.GetModuleHandle (null); + auto hInstance = OS.GetModuleHandle (null); int textExStyle = (style & DWT.BORDER) !is 0 ? OS.WS_EX_CLIENTEDGE : 0; int textStyle = OS.WS_CHILD | OS.WS_VISIBLE | OS.ES_AUTOHSCROLL | OS.WS_CLIPSIBLINGS; if ((style & DWT.READ_ONLY) !is 0) textStyle |= OS.ES_READONLY; @@ -152,16 +150,16 @@ } hwndText = OS.CreateWindowEx ( textExStyle, - EditClass, + EditClass.ptr, null, textStyle, 0, 0, 0, 0, handle, - 0, + null, hInstance, null); - if (hwndText is 0) error (DWT.ERROR_NO_HANDLES); - OS.SetWindowLong (hwndText, OS.GWL_ID, hwndText); + if (hwndText is null) error (DWT.ERROR_NO_HANDLES); + OS.SetWindowLong (hwndText, OS.GWL_ID, cast(int) hwndText); int upDownStyle = OS.WS_CHILD | OS.WS_VISIBLE | OS.UDS_AUTOBUDDY; if ((style & DWT.WRAP) !is 0) upDownStyle |= OS.UDS_WRAP; if ((style & DWT.BORDER) !is 0) { @@ -173,20 +171,20 @@ } hwndUpDown = OS.CreateWindowEx ( 0, - UpDownClass, + UpDownClass.ptr, null, upDownStyle, 0, 0, 0, 0, handle, - 0, + null, hInstance, null); - if (hwndUpDown is 0) error (DWT.ERROR_NO_HANDLES); + if (hwndUpDown is null) error (DWT.ERROR_NO_HANDLES); int flags = OS.SWP_NOSIZE | OS.SWP_NOMOVE | OS.SWP_NOACTIVATE; SetWindowPos (hwndText, hwndUpDown, 0, 0, 0, 0, flags); - OS.SetWindowLong (hwndUpDown, OS.GWL_ID, hwndUpDown); + OS.SetWindowLong (hwndUpDown, OS.GWL_ID, cast(int) hwndUpDown); if (OS.IsDBLocale) { - int hIMC = OS.ImmGetContext (handle); + auto hIMC = OS.ImmGetContext (handle); OS.ImmAssociateContext (hwndText, hIMC); OS.ImmAssociateContext (hwndUpDown, hIMC); OS.ImmReleaseContext (handle, hIMC); @@ -195,7 +193,7 @@ OS.SendMessage (hwndUpDown, OS.IsWinCE ? OS.UDM_SETPOS : OS.UDM_SETPOS32, 0, 0); pageIncrement = 10; digits = 0; - TCHAR buffer = new TCHAR (getCodePage (), "0", true); + TCHAR* buffer = StrToTCHARz (getCodePage (), "0"); OS.SetWindowText (hwndText, buffer); } @@ -283,7 +281,7 @@ addListener (DWT.Verify, typedListener); } -override int borderHandle () { +override HWND borderHandle () { return hwndText; } @@ -291,33 +289,33 @@ checkWidget (); int width = 0, height = 0; if (wHint is DWT.DEFAULT || hHint is DWT.DEFAULT) { - int newFont, oldFont = 0; - int hDC = OS.GetDC (hwndText); - newFont = OS.SendMessage (hwndText, OS.WM_GETFONT, 0, 0); - if (newFont !is 0) oldFont = OS.SelectObject (hDC, newFont); - TEXTMETRIC tm = OS.IsUnicode ? (TEXTMETRIC) new TEXTMETRICW () : new TEXTMETRICA (); - OS.GetTextMetrics (hDC, tm); + HFONT newFont, oldFont; + auto hDC = OS.GetDC (hwndText); + newFont = cast(HFONT) OS.SendMessage (hwndText, OS.WM_GETFONT, 0, 0); + if (newFont !is null) oldFont = OS.SelectObject (hDC, newFont); + TEXTMETRIC tm; + OS.GetTextMetrics (hDC, &tm); height = tm.tmHeight; - RECT rect = new RECT (); - int [] max = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, max); - String string = String.valueOf (max [0]); + RECT rect; + int max; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, &max); + char[] string = .toString( max ); if (digits > 0) { StringBuffer buffer = new StringBuffer (); buffer.append (string); buffer.append (getDecimalSeparator ()); - int count = digits - string.length (); + int count = digits - string.length; while (count >= 0) { buffer.append ("0"); count--; } string = buffer.toString (); } - TCHAR buffer = new TCHAR (getCodePage (), string, false); + TCHAR[] buffer = StrToTCHARs (getCodePage (), string, false); int flags = OS.DT_CALCRECT | OS.DT_EDITCONTROL | OS.DT_NOPREFIX; - OS.DrawText (hDC, buffer, buffer.length (), rect, flags); + OS.DrawText (hDC, buffer.ptr, buffer.length, &rect, flags); width = rect.right - rect.left; - if (newFont !is 0) OS.SelectObject (hDC, oldFont); + if (newFont !is null ) OS.SelectObject (hDC, oldFont); OS.ReleaseDC (hwndText, hDC); } if (width is 0) width = DEFAULT_WIDTH; @@ -339,11 +337,11 @@ checkWidget (); /* Get the trim of the text control */ - RECT rect = new RECT (); - OS.SetRect (rect, x, y, x + width, y + height); + RECT rect; + OS.SetRect (&rect, x, y, x + width, y + height); int bits0 = OS.GetWindowLong (hwndText, OS.GWL_STYLE); int bits1 = OS.GetWindowLong (hwndText, OS.GWL_EXSTYLE); - OS.AdjustWindowRectEx (rect, bits0, false, bits1); + OS.AdjustWindowRectEx (&rect, bits0, false, bits1); width = rect.right - rect.left; height = rect.bottom - rect.top; @@ -417,7 +415,7 @@ } override bool hasFocus () { - int hwndFocus = OS.GetFocus (); + auto hwndFocus = OS.GetFocus (); if (hwndFocus is handle) return true; if (hwndFocus is hwndText) return true; if (hwndFocus is hwndUpDown) return true; @@ -439,10 +437,10 @@ return digits; } -String getDecimalSeparator () { - TCHAR tchar = new TCHAR (getCodePage (), 4); - int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SDECIMAL, tchar, 4); - return size !is 0 ? tchar.toString (0, size - 1) : "."; +char[] getDecimalSeparator () { + TCHAR[] tchar = NewTCHARs (getCodePage (), 4); + int size = OS.GetLocaleInfo (OS.LOCALE_USER_DEFAULT, OS.LOCALE_SDECIMAL, tchar.ptr, 4); + return size !is 0 ? TCHARsToStr( tchar[0 .. size] ) : "."; } /** @@ -458,8 +456,8 @@ */ public int getIncrement () { checkWidget (); - UDACCEL udaccel = new UDACCEL (); - OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 1, udaccel); + UDACCEL udaccel; + OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 1, &udaccel); return udaccel.nInc; } @@ -475,9 +473,9 @@ */ public int getMaximum () { checkWidget (); - int [] max = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, max); - return max [0]; + int max; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, &max); + return max; } /** @@ -492,9 +490,9 @@ */ public int getMinimum () { checkWidget (); - int [] min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, null); - return min [0]; + int min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, null); + return min; } /** @@ -533,24 +531,24 @@ } int getSelectionText () { - int length = OS.GetWindowTextLength (hwndText); - TCHAR buffer = new TCHAR (getCodePage (), length + 1); - OS.GetWindowText (hwndText, buffer, length + 1); - String string = buffer.toString (0, length); + int length_ = OS.GetWindowTextLength (hwndText); + TCHAR[] buffer = NewTCHARs (getCodePage (), length_ + 1); + OS.GetWindowText (hwndText, buffer.ptr, length_ + 1); + char[] string = TCHARsToStr( buffer[ 0 .. length_] ); try { int value; if (digits > 0) { - String decimalSeparator = getDecimalSeparator (); + char[] decimalSeparator = getDecimalSeparator (); int index = string.indexOf (decimalSeparator); if (index !is -1) { - String wholePart = string.substring (0, index); - String decimalPart = string.substring (index + 1); - if (decimalPart.length () > digits) { + char[] wholePart = string.substring (0, index); + char[] decimalPart = string.substring (index + 1); + if (decimalPart.length > digits) { decimalPart = decimalPart.substring (0, digits); } else { - int i = digits - decimalPart.length (); + int i = digits - decimalPart.length; for (int j = 0; j < i; j++) { - decimalPart = decimalPart + "0"; + decimalPart = decimalPart ~ "0"; } } int wholeValue = Integer.parseInt (wholePart); @@ -563,9 +561,9 @@ } else { value = Integer.parseInt (string); } - int [] max = new int [1], min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, max); - if (min [0] <= value && value <= max [0]) return value; + int max, min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, &max); + if (min <= value && value <= max) return value; } catch (NumberFormatException e) { } return -1; @@ -577,9 +575,9 @@ int mbcsSize = OS.GetWindowTextLengthA (hwndText); if (mbcsSize is 0) return 0; if (mbcsPos >= mbcsSize) return mbcsSize; - byte [] buffer = new byte [mbcsSize + 1]; - OS.GetWindowTextA (hwndText, buffer, mbcsSize + 1); - return OS.MultiByteToWideChar (getCodePage (), OS.MB_PRECOMPOSED, buffer, mbcsPos, null, 0); + char [] buffer = new char [mbcsSize + 1]; + OS.GetWindowTextA (hwndText, buffer.ptr, mbcsSize + 1); + return OS.MultiByteToWideChar (getCodePage (), OS.MB_PRECOMPOSED, buffer.ptr, mbcsPos, null, 0); } /** @@ -608,7 +606,7 @@ override void releaseHandle () { super.releaseHandle (); - hwndText = hwndUpDown = 0; + hwndText = hwndUpDown = null; } /** @@ -720,54 +718,54 @@ } /* Verify the character */ - String oldText = ""; - int [] start = new int [1], end = new int [1]; - OS.SendMessage (hwndText, OS.EM_GETSEL, start, end); + char[] oldText = ""; + int start, end; + OS.SendMessage (hwndText, OS.EM_GETSEL, &start, &end); switch (key) { case 0x08: /* Bs */ - if (start [0] is end [0]) { - if (start [0] is 0) return true; - start [0] = start [0] - 1; + if (start is end) { + if (start is 0) return true; + start = start - 1; if (!OS.IsUnicode && OS.IsDBLocale) { - int [] newStart = new int [1], newEnd = new int [1]; - OS.SendMessage (hwndText, OS.EM_SETSEL, start [0], end [0]); - OS.SendMessage (hwndText, OS.EM_GETSEL, newStart, newEnd); - if (start [0] !is newStart [0]) start [0] = start [0] - 1; + int newStart, newEnd; + OS.SendMessage (hwndText, OS.EM_SETSEL, start, end); + OS.SendMessage (hwndText, OS.EM_GETSEL, &newStart, &newEnd); + if (start !is newStart) start = start - 1; } - start [0] = Math.max (start [0], 0); + start = Math.max (start, 0); } break; case 0x7F: /* Del */ - if (start [0] is end [0]) { - int length = OS.GetWindowTextLength (hwndText); - if (start [0] is length) return true; - end [0] = end [0] + 1; + if (start is end) { + int length_ = OS.GetWindowTextLength (hwndText); + if (start is length_) return true; + end = end + 1; if (!OS.IsUnicode && OS.IsDBLocale) { - int [] newStart = new int [1], newEnd = new int [1]; - OS.SendMessage (hwndText, OS.EM_SETSEL, start [0], end [0]); - OS.SendMessage (hwndText, OS.EM_GETSEL, newStart, newEnd); - if (end [0] !is newEnd [0]) end [0] = end [0] + 1; + int newStart, newEnd; + OS.SendMessage (hwndText, OS.EM_SETSEL, start, end); + OS.SendMessage (hwndText, OS.EM_GETSEL, &newStart, &newEnd); + if (end !is newEnd) end = end + 1; } - end [0] = Math.min (end [0], length); + end = Math.min (end, length_); } break; case '\r': /* Return */ return true; default: /* Tab and other characters */ if (key !is '\t' && key < 0x20) return true; - oldText = new String (new char [] {key}); + oldText = [key]; break; } - String newText = verifyText (oldText, start [0], end [0], event); + char[] newText = verifyText (oldText, start, end, event); if (newText is null) return false; if (newText is oldText) return true; - TCHAR buffer = new TCHAR (getCodePage (), newText, true); - OS.SendMessage (hwndText, OS.EM_SETSEL, start [0], end [0]); + TCHAR* buffer = StrToTCHARz (getCodePage (), newText); + OS.SendMessage (hwndText, OS.EM_SETSEL, start, end); OS.SendMessage (hwndText, OS.EM_REPLACESEL, 0, buffer); return false; } -override void setBackgroundImage (int hBitmap) { +override void setBackgroundImage (HBITMAP hBitmap) { super.setBackgroundImage (hBitmap); OS.InvalidateRect (hwndText, null, true); } @@ -831,21 +829,21 @@ public void setIncrement (int value) { checkWidget (); if (value < 1) return; - int hHeap = OS.GetProcessHeap (); - int count = OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 0, (UDACCEL)null); - int udaccels = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, UDACCEL.sizeof * count); + auto hHeap = OS.GetProcessHeap (); + int count = OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 0, cast(UDACCEL*)null); + auto udaccels = cast(UDACCEL*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, UDACCEL.sizeof * count); OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, count, udaccels); int first = -1; - UDACCEL udaccel = new UDACCEL (); + UDACCEL udaccel; for (int i = 0; i < count; i++) { - int offset = udaccels + (i * UDACCEL.sizeof); - OS.MoveMemory (udaccel, offset, UDACCEL.sizeof); + void* offset = &udaccels + i; + OS.MoveMemory (&udaccel, offset, UDACCEL.sizeof); if (first is -1) first = udaccel.nInc; udaccel.nInc = udaccel.nInc * value / first; - OS.MoveMemory (offset, udaccel, UDACCEL.sizeof); + OS.MoveMemory (&offset, &udaccel, UDACCEL.sizeof); } - OS.SendMessage (hwndUpDown, OS.UDM_SETACCEL, count, udaccels); - OS.HeapFree (hHeap, 0, udaccels); + OS.SendMessage (hwndUpDown, OS.UDM_SETACCEL, count, &udaccels); + OS.HeapFree (hHeap, 0, &udaccels); } /** @@ -864,16 +862,16 @@ public void setMaximum (int value) { checkWidget (); if (value < 0) return; - int [] min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, null); - if (value <= min [0]) return; + int min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, null); + if (value <= min) return; int pos; if (OS.IsWinCE) { pos = OS.SendMessage (hwndUpDown, OS.UDM_GETPOS, 0, 0) & 0xFFFF; } else { pos = OS.SendMessage (hwndUpDown, OS.UDM_GETPOS32, 0, 0); } - OS.SendMessage (hwndUpDown , OS.UDM_SETRANGE32, min [0], value); + OS.SendMessage (hwndUpDown , OS.UDM_SETRANGE32, min, value); if (pos > value) setSelection (value, true, true, false); } @@ -893,16 +891,16 @@ public void setMinimum (int value) { checkWidget (); if (value < 0) return; - int [] max = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, max); - if (value >= max [0]) return; + int max; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, &max); + if (value >= max) return; int pos; if (OS.IsWinCE) { pos = OS.SendMessage (hwndUpDown, OS.UDM_GETPOS, 0, 0) & 0xFFFF; } else { pos = OS.SendMessage (hwndUpDown, OS.UDM_GETPOS32, 0, 0); } - OS.SendMessage (hwndUpDown , OS.UDM_SETRANGE32, value, max [0]); + OS.SendMessage (hwndUpDown , OS.UDM_SETRANGE32, value, max); if (pos < value) setSelection (value, true, true, false); } @@ -939,9 +937,9 @@ */ public void setSelection (int value) { checkWidget (); - int [] max = new int [1], min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, max); - value = Math.min (Math.max (min [0], value), max [0]); + int max, min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, &max); + value = Math.min (Math.max (min, value), max ); setSelection (value, true, true, false); } @@ -950,10 +948,10 @@ OS.SendMessage (hwndUpDown , OS.IsWinCE ? OS.UDM_SETPOS : OS.UDM_SETPOS32, 0, value); } if (setText) { - String string = String.valueOf (value); + char[] string = .toString( value ); if (digits > 0) { - String decimalSeparator = getDecimalSeparator (); - int index = string.length () - digits; + char[] decimalSeparator = getDecimalSeparator (); + int index = string.length - digits; StringBuffer buffer = new StringBuffer (); if (index > 0) { buffer.append (string.substring (0, index)); @@ -968,17 +966,17 @@ string = buffer.toString (); } if (hooks (DWT.Verify) || filters (DWT.Verify)) { - int length = OS.GetWindowTextLength (hwndText); - string = verifyText (string, 0, length, null); + int length_ = OS.GetWindowTextLength (hwndText); + string = verifyText (string, 0, length_, null); if (string is null) return; } - TCHAR buffer = new TCHAR (getCodePage (), string, true); + TCHAR* buffer = StrToTCHARz (getCodePage (), string); OS.SetWindowText (hwndText, buffer); } if (notify) postEvent (DWT.Selection); } -override void setToolTipText (Shell shell, String string) { +override void setToolTipText (Shell shell, char[] string) { shell.setToolTipText (hwndText, string); shell.setToolTipText (hwndUpDown, string); } @@ -1030,11 +1028,11 @@ override void unsubclass () { super.unsubclass (); - OS.SetWindowLong (hwndText, OS.GWL_WNDPROC, EditProc); - OS.SetWindowLong (hwndUpDown, OS.GWL_WNDPROC, UpDownProc); + OS.SetWindowLong (hwndText, OS.GWL_WNDPROC, cast(int) EditProc); + OS.SetWindowLong (hwndUpDown, OS.GWL_WNDPROC, cast(int) UpDownProc); } -String verifyText (String string, int start, int end, Event keyEvent) { +char[] verifyText (char[] string, int start, int end, Event keyEvent) { Event event = new Event (); event.text = string; event.start = start; @@ -1046,18 +1044,18 @@ } int index = 0; if (digits > 0) { - String decimalSeparator = getDecimalSeparator (); + char[] decimalSeparator = getDecimalSeparator (); index = string.indexOf (decimalSeparator); if (index !is -1) { - string = string.substring (0, index) + string.substring (index + 1); + string = string[0 .. index] ~ string[ index + 1 .. $ ]; } index = 0; } - while (index < string.length ()) { - if (!Character.isDigit (string.charAt (index))) break; + while (index < string.length ) { + if (!CharacterIsDigit (string.charAt (index))) break; index++; } - event.doit = index is string.length (); + event.doit = index is string.length ; if (!OS.IsUnicode && OS.IsDBLocale) { event.start = mbcsToWcsPos (start); event.end = mbcsToWcsPos (end); @@ -1071,9 +1069,9 @@ return super.widgetExtStyle () & ~OS.WS_EX_CLIENTEDGE; } -override int windowProc (int hwnd, int msg, int wParam, int lParam) { +override int windowProc (HWND hwnd, int msg, int wParam, int lParam) { if (hwnd is hwndText || hwnd is hwndUpDown) { - LRESULT result = null; + LRESULT result = LRESULT.NULL; switch (msg) { /* Keyboard messages */ case OS.WM_CHAR: result = wmChar (hwnd, wParam, lParam); break; @@ -1125,7 +1123,7 @@ } break; } - if (result !is null) return result.value; + if (result !is LRESULT.NULL) return result; return callWindowProc (hwnd, msg, wParam, lParam); } return super.windowProc (hwnd, msg, wParam, lParam); @@ -1133,22 +1131,22 @@ override LRESULT WM_ERASEBKGND (int wParam, int lParam) { super.WM_ERASEBKGND (wParam, lParam); - drawBackground (wParam); + drawBackground (cast(HANDLE)wParam); return LRESULT.ONE; } override LRESULT WM_KILLFOCUS (int wParam, int lParam) { - return null; + return LRESULT.NULL; } override LRESULT WM_SETFOCUS (int wParam, int lParam) { OS.SetFocus (hwndText); - return null; + return LRESULT.NULL; } override LRESULT WM_SETFONT (int wParam, int lParam) { LRESULT result = super.WM_SETFONT (wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; OS.SendMessage (hwndText, OS.WM_SETFONT, wParam, lParam); return result; } @@ -1161,14 +1159,14 @@ int textWidth = width - upDownWidth; int border = OS.GetSystemMetrics (OS.SM_CXEDGE); int flags = OS.SWP_NOZORDER | OS.SWP_DRAWFRAME | OS.SWP_NOACTIVATE; - SetWindowPos (hwndText, 0, 0, 0, textWidth + border, height, flags); - SetWindowPos (hwndUpDown, 0, textWidth, 0, upDownWidth, height, flags); + SetWindowPos (hwndText, null, 0, 0, textWidth + border, height, flags); + SetWindowPos (hwndUpDown, null, textWidth, 0, upDownWidth, height, flags); return result; } -override LRESULT wmChar (int hwnd, int wParam, int lParam) { +override LRESULT wmChar (HWND hwnd, int wParam, int lParam) { LRESULT result = super.wmChar (hwnd, wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; /* * Feature in Windows. For some reason, when the * widget is a single line text widget, when the @@ -1186,38 +1184,38 @@ return result; } -LRESULT wmClipboard (int hwndText, int msg, int wParam, int lParam) { - if ((style & DWT.READ_ONLY) !is 0) return null; +LRESULT wmClipboard (HWND hwndText, int msg, int wParam, int lParam) { + if ((style & DWT.READ_ONLY) !is 0) return LRESULT.NULL; // if (!hooks (DWT.Verify) && !filters (DWT.Verify)) return null; bool call = false; - int [] start = new int [1], end = new int [1]; - String newText = null; + int start, end; + char[] newText = null; switch (msg) { case OS.WM_CLEAR: case OS.WM_CUT: - OS.SendMessage (hwndText, OS.EM_GETSEL, start, end); - if (start [0] !is end [0]) { + OS.SendMessage (hwndText, OS.EM_GETSEL, &start, &end); + if (start !is end) { newText = ""; call = true; } break; case OS.WM_PASTE: - OS.SendMessage (hwndText, OS.EM_GETSEL, start, end); + OS.SendMessage (hwndText, OS.EM_GETSEL, &start, &end); newText = getClipboardText (); break; case OS.EM_UNDO: case OS.WM_UNDO: if (OS.SendMessage (hwndText, OS.EM_CANUNDO, 0, 0) !is 0) { ignoreModify = true; - OS.SendMessage (hwndText, OS.EM_GETSEL, start, end); + OS.SendMessage (hwndText, OS.EM_GETSEL, &start, &end); OS.CallWindowProc (EditProc, hwndText, msg, wParam, lParam); - int length = OS.GetWindowTextLength (hwndText); - int [] newStart = new int [1], newEnd = new int [1]; - OS.SendMessage (hwndText, OS.EM_GETSEL, newStart, newEnd); - if (length !is 0 && newStart [0] !is newEnd [0]) { - TCHAR buffer = new TCHAR (getCodePage (), length + 1); - OS.GetWindowText (hwndText, buffer, length + 1); - newText = buffer.toString (newStart [0], newEnd [0] - newStart [0]); + int length_ = OS.GetWindowTextLength (hwndText); + int newStart, newEnd; + OS.SendMessage (hwndText, OS.EM_GETSEL, &newStart, &newEnd); + if (length_ !is 0 && newStart !is newEnd ) { + TCHAR[] buffer = NewTCHARs (getCodePage (), length_ + 1); + OS.GetWindowText (hwndText, buffer.ptr, length_ + 1); + newText = TCHARsToStr( buffer[ newStart .. newEnd - newStart ] ); } else { newText = ""; } @@ -1227,29 +1225,29 @@ break; } if (newText !is null) { - String oldText = newText; - newText = verifyText (newText, start [0], end [0], null); + char[] oldText = newText; + newText = verifyText (newText, start, end, null); if (newText is null) return LRESULT.ZERO; - if (!newText.equals (oldText)) { + if ( newText !=/*eq*/ oldText ) { if (call) { OS.CallWindowProc (EditProc, hwndText, msg, wParam, lParam); } - TCHAR buffer = new TCHAR (getCodePage (), newText, true); + TCHAR[] buffer = StrToTCHARs (getCodePage (), newText, true); if (msg is OS.WM_SETTEXT) { - int hHeap = OS.GetProcessHeap (); - int byteCount = buffer.length () * TCHAR.sizeof; - int pszText = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); - OS.MoveMemory (pszText, buffer, byteCount); - int code = OS.CallWindowProc (EditProc, hwndText, msg, wParam, pszText); + auto hHeap = OS.GetProcessHeap (); + int byteCount = buffer.length * TCHAR.sizeof; + auto pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); + OS.MoveMemory (pszText, buffer.ptr, byteCount); + int code = OS.CallWindowProc (EditProc, hwndText, msg, wParam, cast(int) pszText); OS.HeapFree (hHeap, 0, pszText); - return new LRESULT (code); + return cast(LRESULT) (code); } else { - OS.SendMessage (hwndText, OS.EM_REPLACESEL, 0, buffer); + OS.SendMessage (hwndText, OS.EM_REPLACESEL, 0, buffer.ptr); return LRESULT.ZERO; } } } - return null; + return LRESULT.NULL; } override LRESULT wmCommandChild (int wParam, int lParam) { @@ -1274,13 +1272,13 @@ return super.wmCommandChild (wParam, lParam); } -override LRESULT wmKeyDown (int hwnd, int wParam, int lParam) { +override LRESULT wmKeyDown (HWND hwnd, int wParam, int lParam) { LRESULT result = super.wmKeyDown (hwnd, wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; /* Increment the value */ - UDACCEL udaccel = new UDACCEL (); - OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 1, udaccel); + UDACCEL udaccel; + OS.SendMessage (hwndUpDown, OS.UDM_GETACCEL, 1, &udaccel); int delta = 0; switch (wParam) { case OS.VK_UP: delta = udaccel.nInc; break; @@ -1298,13 +1296,13 @@ } } int newValue = value + delta; - int [] max = new int [1], min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, max); + int max, min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, &max); if ((style & DWT.WRAP) !is 0) { - if (newValue < min [0]) newValue = max [0]; - if (newValue > max [0]) newValue = min [0]; + if (newValue < min ) newValue = max; + if (newValue > max ) newValue = min; } - newValue = Math.min (Math.max (min [0], newValue), max [0]); + newValue = Math.min (Math.max (min , newValue), max ); if (value !is newValue) setSelection (newValue, true, true, true); } @@ -1317,7 +1315,7 @@ return result; } -override LRESULT wmKillFocus (int hwnd, int wParam, int lParam) { +override LRESULT wmKillFocus (HWND hwnd, int wParam, int lParam) { int value = getSelectionText (); if (value is -1) { if (OS.IsWinCE) { @@ -1330,17 +1328,17 @@ return super.wmKillFocus (hwnd, wParam, lParam); } -override LRESULT wmNotifyChild (NMHDR hdr, int wParam, int lParam) { +override LRESULT wmNotifyChild (NMHDR* hdr, int wParam, int lParam) { switch (hdr.code) { case OS.UDN_DELTAPOS: - NMUPDOWN lpnmud = new NMUPDOWN (); - OS.MoveMemory (lpnmud, lParam, NMUPDOWN.sizeof); + NMUPDOWN* lpnmud = cast(NMUPDOWN*)lParam; + //OS.MoveMemory (lpnmud, lParam, NMUPDOWN.sizeof); int value = lpnmud.iPos + lpnmud.iDelta; - int [] max = new int [1], min = new int [1]; - OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, min, max); + int max, min; + OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, &min, &max); if ((style & DWT.WRAP) !is 0) { - if (value < min [0]) value = max [0]; - if (value > max [0]) value = min [0]; + if (value < min ) value = max ; + if (value > max ) value = min ; } /* * The DWT.Modify event is sent after the widget has been @@ -1350,7 +1348,7 @@ * the value explicitly and stop the window proc * from running. */ - value = Math.min (Math.max (min [0], value), max [0]); + value = Math.min (Math.max (min , value), max ); if (value !is lpnmud.iPos) { setSelection (value, true, true, true); } @@ -1370,4 +1368,4 @@ } } -++/ +