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);
         }
     }
 }
 
 }
-++/
+