treeview: {Set,Insert}ItemT

Huw D M Davies h.davies1 at physics.ox.ac.uk
Wed Nov 26 08:06:48 CST 2003


Alexandre, please apply after 'treeview: EnsureVisible fix'

        Huw Davies <huw at codeweavers.com>
        Merge {Set,Insert}Item[AW] to {Set,Insert}ItemT
-- 
Huw Davies
huw at codeweavers.com
--- winehq.orig/dlls/comctl32/treeview.c	2003-11-26 14:02:10.000000000 +0000
+++ winehq/dlls/comctl32/treeview.c	2003-11-26 13:58:07.000000000 +0000
@@ -1058,8 +1058,8 @@ TREEVIEW_InsertAfter(TREEVIEW_ITEM *newI
 }
 
 static BOOL
-TREEVIEW_DoSetItem(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
-		   const TVITEMEXW *tvItem)
+TREEVIEW_DoSetItemT(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
+		   const TVITEMEXW *tvItem, BOOL isW)
 {
     UINT callbackClear = 0;
     UINT callbackSet = 0;
@@ -1069,31 +1069,39 @@ TREEVIEW_DoSetItem(TREEVIEW_INFO *infoPt
     if (tvItem->mask & TVIF_TEXT)
     {
         wineItem->textWidth = 0; /* force width recalculation */
-	if (tvItem->pszText != LPSTR_TEXTCALLBACKW)
+	if (tvItem->pszText != LPSTR_TEXTCALLBACKW) /* covers != TEXTCALLBACKA too */
 	{
-	    int len = lstrlenW(tvItem->pszText) + 1;
-	    LPWSTR newText = ReAlloc(wineItem->pszText,
-                                         len * sizeof(WCHAR));
-
-	    if (newText == NULL) return FALSE;
-
-	    callbackClear |= TVIF_TEXT;
+            int len;
+            LPWSTR newText;
+            if (isW)
+                len = lstrlenW(tvItem->pszText) + 1;
+            else
+                len = MultiByteToWideChar(CP_ACP, 0, (LPSTR)tvItem->pszText, -1, NULL, 0);
+            
+            newText  = ReAlloc(wineItem->pszText, len * sizeof(WCHAR));
+
+            if (newText == NULL) return FALSE;
+
+            callbackClear |= TVIF_TEXT;
+
+            wineItem->pszText = newText;
+            wineItem->cchTextMax = len;
+            if (isW)
+                lstrcpynW(wineItem->pszText, tvItem->pszText, len);
+            else
+                MultiByteToWideChar(CP_ACP, 0, (LPSTR)tvItem->pszText, -1,
+                                    wineItem->pszText, len);
 
-	    wineItem->pszText = newText;
-	    wineItem->cchTextMax = len;
-	    lstrcpynW(wineItem->pszText, tvItem->pszText, len);
-	    TRACE("setting text %s, item %p\n",
-		  debugstr_w(wineItem->pszText), wineItem);
-	}
+            TRACE("setting text %s, item %p\n", debugstr_w(wineItem->pszText), wineItem);
+        }
 	else
 	{
 	    callbackSet |= TVIF_TEXT;
 
 	    wineItem->pszText = ReAlloc(wineItem->pszText,
-						 TEXT_CALLBACK_SIZE * sizeof(WCHAR));
+                                        TEXT_CALLBACK_SIZE * sizeof(WCHAR));
 	    wineItem->cchTextMax = TEXT_CALLBACK_SIZE;
-	    TRACE("setting callback, item %p\n",
-		  wineItem);
+	    TRACE("setting callback, item %p\n", wineItem);
 	}
     }
 
