# HG changeset patch # User Frank Benoit # Date 1202006632 -3600 # Node ID 6e4e3a8e49717cbe7873375426aa276e57ae7c60 # Parent 2146ed8ff33cced62937cce6638d71e4c094f07b Label diff -r 2146ed8ff33c -r 6e4e3a8e4971 dwt/widgets/Label.d --- a/dwt/widgets/Label.d Sun Feb 03 03:05:19 2008 +0100 +++ b/dwt/widgets/Label.d Sun Feb 03 03:43:52 2008 +0100 @@ -12,12 +12,7 @@ *******************************************************************************/ module dwt.widgets.Label; -import dwt.widgets.Control; -import dwt.widgets.Composite; -class Label : Control { - this (Composite parent, int style) ; -} -/++ + import dwt.DWT; import dwt.DWTException; import dwt.graphics.GC; @@ -25,16 +20,14 @@ import dwt.graphics.Image; import dwt.graphics.Point; import dwt.graphics.Rectangle; -import dwt.internal.win32.DRAWITEMSTRUCT; -import dwt.internal.win32.LRESULT; import dwt.internal.win32.OS; -import dwt.internal.win32.PAINTSTRUCT; -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.WNDCLASS; + +import dwt.widgets.Control; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Event; + +import dwt.dwthelper.utils; /** * Instances of this class represent a non-selectable @@ -58,16 +51,16 @@ * within the DWT implementation. *

