Mercurial > projects > dwt-win
diff dwt/widgets/TableColumn.d @ 67:3f4e6a4ecc09
Table, TableItem, TableColumn
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 04 Feb 2008 20:01:30 +0100 |
parents | 0f25be5cbe6f |
children | 42fc35b18200 |
line wrap: on
line diff
--- a/dwt/widgets/TableColumn.d Mon Feb 04 16:26:54 2008 +0100 +++ b/dwt/widgets/TableColumn.d Mon Feb 04 20:01:30 2008 +0100 @@ -10,15 +10,6 @@ *******************************************************************************/ module dwt.widgets.TableColumn; -import dwt.widgets.Item; -import dwt.widgets.Widget; -class TableColumn : Item { - public this (Widget parent, int style) { - super (parent, style); - } -} - -/++ import dwt.DWT; import dwt.DWTException; @@ -27,12 +18,16 @@ import dwt.events.SelectionListener; import dwt.graphics.Image; import dwt.graphics.Rectangle; -import dwt.internal.win32.HDITEM; -import dwt.internal.win32.LVCOLUMN; import dwt.internal.win32.OS; -import dwt.internal.win32.RECT; -import dwt.internal.win32.TCHAR; -import dwt.internal.win32.TOOLINFO; + +import dwt.widgets.Item; +import dwt.widgets.Widget; +import dwt.widgets.Table; +import dwt.widgets.TypedListener; +import dwt.widgets.TableItem; +import dwt.widgets.Event; + +import dwt.dwthelper.utils; /** * Instances of this class represent a column in a table widget. @@ -48,10 +43,10 @@ * IMPORTANT: This class is <em>not</em> intended to be subclassed. * </p> */ -public class TableColumn extends Item { +public class TableColumn : Item { Table parent; bool resizable, moveable; - String toolTipText; + char[] toolTipText; int id; /** @@ -86,7 +81,7 @@ * @see Widget#checkSubclass * @see Widget#getStyle */ -public TableColumn (Table parent, int style) { +public this (Table parent, int style) { super (parent, checkStyle (style)); resizable = true; this.parent = parent; @@ -127,7 +122,7 @@ * @see Widget#checkSubclass * @see Widget#getStyle */ -public TableColumn (Table parent, int style, int index) { +public this (Table parent, int style, int index) { super (parent, checkStyle (style)); resizable = true; this.parent = parent; @@ -226,7 +221,7 @@ return DWT.LEFT; } -override String getNameText () { +override char[] getNameText () { return getText (); } @@ -300,7 +295,7 @@ * * @since 3.2 */ -public String getToolTipText () { +public char[] getToolTipText () { checkWidget(); return toolTipText; } @@ -319,7 +314,7 @@ checkWidget (); int index = parent.indexOf (this); if (index is -1) return 0; - int hwnd = parent.handle; + auto hwnd = parent.handle; return OS.SendMessage (hwnd, OS.LVM_GETCOLUMNWIDTH, index, 0); } @@ -338,9 +333,9 @@ checkWidget (); int index = parent.indexOf (this); if (index is -1) return; - int hwnd = parent.handle; + auto hwnd = parent.handle; int oldWidth = OS.SendMessage (hwnd, OS.LVM_GETCOLUMNWIDTH, index, 0); - TCHAR buffer = new TCHAR (parent.getCodePage (), text, true); + TCHAR* buffer = StrToTCHARz (parent.getCodePage (), text); int headerWidth = OS.SendMessage (hwnd, OS.LVM_GETSTRINGWIDTH, 0, buffer) + Table.HEADER_MARGIN; if (OS.COMCTL32_MAJOR >= 6 && OS.IsAppThemed ()) headerWidth += Table.HEADER_EXTRA; bool hasHeaderImage = false; @@ -362,7 +357,7 @@ } int margin = 0; if (OS.COMCTL32_VERSION >= OS.VERSION (5, 80)) { - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); margin = OS.SendMessage (hwndHeader, OS.HDM_GETBITMAPMARGIN, 0, 0); } else { margin = OS.GetSystemMetrics (OS.SM_CXEDGE) * 3; @@ -379,27 +374,27 @@ * each items ourselves rather than letting Windows do it. */ if ((index is 0 && !parent.firstColumnImage) || parent.hooks (DWT.MeasureItem)) { - RECT headerRect = new RECT (); - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); - OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, headerRect); - OS.MapWindowPoints (hwndHeader, hwnd, headerRect, 2); - int hDC = OS.GetDC (hwnd); - int oldFont = 0, newFont = OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0); - if (newFont !is 0) oldFont = OS.SelectObject (hDC, newFont); + RECT headerRect; + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, &headerRect); + OS.MapWindowPoints (hwndHeader, hwnd, cast(POINT*) &headerRect, 2); + auto hDC = OS.GetDC (hwnd); + HFONT oldFont, newFont = cast(HFONT) OS.SendMessage (hwnd, OS.WM_GETFONT, 0, 0); + if (newFont !is null) oldFont = OS.SelectObject (hDC, newFont); int count = OS.SendMessage (hwnd, OS.LVM_GETITEMCOUNT, 0, 0); for (int i=0; i<count; i++) { TableItem item = parent.items [i]; if (item !is null) { - int hFont = item.cellFont !is null ? item.cellFont [index] : -1; - if (hFont is -1) hFont = item.font; - if (hFont !is -1) hFont = OS.SelectObject (hDC, hFont); + auto hFont = item.cellFont !is null ? item.cellFont [index] : cast(HFONT)-1; + if (hFont is cast(HFONT)-1) hFont = item.font; + if (hFont !is cast(HFONT)-1) hFont = OS.SelectObject (hDC, hFont); Event event = parent.sendMeasureItemEvent (item, i, index, hDC); - if (hFont !is -1) hFont = OS.SelectObject (hDC, hFont); + if (hFont !is cast(HFONT)-1) hFont = OS.SelectObject (hDC, hFont); if (isDisposed () || parent.isDisposed ()) break; columnWidth = Math.max (columnWidth, event.x + event.width - headerRect.left); } } - if (newFont !is 0) OS.SelectObject (hDC, oldFont); + if (newFont !is null) OS.SelectObject (hDC, oldFont); OS.ReleaseDC (hwnd, hDC); OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, columnWidth); } else { @@ -421,11 +416,11 @@ * width by the width of the image list. */ if ((parent.style & DWT.CHECK) !is 0) { - int hStateList = OS.SendMessage (hwnd, OS.LVM_GETIMAGELIST, OS.LVSIL_STATE, 0); - if (hStateList !is 0) { - int [] cx = new int [1], cy = new int [1]; - OS.ImageList_GetIconSize (hStateList, cx, cy); - columnWidth += cx [0]; + auto hStateList = cast(HANDLE) OS.SendMessage (hwnd, OS.LVM_GETIMAGELIST, OS.LVSIL_STATE, 0); + if (hStateList !is null) { + int cx, cy; + OS.ImageList_GetIconSize (hStateList, &cx, &cy); + columnWidth += cx; } } } @@ -439,19 +434,19 @@ * resize the table to be small, set the column width and then * restore the table to its original size. */ - RECT rect = null; + RECT rect; bool fixWidth = index is parent.getColumnCount () - 1; if (fixWidth) { - rect = new RECT (); - OS.GetWindowRect (hwnd, rect); + //rect = new RECT (); + OS.GetWindowRect (hwnd, &rect); OS.UpdateWindow (hwnd); int flags = OS.SWP_NOACTIVATE | OS.SWP_NOMOVE | OS.SWP_NOREDRAW | OS.SWP_NOZORDER; - SetWindowPos (hwnd, 0, 0, 0, 0, rect.bottom - rect.top, flags); + SetWindowPos (hwnd, null, 0, 0, 0, rect.bottom - rect.top, flags); } OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, OS.LVSCW_AUTOSIZE_USEHEADER); if (fixWidth) { int flags = OS.SWP_NOACTIVATE | OS.SWP_NOMOVE | OS.SWP_NOZORDER; - SetWindowPos (hwnd, 0, 0, 0, rect.right - rect.left, rect.bottom - rect.top, flags); + SetWindowPos (hwnd, null, 0, 0, rect.right - rect.left, rect.bottom - rect.top, flags); } } else { OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, headerWidth); @@ -562,17 +557,17 @@ if (index is -1 || index is 0) return; style &= ~(DWT.LEFT | DWT.RIGHT | DWT.CENTER); style |= alignment & (DWT.LEFT | DWT.RIGHT | DWT.CENTER); - int hwnd = parent.handle; - LVCOLUMN lvColumn = new LVCOLUMN (); + auto hwnd = parent.handle; + LVCOLUMN lvColumn; lvColumn.mask = OS.LVCF_FMT | OS.LVCF_IMAGE; - OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); + OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, &lvColumn); lvColumn.fmt &= ~OS.LVCFMT_JUSTIFYMASK; int fmt = 0; if ((style & DWT.LEFT) is DWT.LEFT) fmt = OS.LVCFMT_LEFT; if ((style & DWT.CENTER) is DWT.CENTER) fmt = OS.LVCFMT_CENTER; if ((style & DWT.RIGHT) is DWT.RIGHT) fmt = OS.LVCFMT_RIGHT; lvColumn.fmt |= fmt; - OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn); + OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, &lvColumn); /* * Bug in Windows. When LVM_SETCOLUMN is used to change * the alignment of a column, the column is not redrawn @@ -581,14 +576,14 @@ */ if (index !is 0) { parent.forceResize (); - RECT rect = new RECT (), headerRect = new RECT (); - OS.GetClientRect (hwnd, rect); - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); - OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, headerRect); - OS.MapWindowPoints (hwndHeader, hwnd, headerRect, 2); + RECT rect, headerRect; + OS.GetClientRect (hwnd, &rect); + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, &headerRect); + OS.MapWindowPoints (hwndHeader, hwnd, cast(POINT*) &headerRect, 2); rect.left = headerRect.left; rect.right = headerRect.right; - OS.InvalidateRect (hwnd, rect, true); + OS.InvalidateRect (hwnd, &rect, true); } } @@ -606,12 +601,12 @@ void setImage (Image image, bool sort, bool right) { int index = parent.indexOf (this); if (index is -1) return; - int hwnd = parent.handle; + auto hwnd = parent.handle; if (OS.COMCTL32_MAJOR < 6) { - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); - HDITEM hdItem = new HDITEM (); + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + HDITEM hdItem; hdItem.mask = OS.HDI_FORMAT | OS.HDI_IMAGE | OS.HDI_BITMAP; - OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, hdItem); + OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, cast(int) &hdItem); hdItem.fmt &= ~OS.HDF_BITMAP_ON_RIGHT; if (image !is null) { if (sort) { @@ -629,11 +624,11 @@ } else { hdItem.fmt &= ~(OS.HDF_IMAGE | OS.HDF_BITMAP); } - OS.SendMessage (hwndHeader, OS.HDM_SETITEM, index, hdItem); + OS.SendMessage (hwndHeader, OS.HDM_SETITEM, index, cast(int) &hdItem); } else { - LVCOLUMN lvColumn = new LVCOLUMN (); + LVCOLUMN lvColumn; lvColumn.mask = OS.LVCF_FMT | OS.LVCF_IMAGE; - OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); + OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, &lvColumn); if (image !is null) { lvColumn.fmt |= OS.LVCFMT_IMAGE; lvColumn.iImage = parent.imageIndexHeader (image); @@ -642,7 +637,7 @@ lvColumn.mask &= ~OS.LVCF_IMAGE; lvColumn.fmt &= ~(OS.LVCFMT_IMAGE | OS.LVCFMT_BITMAP_ON_RIGHT); } - OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn); + OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, &lvColumn); } } @@ -696,11 +691,11 @@ if (OS.COMCTL32_MAJOR >= 6) { int index = parent.indexOf (this); if (index is -1) return; - int hwnd = parent.handle; - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); - HDITEM hdItem = new HDITEM (); + auto hwnd = parent.handle; + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + HDITEM hdItem; hdItem.mask = OS.HDI_FORMAT | OS.HDI_IMAGE; - OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, hdItem); + OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, &hdItem); switch (direction) { case DWT.UP: hdItem.fmt &= ~(OS.HDF_IMAGE | OS.HDF_SORTDOWN); @@ -721,7 +716,7 @@ } break; } - OS.SendMessage (hwndHeader, OS.HDM_SETITEM, index, hdItem); + OS.SendMessage (hwndHeader, OS.HDM_SETITEM, index, &hdItem); /* * Bug in Windows. When LVM_SETSELECTEDCOLUMN is used to * specify a selected column, Windows does not redraw either @@ -736,28 +731,28 @@ * selected column. */ parent.forceResize (); - RECT rect = new RECT (); - OS.GetClientRect (hwnd, rect); + RECT rect; + OS.GetClientRect (hwnd, &rect); if (OS.SendMessage (hwnd, OS.LVM_GETBKCOLOR, 0, 0) !is OS.CLR_NONE) { int oldColumn = OS.SendMessage (hwnd, OS.LVM_GETSELECTEDCOLUMN, 0, 0); int newColumn = direction is DWT.NONE ? -1 : index; OS.SendMessage (hwnd, OS.LVM_SETSELECTEDCOLUMN, newColumn, 0); - RECT headerRect = new RECT (); + RECT headerRect; if (oldColumn !is -1) { - if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, oldColumn, headerRect) !is 0) { - OS.MapWindowPoints (hwndHeader, hwnd, headerRect, 2); + if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, oldColumn, &headerRect) !is 0) { + OS.MapWindowPoints (hwndHeader, hwnd, cast(POINT*) &headerRect, 2); rect.left = headerRect.left; rect.right = headerRect.right; - OS.InvalidateRect (hwnd, rect, true); + OS.InvalidateRect (hwnd, &rect, true); } } } - RECT headerRect = new RECT (); - if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, headerRect) !is 0) { - OS.MapWindowPoints (hwndHeader, hwnd, headerRect, 2); + RECT headerRect; + if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, &headerRect) !is 0) { + OS.MapWindowPoints (hwndHeader, hwnd, cast(POINT*) &headerRect, 2); rect.left = headerRect.left; rect.right = headerRect.right; - OS.InvalidateRect (hwnd, rect, true); + OS.InvalidateRect (hwnd, &rect, true); } } else { switch (direction) { @@ -772,10 +767,10 @@ } } -override public void setText (String string) { +override public void setText (char[] string) { checkWidget (); if (string is null) error (DWT.ERROR_NULL_ARGUMENT); - if (string.equals (text)) return; + if (string==/*eq*/text) return; int index = parent.indexOf (this); if (index is -1) return; super.setText (string); @@ -787,10 +782,10 @@ * text does not draw. The fix is to query and then * set the alignment. */ - int hwnd = parent.handle; - LVCOLUMN lvColumn = new LVCOLUMN (); + auto hwnd = parent.handle; + LVCOLUMN lvColumn; lvColumn.mask = OS.LVCF_FMT; - OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, lvColumn); + OS.SendMessage (hwnd, OS.LVM_GETCOLUMN, index, cast(int) &lvColumn); /* * Bug in Windows. When a column header contains a @@ -800,15 +795,15 @@ * mnemonic characters and replace doubled mnemonics * with spaces. */ - int hHeap = OS.GetProcessHeap (); - TCHAR buffer = new TCHAR (parent.getCodePage (), fixMnemonic (string), true); - int byteCount = buffer.length () * TCHAR.sizeof; - int pszText = OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); - OS.MoveMemory (pszText, buffer, byteCount); + auto hHeap = OS.GetProcessHeap (); + TCHAR[] buffer = StrToTCHARs (parent.getCodePage (), fixMnemonic (string), true); + int byteCount = buffer.length * TCHAR.sizeof; + auto pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, OS.HEAP_ZERO_MEMORY, byteCount); + OS.MoveMemory (pszText, buffer.ptr, byteCount); lvColumn.mask |= OS.LVCF_TEXT; lvColumn.pszText = pszText; - int result = OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, lvColumn); - if (pszText !is 0) OS.HeapFree (hHeap, 0, pszText); + int result = OS.SendMessage (hwnd, OS.LVM_SETCOLUMN, index, cast(int) &lvColumn); + if (pszText !is null) OS.HeapFree (hHeap, 0, pszText); if (result is 0) error (DWT.ERROR_CANNOT_SET_TEXT); } @@ -825,11 +820,11 @@ * * @since 3.2 */ -public void setToolTipText (String string) { +public void setToolTipText (char[] string) { checkWidget(); toolTipText = string; - int hwndHeaderToolTip = parent.headerToolTipHandle; - if (hwndHeaderToolTip is 0) { + auto hwndHeaderToolTip = parent.headerToolTipHandle; + if (hwndHeaderToolTip is null) { parent.createHeaderToolTips (); parent.updateHeaderToolTips (); } @@ -850,29 +845,29 @@ if (width < 0) return; int index = parent.indexOf (this); if (index is -1) return; - int hwnd = parent.handle; + auto hwnd = parent.handle; OS.SendMessage (hwnd, OS.LVM_SETCOLUMNWIDTH, index, width); } void updateToolTip (int index) { - int hwndHeaderToolTip = parent.headerToolTipHandle; - if (hwndHeaderToolTip !is 0) { - int hwnd = parent.handle; - int hwndHeader = OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); - RECT rect = new RECT (); - if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, rect) !is 0) { - TOOLINFO lpti = new TOOLINFO (); + auto hwndHeaderToolTip = parent.headerToolTipHandle; + if (hwndHeaderToolTip !is null) { + auto hwnd = parent.handle; + auto hwndHeader = cast(HWND) OS.SendMessage (hwnd, OS.LVM_GETHEADER, 0, 0); + RECT rect; + if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, &rect) !is 0) { + TOOLINFO lpti; lpti.cbSize = TOOLINFO.sizeof; lpti.hwnd = hwndHeader; lpti.uId = id; - lpti.left = rect.left; - lpti.top = rect.top; - lpti.right = rect.right; - lpti.bottom = rect.bottom; - OS.SendMessage (hwndHeaderToolTip, OS.TTM_NEWTOOLRECT, 0, lpti); + lpti.rect.left = rect.left; + lpti.rect.top = rect.top; + lpti.rect.right = rect.right; + lpti.rect.bottom = rect.bottom; + OS.SendMessage (hwndHeaderToolTip, OS.TTM_NEWTOOLRECT, 0, &lpti); } } } } -++/ +