comctl32/header.c: Unify HEADER_GetItem[A/W] into one function

Vitaliy Margolen wine-patch at kievinfo.com
Fri Oct 28 14:10:31 CDT 2005



Vitaliy Margolen

changelog:
  comctl32/header.c
  - Unify HEADER_GetItem[A/W] into one function
-------------- next part --------------
Index: dlls/comctl32/header.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/header.c,v
retrieving revision 1.85
diff -u -p -r1.85 header.c
--- dlls/comctl32/header.c	28 Oct 2005 10:40:27 -0000	1.85
+++ dlls/comctl32/header.c	28 Oct 2005 19:09:40 -0000
@@ -712,11 +712,9 @@ HEADER_GetImageList (HWND hwnd)
 
 
 static LRESULT
-HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
+HEADER_GetItemT (HWND hwnd, INT nItem, LPHDITEMW phdi, BOOL bUnicode)
 {
     HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
-    HDITEMA   *phdi = (HDITEMA*)lParam;
-    INT       nItem = (INT)wParam;
     HEADER_ITEM *lpItem;
 
     if (!phdi)
@@ -727,12 +725,10 @@ HEADER_GetItemA (HWND hwnd, WPARAM wPara
     if (phdi->mask == 0)
 	return TRUE;
 
-    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
+    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
         lpItem = NULL;
-    }
-    else {
+    else
         lpItem = &infoPtr->items[nItem];
-    }
 
     if (phdi->mask & HDI_BITMAP)
 	phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
@@ -746,86 +742,27 @@ HEADER_GetItemA (HWND hwnd, WPARAM wPara
     if (phdi->mask & HDI_LPARAM)
 	phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
 
-    if (phdi->mask & HDI_TEXT) {
-	if (lpItem == NULL) {
-	    *phdi->pszText = 0;
-	}
-	else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
-	    if (lpItem->pszText)
-		WideCharToMultiByte (CP_ACP, 0, lpItem->pszText, -1,
-				     phdi->pszText, phdi->cchTextMax, NULL, NULL);
-	    else
-	        *phdi->pszText = 0;
-	}
-	else
-	    phdi->pszText = LPSTR_TEXTCALLBACKA;
-    }
-
     if (phdi->mask & HDI_IMAGE)
 	phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
 
     if (phdi->mask & HDI_ORDER)
 	phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
 
-    return TRUE;
-}
-
-
-static LRESULT
-HEADER_GetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
-{
-    HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
-    HDITEMW   *phdi = (HDITEMW*)lParam;
-    INT       nItem = (INT)wParam;
-    HEADER_ITEM *lpItem;
-
-    if (!phdi)
-	return FALSE;
-
-    TRACE("[nItem=%d]\n", nItem);
-
-    if (phdi->mask == 0)
-	return TRUE;
-
-    if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
-        lpItem = NULL;
-    }
-    else {
-        lpItem = &infoPtr->items[nItem];
-    }
-
-    if (phdi->mask & HDI_BITMAP)
-	phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
-
-    if (phdi->mask & HDI_FORMAT)
-	phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;
-
-    if (phdi->mask & HDI_WIDTH)
-	phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;
-
-    if (phdi->mask & HDI_LPARAM)
-	phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
-
-    if (phdi->mask & HDI_TEXT) {
-	if (lpItem == NULL) {
-	    *phdi->pszText = 0;
-	}
-	else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
-	    if (lpItem->pszText)
-	        lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax);
-	    else
-	        *phdi->pszText = 0;
-	}
-	else
-	    phdi->pszText = LPSTR_TEXTCALLBACKW;
+    if (phdi->mask & HDI_TEXT)
+    {
+        if (lpItem == NULL)
+            *phdi->pszText = 0;
+        else if (lpItem->pszText == LPSTR_TEXTCALLBACKW) /* covers == TEXTCALLBACKA too */
+            phdi->pszText = LPSTR_TEXTCALLBACKW;
+        else
+        {
+            if (bUnicode)
+                Str_GetPtrW (phdi->pszText, lpItem->pszText, phdi->cchTextMax);
+            else
+                Str_GetPtrWtoA (phdi->pszText, (LPSTR)lpItem->pszText, phdi->cchTextMax);
+        }
     }
 
-    if (phdi->mask & HDI_IMAGE)
-	phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
-
-    if (phdi->mask & HDI_ORDER)
-	phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
-
     return TRUE;
 }
 
@@ -1693,10 +1630,8 @@ HEADER_WindowProc (HWND hwnd, UINT msg, 
 	    return HEADER_GetImageList (hwnd);
 
 	case HDM_GETITEMA:
-	    return HEADER_GetItemA (hwnd, wParam, lParam);
-
 	case HDM_GETITEMW:
-	    return HEADER_GetItemW (hwnd, wParam, lParam);
+	    return HEADER_GetItemT (hwnd, (INT)wParam, (LPHDITEMW)lParam, msg == HDM_GETITEMW);
 
 	case HDM_GETITEMCOUNT:
 	    return HEADER_GetItemCount (hwnd);


More information about the wine-patches mailing list