diff dwt/widgets/TreeColumn.d @ 213:36f5cb12e1a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Sat, 17 May 2008 17:34:28 +0200
parents ab60f3309436
children c749c13479ef
line wrap: on
line diff
--- a/dwt/widgets/TreeColumn.d	Mon May 05 00:12:38 2008 +0200
+++ b/dwt/widgets/TreeColumn.d	Sat May 17 17:34:28 2008 +0200
@@ -17,8 +17,6 @@
 import dwt.events.ControlListener;
 import dwt.events.SelectionEvent;
 import dwt.events.SelectionListener;
-import dwt.graphics.GC;
-import dwt.graphics.GCData;
 import dwt.graphics.Image;
 import dwt.graphics.Rectangle;
 import dwt.internal.win32.OS;
@@ -107,7 +105,10 @@
  * lists the style constants that are applicable to the class.
  * Style bits are also inherited from superclasses.
  * </p>
- *
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
  * @param parent a composite control which will be the parent of the new instance (cannot be null)
  * @param style the style of control to construct
  * @param index the zero-relative index to store the receiver in its parent
@@ -357,35 +358,19 @@
         OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, cast(int) &tvItem);
         TreeItem item = tvItem.lParam !is -1 ? parent.items [tvItem.lParam] : null;
         if (item !is null) {
-            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);
-            RECT itemRect = item.getBounds (index, true, true, false, false, false, hDC);
-            if (hFont !is cast(HFONT)-1) OS.SelectObject (hDC, hFont);
+            int itemRight = 0;
             if (parent.hooks (DWT.MeasureItem)) {
-                auto nSavedDC = OS.SaveDC (hDC);
-                GCData data = new GCData ();
-                data.device = display;
-                data.hFont = hFont;
-                GC gc = GC.win32_new (hDC, data);
-                Event event = new Event ();
-                event.item = item;
-                event.gc = gc;
-                event.index = index;
-                event.x = itemRect.left;
-                event.y = itemRect.top;
-                event.width = itemRect.right - itemRect.left;
-                event.height = itemRect.bottom - itemRect.top;
-                parent.sendEvent (DWT.MeasureItem, event);
-                event.gc = null;
-                gc.dispose ();
-                OS.RestoreDC (hDC, nSavedDC);
+                Event event = parent.sendMeasureItemEvent (item, index, hDC);
                 if (isDisposed () || parent.isDisposed ()) break;
-                if (event.height > parent.getItemHeight ()) parent.setItemHeight (event.height);
-                //itemRect.left = event.x;
-                itemRect.right = event.x + event.width;
+                itemRight = event.x + event.width;
+            } else {
+                auto hFont = item.fontHandle (index);
+                if (hFont !is cast(HFONT)-1) hFont = OS.SelectObject (hDC, hFont);
+                RECT itemRect = item.getBounds (index, true, true, false, false, false, hDC);
+                if (hFont !is cast(HFONT)-1) OS.SelectObject (hDC, hFont);
+                itemRight = itemRect.right;
             }
-            columnWidth = Math.max (columnWidth, itemRect.right - headerRect.left);
+            columnWidth = Math.max (columnWidth, itemRight - headerRect.left);
         }
         tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, tvItem.hItem);
     }
@@ -490,7 +475,10 @@
  * Controls how text and images will be displayed in the receiver.
  * The argument should be one of <code>LEFT</code>, <code>RIGHT</code>
  * or <code>CENTER</code>.
- *
+ * <p>
+ * Note that due to a restriction on some platforms, the first column
+ * is always left aligned.
+ * </p>
  * @param alignment the new alignment
  *
  * @exception DWTException <ul>
@@ -508,7 +496,7 @@
     auto hwndHeader = parent.hwndHeader;
     if (hwndHeader is null) return;
     HDITEM hdItem;
-    hdItem.mask = OS.HDI_FORMAT | OS.HDI_IMAGE;
+    hdItem.mask = OS.HDI_FORMAT;
     OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, &hdItem);
     hdItem.fmt &= ~OS.HDF_JUSTIFYMASK;
     if ((style & DWT.LEFT) is DWT.LEFT) hdItem.fmt |= OS.HDF_LEFT;
@@ -623,10 +611,12 @@
                 case DWT.UP:
                     hdItem.fmt &= ~(OS.HDF_IMAGE | OS.HDF_SORTDOWN);
                     hdItem.fmt |= OS.HDF_SORTUP;
+                    if (image is null) hdItem.mask &= ~OS.HDI_IMAGE;
                     break;
                 case DWT.DOWN:
                     hdItem.fmt &= ~(OS.HDF_IMAGE | OS.HDF_SORTUP);
                     hdItem.fmt |= OS.HDF_SORTDOWN;
+                    if (image is null) hdItem.mask &= ~OS.HDI_IMAGE;
                     break;
                 case DWT.NONE:
                     hdItem.fmt &= ~(OS.HDF_SORTUP | OS.HDF_SORTDOWN);
@@ -635,6 +625,7 @@
                         hdItem.iImage = parent.imageIndexHeader (image);
                     } else {
                         hdItem.fmt &= ~OS.HDF_IMAGE;
+                        hdItem.mask &= ~OS.HDI_IMAGE;
                     }
                     break;
                 default:
@@ -681,7 +672,7 @@
     * with spaces.
     */
     auto hHeap = OS.GetProcessHeap ();
-    TCHAR[] buffer = StrToTCHARs (parent.getCodePage (), fixMnemonic (string), true);
+    TCHAR[] buffer = StrToTCHARs (parent.getCodePage (), fixMnemonic (string, true), 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);