Mercurial > projects > dwt-win
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);