*/ -public class Label extends Control { - String text = ""; +public class Label : Control { + char[] text = ""; Image image; - static final int MARGIN = 4; - static final bool IMAGE_AND_TEXT = false; - static final int LabelProc; - static final TCHAR LabelClass = new TCHAR (0, "STATIC", true); - static { - WNDCLASS lpWndClass = new WNDCLASS (); - OS.GetClassInfo (0, LabelClass, lpWndClass); + static const int MARGIN = 4; + static const bool IMAGE_AND_TEXT = false; + static const WNDPROC LabelProc; + static const TCHAR[] LabelClass = "STATIC\0"; + static this() { + WNDCLASS lpWndClass; + OS.GetClassInfo (null, LabelClass.ptr, &lpWndClass); LabelProc = lpWndClass.lpfnWndProc; } @@ -108,13 +101,13 @@ * @see Widget#checkSubclass * @see Widget#getStyle */ -public Label (Composite parent, int style) { +public this (Composite parent, int style) { super (parent, checkStyle (style)); } -int callWindowProc (int hwnd, int msg, int wParam, int lParam) { - if (handle is 0) return 0; - return OS.CallWindowProc (LabelProc, hwnd, msg, wParam, lParam); +LRESULT callWindowProc (HWND hwnd, int msg, int wParam, int lParam) { + if (handle is null) return LRESULT.NULL; + return cast(LRESULT) OS.CallWindowProc (LabelProc, hwnd, msg, wParam, lParam); } static int checkStyle (int style) { @@ -150,35 +143,35 @@ width += rect.width; height += rect.height; if (IMAGE_AND_TEXT) { - if (text.length () !is 0) width += MARGIN; + if (text.length !is 0) width += MARGIN; } else { drawText = false; } } } if (drawText) { - int hDC = OS.GetDC (handle); - int newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); - int oldFont = OS.SelectObject (hDC, newFont); + auto hDC = OS.GetDC (handle); + auto newFont = cast(HFONT) OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); + auto oldFont = OS.SelectObject (hDC, newFont); int length = OS.GetWindowTextLength (handle); if (length is 0) { - TEXTMETRIC tm = OS.IsUnicode ? (TEXTMETRIC) new TEXTMETRICW () : new TEXTMETRICA (); - OS.GetTextMetrics (hDC, tm); + TEXTMETRIC tm; + OS.GetTextMetrics (hDC, &tm); height = Math.max (height, tm.tmHeight); } else { - RECT rect = new RECT (); + RECT rect; int flags = OS.DT_CALCRECT | OS.DT_EDITCONTROL | OS.DT_EXPANDTABS; if ((style & DWT.WRAP) !is 0 && wHint !is DWT.DEFAULT) { flags |= OS.DT_WORDBREAK; rect.right = Math.max (0, wHint - width); } - TCHAR buffer = new TCHAR (getCodePage (), length + 1); - OS.GetWindowText (handle, buffer, length + 1); - OS.DrawText (hDC, buffer, length, rect, flags); + TCHAR[] buffer = new TCHAR [/+getCodePage (),+/ length + 1]; + OS.GetWindowText (handle, buffer.ptr, length + 1); + OS.DrawText (hDC, buffer.ptr, length, &rect, flags); width += rect.right - rect.left; height = Math.max (height, rect.bottom - rect.top); } - if (newFont !is 0) OS.SelectObject (hDC, oldFont); + if (newFont !is null) OS.SelectObject (hDC, oldFont); OS.ReleaseDC (handle, hDC); } if (wHint !is DWT.DEFAULT) width = wHint; @@ -239,7 +232,7 @@ return image; } -String getNameText () { +char[] getNameText () { return getText (); } @@ -255,13 +248,13 @@ *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • * */ -public String getText () { +public char[] getText () { checkWidget (); if ((style & DWT.SEPARATOR) !is 0) return ""; return text; } -bool mnemonicHit (char key) { +bool mnemonicHit (wchar key) { Composite control = this.parent; while (control !is null) { Control [] children = control._getChildren (); @@ -279,10 +272,10 @@ return false; } -bool mnemonicMatch (char key) { - char mnemonic = findMnemonic (getText ()); +bool mnemonicMatch (wchar key) { + wchar mnemonic = findMnemonic (getText ()); if (mnemonic is '\0') return false; - return Character.toUpperCase (key) is Character.toUpperCase (mnemonic); + return CharacterToUpper (key) is CharacterToUpper (mnemonic); } void releaseWidget () { @@ -382,7 +375,7 @@ *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • * */ -public void setText (String string) { +public void setText (char[] string) { checkWidget (); if (string is null) error (DWT.ERROR_NULL_ARGUMENT); if ((style & DWT.SEPARATOR) !is 0) return; @@ -392,7 +385,7 @@ * has not changed. The fix is to check for this case and do * nothing. */ - if (string.equals (text)) return; + if (string==/*eq*/text) return; text = string; if (image is null || !IMAGE_AND_TEXT) { int oldBits = OS.GetWindowLong (handle, OS.GWL_STYLE), newBits = oldBits; @@ -409,7 +402,7 @@ if (oldBits !is newBits) OS.SetWindowLong (handle, OS.GWL_STYLE, newBits); } string = Display.withCrLf (string); - TCHAR buffer = new TCHAR (getCodePage (), string, true); + TCHAR* buffer = StrToTCHARz (/+getCodePage (),+/ string); OS.SetWindowText (handle, buffer); /* * Bug in Windows. For some reason, the HBRUSH that @@ -442,17 +435,17 @@ return bits | OS.SS_LEFTNOWORDWRAP; } -TCHAR windowClass () { - return LabelClass; +char[] windowClass () { + return TCHARsToStr( LabelClass ); } int windowProc () { - return LabelProc; + return cast(int) LabelProc; } LRESULT WM_ERASEBKGND (int wParam, int lParam) { LRESULT result = super.WM_ERASEBKGND (wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; int bits = OS.GetWindowLong (handle, OS.GWL_STYLE); if ((bits & OS.SS_OWNERDRAW) is OS.SS_OWNERDRAW) { return LRESULT.ONE; @@ -467,7 +460,7 @@ */ if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed ()) { if (findImageControl () !is null) { - drawBackground (wParam); + drawBackground (cast(HANDLE)wParam); return LRESULT.ONE; } } @@ -521,7 +514,7 @@ if (redraw) { OS.InvalidateRect (handle, null, false); int code = OS.DefWindowProc (handle, OS.WM_UPDATEUISTATE, wParam, lParam); - return new LRESULT (code); + return cast(LRESULT) (code); } return result; } @@ -540,8 +533,8 @@ int bits = OS.GetWindowLong (handle, OS.GWL_STYLE); if ((bits & OS.SS_OWNERDRAW) !is OS.SS_OWNERDRAW) { if (findImageControl () !is null) { - OS.SetBkMode (wParam, OS.TRANSPARENT); - return new LRESULT (OS.GetStockObject (OS.NULL_BRUSH)); + OS.SetBkMode ( cast(HANDLE) wParam, OS.TRANSPARENT); + return cast(LRESULT) (OS.GetStockObject (OS.NULL_BRUSH)); } } } @@ -553,28 +546,28 @@ bool drawImage = image !is null; bool drawSeparator = (style & DWT.SEPARATOR) !is 0 && (style & DWT.SHADOW_NONE) is 0; if (drawImage || drawSeparator) { - LRESULT result = null; - PAINTSTRUCT ps = new PAINTSTRUCT (); + LRESULT result = LRESULT.NULL; + PAINTSTRUCT ps; GCData data = new GCData (); - data.ps = ps; + data.ps = &ps; data.hwnd = handle; GC gc = new_GC (data); if (gc !is null) { drawBackground (gc.handle); - RECT clientRect = new RECT(); - OS.GetClientRect (handle, clientRect); + RECT clientRect; + OS.GetClientRect (handle, &clientRect); if (drawSeparator) { - RECT rect = new RECT (); + RECT rect; int lineWidth = OS.GetSystemMetrics (OS.SM_CXBORDER); int flags = (style & DWT.SHADOW_IN) !is 0 ? OS.EDGE_SUNKEN : OS.EDGE_ETCHED; if ((style & DWT.HORIZONTAL) !is 0) { int bottom = clientRect.top + Math.max (lineWidth * 2, (clientRect.bottom - clientRect.top) / 2); - OS.SetRect (rect, clientRect.left, clientRect.top, clientRect.right, bottom); - OS.DrawEdge (gc.handle, rect, flags, OS.BF_BOTTOM); + OS.SetRect (&rect, clientRect.left, clientRect.top, clientRect.right, bottom); + OS.DrawEdge (gc.handle, &rect, flags, OS.BF_BOTTOM); } else { int right = clientRect.left + Math.max (lineWidth * 2, (clientRect.right - clientRect.left) / 2); - OS.SetRect (rect, clientRect.left, clientRect.top, right, clientRect.bottom); - OS.DrawEdge (gc.handle, rect, flags, OS.BF_RIGHT); + OS.SetRect (&rect, clientRect.left, clientRect.top, right, clientRect.bottom); + OS.DrawEdge (gc.handle, &rect, flags, OS.BF_RIGHT); } result = LRESULT.ONE; } @@ -591,13 +584,13 @@ gc.drawImage (image, x, Math.max (0, (clientRect.bottom - imageBounds.height) / 2)); result = LRESULT.ONE; } - int width = ps.right - ps.left; - int height = ps.bottom - ps.top; + int width = ps.rcPaint.right - ps.rcPaint.left; + int height = ps.rcPaint.bottom - ps.rcPaint.top; if (width !is 0 && height !is 0) { Event event = new Event (); event.gc = gc; - event.x = ps.left; - event.y = ps.top; + event.x = ps.rcPaint.left; + event.y = ps.rcPaint.top; event.width = width; event.height = height; sendEvent (DWT.Paint, event); @@ -613,29 +606,28 @@ } LRESULT wmDrawChild (int wParam, int lParam) { - DRAWITEMSTRUCT struct = new DRAWITEMSTRUCT (); - OS.MoveMemory (struct, lParam, DRAWITEMSTRUCT.sizeof); - drawBackground (struct.hDC); + DRAWITEMSTRUCT* struct_ = cast(DRAWITEMSTRUCT*)lParam; + drawBackground (struct_.hDC); if ((style & DWT.SEPARATOR) !is 0) { - if ((style & DWT.SHADOW_NONE) !is 0) return null; - RECT rect = new RECT (); + if ((style & DWT.SHADOW_NONE) !is 0) return LRESULT.NULL; + RECT rect; int lineWidth = OS.GetSystemMetrics (OS.SM_CXBORDER); int flags = (style & DWT.SHADOW_IN) !is 0 ? OS.EDGE_SUNKEN : OS.EDGE_ETCHED; if ((style & DWT.HORIZONTAL) !is 0) { - int bottom = struct.top + Math.max (lineWidth * 2, (struct.bottom - struct.top) / 2); - OS.SetRect (rect, struct.left, struct.top, struct.right, bottom); - OS.DrawEdge (struct.hDC, rect, flags, OS.BF_BOTTOM); + int bottom = struct_.rcItem.top + Math.max (lineWidth * 2, (struct_.rcItem.bottom - struct_.rcItem.top) / 2); + OS.SetRect (&rect, struct_.rcItem.left, struct_.rcItem.top, struct_.rcItem.right, bottom); + OS.DrawEdge (struct_.hDC, &rect, flags, OS.BF_BOTTOM); } else { - int right = struct.left + Math.max (lineWidth * 2, (struct.right - struct.left) / 2); - OS.SetRect (rect, struct.left, struct.top, right, struct.bottom); - OS.DrawEdge (struct.hDC, rect, flags, OS.BF_RIGHT); + int right = struct_.rcItem.left + Math.max (lineWidth * 2, (struct_.rcItem.right - struct_.rcItem.left) / 2); + OS.SetRect (&rect, struct_.rcItem.left, struct_.rcItem.top, right, struct_.rcItem.bottom); + OS.DrawEdge (struct_.hDC, &rect, flags, OS.BF_RIGHT); } } else { - int width = struct.right - struct.left; - int height = struct.bottom - struct.top; + int width = struct_.rcItem.right - struct_.rcItem.left; + int height = struct_.rcItem.bottom - struct_.rcItem.top; if (width !is 0 && height !is 0) { bool drawImage = image !is null; - bool drawText = IMAGE_AND_TEXT && text.length () !is 0; + bool drawText = IMAGE_AND_TEXT && text.length !is 0; int margin = drawText && drawImage ? MARGIN : 0; int imageWidth = 0, imageHeight = 0; if (drawImage) { @@ -643,11 +635,11 @@ imageWidth = rect.width; imageHeight = rect.height; } - RECT rect = null; - TCHAR buffer = null; + RECT rect; + TCHAR* buffer = null; int textWidth = 0, textHeight = 0, flags = 0; if (drawText) { - rect = new RECT (); + //rect = new RECT (); flags = OS.DT_CALCRECT | OS.DT_EDITCONTROL | OS.DT_EXPANDTABS; if ((style & DWT.LEFT) !is 0) flags |= OS.DT_LEFT; if ((style & DWT.CENTER) !is 0) flags |= OS.DT_CENTER; @@ -656,8 +648,8 @@ flags |= OS.DT_WORDBREAK; rect.right = Math.max (0, width - imageWidth - margin); } - buffer = new TCHAR (getCodePage (), text, true); - OS.DrawText (struct.hDC, buffer, -1, rect, flags); + buffer = StrToTCHARz (/+getCodePage (),+/ text); + OS.DrawText (struct_.hDC, buffer, -1, &rect, flags); textWidth = rect.right - rect.left; textHeight = rect.bottom - rect.top; } @@ -672,7 +664,7 @@ if (drawImage) { GCData data = new GCData(); data.device = display; - GC gc = GC.win32_new (struct.hDC, data); + GC gc = GC.win32_new (struct_.hDC, data); Image image = getEnabled () ? this.image : new Image (display, this.image, DWT.IMAGE_DISABLE); gc.drawImage (image, x, Math.max (0, (height - imageHeight) / 2)); if (image !is this.image) image.dispose (); @@ -685,12 +677,12 @@ rect.right += rect.left; rect.top = Math.max (0, (height - textHeight) / 2); rect.bottom += rect.top; - OS.DrawText (struct.hDC, buffer, -1, rect, flags); + OS.DrawText (struct_.hDC, buffer, -1, &rect, flags); } } } - return null; + return LRESULT.NULL; } } -++/ +