Mercurial > projects > dwt-win
changeset 47:6940f8be58ba
ExpandBar
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 03 Feb 2008 00:59:28 +0100 |
parents | e28b4e239c0a |
children | 9a64a7781bab |
files | doc/Common.txt dwt/internal/win32/OS.d dwt/widgets/ExpandBar.d dwt/widgets/ExpandItem.d |
diffstat | 4 files changed, 112 insertions(+), 106 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/Common.txt Sat Feb 02 19:56:40 2008 +0100 +++ b/doc/Common.txt Sun Feb 03 00:59:28 2008 +0100 @@ -1,4 +1,4 @@ -Dwt-win shares some modules with the Dwt-linux port. For now, the revision and changeset of the dwt-linux port will be listed here for future reference, in case there are updates to the linux port. +Dwt-win shares some modules with the Dwt-linux port. For now, the revision and changeset of the dwt-linux port will be listed here for future reference, in case there are updates to the linux port. This is the revision that the Dwt-win modules are based on: @@ -19,4 +19,14 @@ dwt/internal/Lock.d dwt/internal/SerializableCompatibility.d +- Verify getCodePage accesses +- OS.CallWindowProc was removed in various places. It turned out, they are need. So revert those changeset +- OS.MoveMemory, use it and make the ported code more like the original +Left out widgets: + DateTime + DirectoryDialog + + + +
--- a/dwt/internal/win32/OS.d Sat Feb 02 19:56:40 2008 +0100 +++ b/dwt/internal/win32/OS.d Sun Feb 03 00:59:28 2008 +0100 @@ -868,7 +868,7 @@ public static const int IDC_APPSTARTING = 0x7f8a; public static const int IDC_ARROW = 0x7f00; public static const int IDC_CROSS = 0x7f03; - public static const int IDC_HAND = 0x7f89; + public static const TCHAR* IDC_HAND = cast(TCHAR*) 0x7f89; public static const int IDC_HELP = 0x7f8b; public static const int IDC_IBEAM = 0x7f01; public static const int IDC_NO = 0x7f88;
--- a/dwt/widgets/ExpandBar.d Sat Feb 02 19:56:40 2008 +0100 +++ b/dwt/widgets/ExpandBar.d Sun Feb 03 00:59:28 2008 +0100 @@ -12,10 +12,7 @@ *******************************************************************************/ module dwt.widgets.ExpandBar; -import dwt.widgets.Composite; -class ExpandBar : Composite { -} -/++ + import dwt.DWT; import dwt.DWTException; import dwt.events.ExpandAdapter; @@ -26,19 +23,18 @@ import dwt.graphics.GCData; import dwt.graphics.Point; import dwt.graphics.Rectangle; -import dwt.internal.win32.LOGFONT; -import dwt.internal.win32.LRESULT; -import dwt.internal.win32.NONCLIENTMETRICS; -import dwt.internal.win32.NONCLIENTMETRICSA; -import dwt.internal.win32.NONCLIENTMETRICSW; +import dwt.graphics.Drawable; import dwt.internal.win32.OS; -import dwt.internal.win32.PAINTSTRUCT; -import dwt.internal.win32.RECT; -import dwt.internal.win32.SCROLLINFO; -import dwt.internal.win32.TCHAR; -import dwt.internal.win32.TEXTMETRIC; -import dwt.internal.win32.TEXTMETRICA; -import dwt.internal.win32.TEXTMETRICW; + +import dwt.widgets.Composite; +import dwt.widgets.Control; +import dwt.widgets.ExpandItem; +import dwt.widgets.ScrollBar; +import dwt.widgets.ExpandItem; +import dwt.widgets.TypedListener; +import dwt.widgets.Event; + +import dwt.dwthelper.utils; /** * Instances of this class support the layout of selectable @@ -64,13 +60,13 @@ * * @since 3.2 */ -public class ExpandBar extends Composite { +public class ExpandBar : Composite { ExpandItem[] items; int itemCount; ExpandItem focusItem; int spacing = 4; int yCurrentScroll; - int hFont; + HFONT hFont; /** @@ -100,7 +96,7 @@ * @see Widget#checkSubclass * @see Widget#getStyle */ -public ExpandBar (Composite parent, int style) { +public this (Composite parent, int style) { super (parent, checkStyle (style)); } @@ -131,9 +127,9 @@ addListener (DWT.Collapse, typedListener); } -int callWindowProc (int hwnd, int msg, int wParam, int lParam) { - if (handle is 0) return 0; - return OS.DefWindowProc (hwnd, msg, wParam, lParam); +LRESULT callWindowProc (HWND hwnd, int msg, int wParam, int lParam) { + if (handle is null) return LRESULT.ZERO; + return cast(LRESULT) OS.DefWindowProc (hwnd, msg, wParam, lParam); } protected void checkSubclass () { @@ -150,26 +146,26 @@ int height = 0, width = 0; if (wHint is DWT.DEFAULT || hHint is DWT.DEFAULT) { if (itemCount > 0) { - int hDC = OS.GetDC (handle); - int hTheme = 0; + auto hDC = OS.GetDC (handle); + HTHEME hTheme; if (isAppThemed ()) { hTheme = display.hExplorerBarTheme (); } - int hCurrentFont = 0, oldFont = 0; - if (hTheme is 0) { - if (hFont !is 0) { + HFONT hCurrentFont, oldFont; + if (hTheme is null) { + if (hFont !is null) { hCurrentFont = hFont; } else { if (!OS.IsWinCE) { - NONCLIENTMETRICS info = OS.IsUnicode ? (NONCLIENTMETRICS) new NONCLIENTMETRICSW () : new NONCLIENTMETRICSA (); + NONCLIENTMETRICS info; info.cbSize = NONCLIENTMETRICS.sizeof; - if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, info, 0)) { - LOGFONT logFont = OS.IsUnicode ? (LOGFONT) ((NONCLIENTMETRICSW)info).lfCaptionFont : ((NONCLIENTMETRICSA)info).lfCaptionFont; + if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, &info, 0)) { + LOGFONT* logFont = &info.lfCaptionFont; hCurrentFont = OS.CreateFontIndirect (logFont); } } } - if (hCurrentFont !is 0) { + if (hCurrentFont !is null) { oldFont = OS.SelectObject (hDC, hCurrentFont); } } @@ -181,7 +177,7 @@ height += spacing; width = Math.max (width, item.getPreferredWidth (hTheme, hDC)); } - if (hCurrentFont !is 0) { + if (hCurrentFont !is null) { OS.SelectObject (hDC, oldFont); if (hCurrentFont !is hFont) OS.DeleteObject (hCurrentFont); } @@ -214,8 +210,8 @@ itemCount++; if (focusItem is null) focusItem = item; - RECT rect = new RECT (); - OS.GetWindowRect (handle, rect); + RECT rect; + OS.GetWindowRect (handle, &rect); item.width = Math.max (0, rect.right - rect.left - spacing * 2); layoutItems (index, true); } @@ -257,22 +253,22 @@ layoutItems (index, true); } -void drawThemeBackground (int hDC, int hwnd, RECT rect) { - RECT rect2 = new RECT (); - OS.GetClientRect (handle, rect2); - OS.MapWindowPoints (handle, hwnd, rect2, 2); - OS.DrawThemeBackground (display.hExplorerBarTheme (), hDC, OS.EBP_NORMALGROUPBACKGROUND, 0, rect2, null); +void drawThemeBackground (HDC hDC, HWND hwnd, RECT* rect) { + RECT rect2; + OS.GetClientRect (handle, &rect2); + OS.MapWindowPoints (handle, hwnd, cast(POINT*) &rect2, 2); + OS.DrawThemeBackground (display.hExplorerBarTheme (), hDC, OS.EBP_NORMALGROUPBACKGROUND, 0, &rect2, null); } -void drawWidget (GC gc, RECT clipRect) { - int hTheme = 0; +void drawWidget (GC gc, RECT* clipRect) { + HTHEME hTheme; if (isAppThemed ()) { hTheme = display.hExplorerBarTheme (); } - if (hTheme !is 0) { - RECT rect = new RECT (); - OS.GetClientRect (handle, rect); - OS.DrawThemeBackground (hTheme, gc.handle, OS.EBP_HEADERBACKGROUND, 0, rect, clipRect); + if (hTheme !is null) { + RECT rect; + OS.GetClientRect (handle, &rect); + OS.DrawThemeBackground (hTheme, gc.handle, OS.EBP_HEADERBACKGROUND, 0, &rect, clipRect); } else { drawBackground (gc.handle); } @@ -281,13 +277,13 @@ int uiState = OS.SendMessage (handle, OS.WM_QUERYUISTATE, 0, 0); drawFocus = (uiState & OS.UISF_HIDEFOCUS) is 0; } - int hCaptionFont = 0, oldFont = 0; - if (hTheme is 0) { - if (!OS.IsWinCE && hFont is 0) { - NONCLIENTMETRICS info = OS.IsUnicode ? (NONCLIENTMETRICS) new NONCLIENTMETRICSW () : new NONCLIENTMETRICSA (); + HFONT hCaptionFont, oldFont; + if (hTheme is null) { + if (!OS.IsWinCE && hFont is null) { + NONCLIENTMETRICS info; info.cbSize = NONCLIENTMETRICS.sizeof; - if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, info, 0)) { - LOGFONT logFont = OS.IsUnicode ? (LOGFONT) ((NONCLIENTMETRICSW)info).lfCaptionFont : ((NONCLIENTMETRICSA)info).lfCaptionFont; + if (OS.SystemParametersInfo (OS.SPI_GETNONCLIENTMETRICS, 0, &info, 0)) { + LOGFONT* logFont = &info.lfCaptionFont; hCaptionFont = OS.CreateFontIndirect (logFont); oldFont = OS.SelectObject (gc.handle, hCaptionFont); } @@ -297,7 +293,7 @@ ExpandItem item = items[i]; item.drawItem (gc, hTheme, clipRect, item is focusItem && drawFocus); } - if (hCaptionFont !is 0) { + if (hCaptionFont !is null) { OS.SelectObject (gc.handle, oldFont); OS.DeleteObject (hCaptionFont); } @@ -316,11 +312,11 @@ } int getBandHeight () { - if (hFont is 0) return ExpandItem.CHEVRON_SIZE; - int hDC = OS.GetDC (handle); - int oldHFont = OS.SelectObject (hDC, hFont); - TEXTMETRIC lptm = OS.IsUnicode ? (TEXTMETRIC)new TEXTMETRICW() : new TEXTMETRICA(); - OS.GetTextMetrics (hDC, lptm); + if (hFont is null) return ExpandItem.CHEVRON_SIZE; + auto hDC = OS.GetDC (handle); + auto oldHFont = OS.SelectObject (hDC, hFont); + TEXTMETRIC lptm; + OS.GetTextMetrics (hDC, &lptm); OS.SelectObject (hDC, oldHFont); OS.ReleaseDC (handle, hDC); return Math.max (ExpandItem.CHEVRON_SIZE, lptm.tmHeight + 4); @@ -430,11 +426,11 @@ bool isAppThemed () { if (background !is -1) return false; if (foreground !is -1) return false; - if (hFont !is 0) return false; + if (hFont !is null) return false; return OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed (); } -void layoutItems (int index, bool setScrollbar) { +void layoutItems (int index, bool setScrollbar_) { if (index < itemCount) { int y = spacing - yCurrentScroll; for (int i = 0; i < index; i++) { @@ -449,7 +445,7 @@ y += item.getHeaderHeight () + spacing; } } - if (setScrollbar) setScrollbar (); + if (setScrollbar_) setScrollbar (); } void releaseChildren (bool destroy) { @@ -495,13 +491,13 @@ super.setBackgroundPixel (pixel); if (!OS.IsWinCE) { int flags = OS.RDW_ERASE | OS.RDW_FRAME | OS.RDW_INVALIDATE | OS.RDW_ALLCHILDREN; - OS.RedrawWindow (handle, null, 0, flags); + OS.RedrawWindow (handle, null, null, flags); } } public void setFont (Font font) { super.setFont (font); - hFont = font !is null ? font.handle : 0; + hFont = font !is null ? font.handle : null; layoutItems (0, true); } @@ -509,15 +505,15 @@ super.setForegroundPixel (pixel); if (!OS.IsWinCE) { int flags = OS.RDW_ERASE | OS.RDW_FRAME | OS.RDW_INVALIDATE | OS.RDW_ALLCHILDREN; - OS.RedrawWindow (handle, null, 0, flags); + OS.RedrawWindow (handle, null, null, flags); } } void setScrollbar () { if (itemCount is 0) return; if ((style & DWT.V_SCROLL) is 0) return; - RECT rect = new RECT(); - OS.GetClientRect (handle, rect); + RECT rect; + OS.GetClientRect (handle, &rect); int height = rect.bottom - rect.top; ExpandItem item = items [itemCount - 1]; int maxHeight = item.y + getBandHeight () + spacing; @@ -530,7 +526,7 @@ } maxHeight += yCurrentScroll; - SCROLLINFO info = new SCROLLINFO (); + SCROLLINFO info; info.cbSize = SCROLLINFO.sizeof; info.fMask = OS.SIF_RANGE | OS.SIF_PAGE | OS.SIF_POS; info.nMin = 0; @@ -538,7 +534,7 @@ info.nPage = height; info.nPos = Math.min (yCurrentScroll, info.nMax); if (info.nPage !is 0) info.nPage++; - OS.SetScrollInfo (handle, OS.SB_VERT, info, true); + OS.SetScrollInfo (handle, OS.SB_VERT, &info, true); } /** @@ -555,8 +551,8 @@ if (spacing < 0) return; if (spacing is this.spacing) return; this.spacing = spacing; - RECT rect = new RECT (); - OS.GetClientRect (handle, rect); + RECT rect; + OS.GetClientRect (handle, &rect); int width = Math.max (0, (rect.right - rect.left) - spacing * 2); for (int i = 0; i < itemCount; i++) { ExpandItem item = items[i]; @@ -576,17 +572,17 @@ layoutItems (index + 1, true); } -TCHAR windowClass () { - return display.windowClass; +char[] windowClass () { + return display.windowClass(); } int windowProc () { - return display.windowProc; + return cast(int) display.windowProc; } LRESULT WM_KEYDOWN (int wParam, int lParam) { LRESULT result = super.WM_KEYDOWN (wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; if (focusItem is null) return result; switch (wParam) { case OS.VK_SPACE: @@ -630,8 +626,8 @@ LRESULT WM_LBUTTONDOWN (int wParam, int lParam) { LRESULT result = super.WM_LBUTTONDOWN (wParam, lParam); if (result is LRESULT.ZERO) return result; - int x = (short) (lParam & 0xFFFF); - int y = (short) (lParam >> 16); + int x = cast(short) (lParam & 0xFFFF); + int y = cast(short) (lParam >> 16); for (int i = 0; i < itemCount; i++) { ExpandItem item = items[i]; bool hover = item.isHover (x, y); @@ -650,8 +646,8 @@ LRESULT result = super.WM_LBUTTONUP (wParam, lParam); if (result is LRESULT.ZERO) return result; if (focusItem is null) return result; - int x = (short) (lParam & 0xFFFF); - int y = (short) (lParam >> 16); + int x = cast(short) (lParam & 0xFFFF); + int y = cast(short) (lParam >> 16); bool hover = focusItem.isHover (x, y); if (hover) { Event event = new Event (); @@ -665,7 +661,7 @@ LRESULT WM_MOUSELEAVE (int wParam, int lParam) { LRESULT result = super.WM_MOUSELEAVE (wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; for (int i = 0; i < itemCount; i++) { ExpandItem item = items [i]; if (item.hover) { @@ -680,8 +676,8 @@ LRESULT WM_MOUSEMOVE (int wParam, int lParam) { LRESULT result = super.WM_MOUSEMOVE (wParam, lParam); if (result is LRESULT.ZERO) return result; - int x = (short) (lParam & 0xFFFF); - int y = (short) (lParam >> 16); + int x = cast(short) (lParam & 0xFFFF); + int y = cast(short) (lParam >> 16); for (int i = 0; i < itemCount; i++) { ExpandItem item = items [i]; bool hover = item.isHover (x, y); @@ -694,18 +690,18 @@ } LRESULT WM_PAINT (int wParam, int lParam) { - PAINTSTRUCT ps = new PAINTSTRUCT (); + PAINTSTRUCT ps; GCData data = new GCData (); - data.ps = ps; + data.ps = &ps; data.hwnd = handle; GC gc = new_GC (data); if (gc !is null) { - 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) { - RECT rect = new RECT (); - OS.SetRect (rect, ps.left, ps.top, ps.right, ps.bottom); - drawWidget (gc, rect); + RECT rect; + OS.SetRect (&rect, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom); + drawWidget (gc, &rect); if (hooks (DWT.Paint) || filters (DWT.Paint)) { Event event = new Event (); event.gc = gc; @@ -724,26 +720,26 @@ LRESULT WM_PRINTCLIENT (int wParam, int lParam) { LRESULT result = super.WM_PRINTCLIENT (wParam, lParam); - RECT rect = new RECT (); - OS.GetClientRect (handle, rect); + RECT rect; + OS.GetClientRect (handle, &rect); GCData data = new GCData (); data.device = display; data.foreground = getForegroundPixel (); - GC gc = GC.win32_new (wParam, data); - drawWidget (gc, rect); + GC gc = GC.win32_new ( cast(Drawable)cast(void*)wParam, data); + drawWidget (gc, &rect); gc.dispose (); return result; } LRESULT WM_SETCURSOR (int wParam, int lParam) { LRESULT result = super.WM_SETCURSOR (wParam, lParam); - if (result !is null) return result; + if (result !is LRESULT.NULL) return result; int hitTest = lParam & 0xFFFF; if (hitTest is OS.HTCLIENT) { for (int i = 0; i < itemCount; i++) { ExpandItem item = items [i]; if (item.hover) { - int hCursor = OS.LoadCursor (0, OS.IDC_HAND); + auto hCursor = OS.LoadCursor (null, OS.IDC_HAND); OS.SetCursor (hCursor); return LRESULT.ONE; } @@ -760,8 +756,8 @@ LRESULT WM_SIZE (int wParam, int lParam) { LRESULT result = super.WM_SIZE (wParam, lParam); - RECT rect = new RECT (); - OS.GetClientRect (handle, rect); + RECT rect; + OS.GetClientRect (handle, &rect); int width = Math.max (0, (rect.right - rect.left) - spacing * 2); for (int i = 0; i < itemCount; i++) { ExpandItem item = items[i]; @@ -772,14 +768,14 @@ return result; } -LRESULT wmScroll (ScrollBar bar, bool update, int hwnd, int msg, int wParam, int lParam) { +LRESULT wmScroll (ScrollBar bar, bool update, HWND hwnd, int msg, int wParam, int lParam) { LRESULT result = super.wmScroll (bar, true, hwnd, msg, wParam, lParam); - SCROLLINFO info = new SCROLLINFO (); + SCROLLINFO info; info.cbSize = SCROLLINFO.sizeof; info.fMask = OS.SIF_POS; - OS.GetScrollInfo (handle, OS.SB_VERT, info); + OS.GetScrollInfo (handle, OS.SB_VERT, &info); int updateY = yCurrentScroll - info.nPos; - OS.ScrollWindowEx (handle, 0, updateY, null, null, 0, null, OS.SW_SCROLLCHILDREN | OS.SW_INVALIDATE); + OS.ScrollWindowEx (handle, 0, updateY, null, null, null, null, OS.SW_SCROLLCHILDREN | OS.SW_INVALIDATE); yCurrentScroll = info.nPos; if (updateY !is 0) { for (int i = 0; i < itemCount; i++) { @@ -789,4 +785,4 @@ return result; } } -++/ +
--- a/dwt/widgets/ExpandItem.d Sat Feb 02 19:56:40 2008 +0100 +++ b/dwt/widgets/ExpandItem.d Sun Feb 03 00:59:28 2008 +0100 @@ -31,7 +31,7 @@ override void releaseHandle(); bool getExpanded(); void setControl(Control); - void drawItem(GC, int, RECT, bool); + void drawItem(GC, HTHEME, RECT*, bool); bool isHover(int, int); void setExpanded(bool); ExpandBar getParent(); @@ -41,7 +41,7 @@ Control getControl(); void setHeight(int); override void setImage(Image); - int getPreferredWidth(int, int); + int getPreferredWidth(HTHEME, HDC); int getHeaderHeight(); ExpandBar parent; Control control; @@ -226,7 +226,7 @@ OS.DeleteObject (hPen); } -void drawItem (GC gc, int hTheme, RECT clipRect, bool drawFocus) { +void drawItem (GC gc, HTHEME hTheme, RECT* clipRect, bool drawFocus) { int hDC = gc.handle; int headerHeight = parent.getBandHeight (); RECT rect = new RECT (); @@ -371,7 +371,7 @@ return parent; } -int getPreferredWidth (int hTheme, int hDC) { +int getPreferredWidth (HTHEME hTheme, HDC hDC) { int width = ExpandItem.TEXT_INSET * 2 + ExpandItem.CHEVRON_SIZE; if (image !is null) { width += ExpandItem.TEXT_INSET + imageWidth;