@@ -1151,9 +1159,8 @@ TREEVIEW_DoSetItem(TREEVIEW_INFO *infoPt
 
 /* Note that the new item is pre-zeroed. */
 static LRESULT
-TREEVIEW_InsertItemW(TREEVIEW_INFO *infoPtr, LPARAM lParam)
+TREEVIEW_InsertItemT(TREEVIEW_INFO *infoPtr, const TVINSERTSTRUCTW *ptdi, BOOL isW)
 {
-    const TVINSERTSTRUCTW *ptdi = (LPTVINSERTSTRUCTW) lParam;
     const TVITEMEXW *tvItem = &ptdi->DUMMYUNIONNAME.itemex;
     HTREEITEM insertAfter;
     TREEVIEW_ITEM *newItem, *parentItem;
@@ -1206,7 +1213,7 @@ TREEVIEW_InsertItemW(TREEVIEW_INFO *info
     newItem->parent = parentItem;
     newItem->iIntegral = 1;
 
-    if (!TREEVIEW_DoSetItem(infoPtr, newItem, tvItem))
+    if (!TREEVIEW_DoSetItemT(infoPtr, newItem, tvItem, isW))
 	return (LRESULT)(HTREEITEM)NULL;
 
     /* After this point, nothing can fail. (Except for TVI_SORT.) */
@@ -1351,62 +1358,6 @@ TREEVIEW_InsertItemW(TREEVIEW_INFO *info
     return (LRESULT)newItem;
 }
 
-
-static LRESULT
-TREEVIEW_InsertItemA(TREEVIEW_INFO *infoPtr, LPARAM lParam)
-{
-    TVINSERTSTRUCTW tvisW;
-    TVINSERTSTRUCTA *tvisA;
-    LRESULT lRes;
-
-    tvisA = (LPTVINSERTSTRUCTA) lParam;
-
-    tvisW.hParent = tvisA->hParent;
-    tvisW.hInsertAfter = tvisA->hInsertAfter;
-
-    tvisW.DUMMYUNIONNAME.item.mask = tvisA->DUMMYUNIONNAME.item.mask;
-    tvisW.DUMMYUNIONNAME.item.hItem = tvisA->DUMMYUNIONNAME.item.hItem;
-    tvisW.DUMMYUNIONNAME.item.state = tvisA->DUMMYUNIONNAME.item.state;
-    tvisW.DUMMYUNIONNAME.item.stateMask = tvisA->DUMMYUNIONNAME.item.stateMask;
-    tvisW.DUMMYUNIONNAME.item.cchTextMax =
-	tvisA->DUMMYUNIONNAME.item.cchTextMax;
-
-    if ((tvisA->DUMMYUNIONNAME.item.pszText) &&
-        (tvisA->DUMMYUNIONNAME.item.mask & TVIF_TEXT))
-        
-    {
-	if (tvisA->DUMMYUNIONNAME.item.pszText != LPSTR_TEXTCALLBACKA)
-	{
-            int len = MultiByteToWideChar( CP_ACP, 0, tvisA->DUMMYUNIONNAME.item.pszText, -1,
-                                           NULL, 0 );
-	    tvisW.DUMMYUNIONNAME.item.pszText = Alloc(len * sizeof(WCHAR));
-            MultiByteToWideChar( CP_ACP, 0, tvisA->DUMMYUNIONNAME.item.pszText, -1,
-                                 tvisW.DUMMYUNIONNAME.item.pszText, len );
-	}
-	else
-	{
-	    tvisW.DUMMYUNIONNAME.item.pszText = LPSTR_TEXTCALLBACKW;
-	    tvisW.DUMMYUNIONNAME.item.cchTextMax = 0;
-	}
-    }
-
-    tvisW.DUMMYUNIONNAME.item.iImage = tvisA->DUMMYUNIONNAME.item.iImage;
-    tvisW.DUMMYUNIONNAME.item.iSelectedImage =
-	tvisA->DUMMYUNIONNAME.item.iSelectedImage;
-    tvisW.DUMMYUNIONNAME.item.cChildren = tvisA->DUMMYUNIONNAME.item.cChildren;
-    tvisW.DUMMYUNIONNAME.item.lParam = tvisA->DUMMYUNIONNAME.item.lParam;
-
-    lRes = TREEVIEW_InsertItemW(infoPtr, (LPARAM)&tvisW);
-
-    if (tvisW.DUMMYUNIONNAME.item.pszText && tvisW.DUMMYUNIONNAME.item.pszText != LPSTR_TEXTCALLBACKW)
-    {
-	Free(tvisW.DUMMYUNIONNAME.item.pszText);
-    }
-
-    return lRes;
-}
-
-
 /* Item Deletion ************************************************************/
 static void
 TREEVIEW_RemoveItem(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem);
@@ -2081,7 +2032,7 @@ TREEVIEW_GetItemT(TREEVIEW_INFO *infoPtr
 /* Beware MSDN Library Visual Studio 6.0. It says -1 on failure, 0 on success,
  * which is wrong. */
 static LRESULT
-TREEVIEW_SetItemW(TREEVIEW_INFO *infoPtr, LPTVITEMEXW tvItem)
+TREEVIEW_SetItemT(TREEVIEW_INFO *infoPtr, LPTVITEMEXW tvItem, BOOL isW)
 {
     TREEVIEW_ITEM *wineItem;
     TREEVIEW_ITEM originalItem;
@@ -2097,7 +2048,7 @@ TREEVIEW_SetItemW(TREEVIEW_INFO *infoPtr
     /* store the orignal item values */
     originalItem = *wineItem;
 
-    if (!TREEVIEW_DoSetItem(infoPtr, wineItem, tvItem))
+    if (!TREEVIEW_DoSetItemT(infoPtr, wineItem, tvItem, isW))
 	return FALSE;
 
     /* If the text or TVIS_BOLD was changed, and it is visible, recalculate. */
@@ -2137,50 +2088,6 @@ TREEVIEW_SetItemW(TREEVIEW_INFO *infoPtr
 }
 
 static LRESULT
-TREEVIEW_SetItemA(TREEVIEW_INFO *infoPtr, LPTVITEMEXA tvItem)
-{
-    TVITEMEXW tvItemW;
-    INT len;
-    LRESULT rc;
-
-    tvItemW.mask = tvItem->mask;
-    tvItemW.hItem = tvItem->hItem;
-    tvItemW.state = tvItem->state;
-    tvItemW.stateMask = tvItem->stateMask;
-    tvItemW.cchTextMax = 0;
-    tvItemW.pszText = 0;
-
-    if (tvItem->mask & TVIF_TEXT)
-    {
-        if(tvItem->pszText && tvItem->pszText != LPSTR_TEXTCALLBACKA)
-        {
-            len = MultiByteToWideChar(CP_ACP, 0, tvItem->pszText, -1,
-                                      NULL, 0);
-            if (len)
-            {
-                tvItemW.pszText = Alloc(len*sizeof(WCHAR));
-                MultiByteToWideChar(CP_ACP, 0, tvItem->pszText, -1,
-                                    tvItemW.pszText ,len);
-                tvItemW.cchTextMax = len;
-            }
-        }
-        else if(tvItem->pszText == LPSTR_TEXTCALLBACKA)
-            tvItemW.pszText = LPSTR_TEXTCALLBACKW;
-    }
-           
-    tvItemW.iImage = tvItem->iImage;
-    tvItemW.iSelectedImage = tvItem->iSelectedImage;
-    tvItemW.cChildren = tvItem->cChildren;
-    tvItemW.lParam = tvItem->lParam;
-    tvItemW.iIntegral = tvItem->iIntegral;
-
-    rc = TREEVIEW_SetItemW(infoPtr,&tvItemW);
-    if(tvItemW.pszText && tvItemW.pszText != LPSTR_TEXTCALLBACKW)
-        Free(tvItemW.pszText);
-    return rc;
-}
-
-static LRESULT
 TREEVIEW_GetItemState(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem, UINT mask)
 {
     TRACE("\n");
@@ -5280,10 +5187,10 @@ TREEVIEW_WindowProc(HWND hwnd, UINT uMsg
 	return TREEVIEW_HitTest(infoPtr, (LPTVHITTESTINFO)lParam);
 
     case TVM_INSERTITEMA:
-	return TREEVIEW_InsertItemA(infoPtr, lParam);
+	return TREEVIEW_InsertItemT(infoPtr, (LPTVINSERTSTRUCTW)lParam, FALSE);
 
     case TVM_INSERTITEMW:
-	return TREEVIEW_InsertItemW(infoPtr, lParam);
+	return TREEVIEW_InsertItemT(infoPtr, (LPTVINSERTSTRUCTW)lParam, TRUE);
 
     case TVM_SELECTITEM:
 	return TREEVIEW_SelectItem(infoPtr, (INT)wParam, (HTREEITEM)lParam);
@@ -5304,10 +5211,10 @@ TREEVIEW_WindowProc(HWND hwnd, UINT uMsg
 	return TREEVIEW_SetInsertMarkColor(infoPtr, (COLORREF)lParam);
 
     case TVM_SETITEMA:
-	return TREEVIEW_SetItemA(infoPtr, (LPTVITEMEXA)lParam);
+	return TREEVIEW_SetItemT(infoPtr, (LPTVITEMEXW)lParam, FALSE);
 
     case TVM_SETITEMW:
-        return TREEVIEW_SetItemW(infoPtr, (LPTVITEMEXW)lParam);
+        return TREEVIEW_SetItemT(infoPtr, (LPTVITEMEXW)lParam, TRUE);
 
     case TVM_SETLINECOLOR:
 	return TREEVIEW_SetLineColor(infoPtr, (COLORREF)lParam);



More information about the wine-patches mailing list