changeset 1869:a2d556368be1

Fixed Windows issues with dw_tree_item_g/set_data()... and potentially dw_tree_item_get_title() and simplified the delete and clear functionality.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 21 Mar 2013 22:10:43 +0000
parents dc3260e1a915
children 5a4d98cab9d3
files win/dw.c
diffstat 1 files changed, 13 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/win/dw.c	Thu Mar 21 21:14:04 2013 +0000
+++ b/win/dw.c	Thu Mar 21 22:10:43 2013 +0000
@@ -8778,16 +8778,12 @@
 void API dw_tree_item_set_data(HWND handle, HTREEITEM item, void *itemdata)
 {
    TVITEM tvi;
-   void **ptrs;
-
-   tvi.mask = TVIF_HANDLE;
+
+   tvi.mask = TVIF_HANDLE | TVIF_PARAM;
    tvi.hItem = item;
-
-   if(TreeView_GetItem(handle, &tvi))
-   {
-      ptrs = (void **)tvi.lParam;
-      ptrs[1] = itemdata;
-   }
+   tvi.lParam = (LPARAM)itemdata;
+
+   TreeView_SetItem(handle, &tvi);
 }
 
 /*
@@ -8799,15 +8795,13 @@
 void * API dw_tree_item_get_data(HWND handle, HTREEITEM item)
 {
    TVITEM tvi;
-   void **ptrs;
 
    tvi.mask = TVIF_HANDLE | TVIF_PARAM;
    tvi.hItem = item;
 
    if(TreeView_GetItem(handle, &tvi))
    {
-      ptrs = (void **)tvi.lParam;
-      return ptrs[1];
+      return (void *)tvi.lParam;
    }
    return NULL;
 }
@@ -8821,12 +8815,13 @@
 char * API dw_tree_get_title(HWND handle, HTREEITEM item)
 {
    TVITEM tvi;
-
-   tvi.mask = TVIF_HANDLE;
+   TCHAR textbuf[1025] = {0}, *textptr = textbuf;
+
+   tvi.mask = TVIF_HANDLE | TVIF_TEXT;
    tvi.hItem = item;
 
    if(TreeView_GetItem(handle, &tvi))
-      return _strdup(WideToUTF8(tvi.pszText));
+      return _strdup(WideToUTF8(textptr));
     return NULL;
 }
 
@@ -8852,22 +8847,6 @@
    TreeView_SelectItem(handle, item);
 }
 
-/* Delete all tree subitems */
-void _dw_tree_item_delete_recursive(HWND handle, HTREEITEM node)
-{
-   HTREEITEM hti;
-
-   hti = TreeView_GetChild(handle, node);
-
-   while(hti)
-   {
-      HTREEITEM lastitem = hti;
-
-      hti = TreeView_GetNextSibling(handle, hti);
-      dw_tree_item_delete(handle, lastitem);
-   }
-}
-
 /*
  * Removes all nodes from a tree.
  * Parameters:
@@ -8875,18 +8854,9 @@
  */
 void API dw_tree_clear(HWND handle)
 {
-   HTREEITEM hti = TreeView_GetRoot(handle);
-
-   dw_window_set_data(handle, "_dw_select_item", (void *)1);
-   while(hti)
-   {
-      HTREEITEM lastitem = hti;
-
-      _dw_tree_item_delete_recursive(handle, hti);
-      hti = TreeView_GetNextSibling(handle, hti);
-      dw_tree_item_delete(handle, lastitem);
-   }
-   dw_window_set_data(handle, "_dw_select_item", (void *)0);
+   dw_window_set_data(handle, "_dw_select_item", DW_INT_TO_POINTER(1));
+   TreeView_DeleteAllItems(handle);
+   dw_window_set_data(handle, "_dw_select_item", NULL);
 }
 
 /*
@@ -8919,22 +8889,7 @@
  */
 void API dw_tree_item_delete(HWND handle, HTREEITEM item)
 {
-   TVITEM tvi;
-   void **ptrs=NULL;
-
-   if(item == TVI_ROOT || !item)
-      return;
-
-   tvi.mask = TVIF_HANDLE;
-   tvi.hItem = item;
-
-   if(TreeView_GetItem(handle, &tvi))
-      ptrs = (void **)tvi.lParam;
-
-   _dw_tree_item_delete_recursive(handle, item);
    TreeView_DeleteItem(handle, item);
-   if(ptrs)
-      free(ptrs);
 }
 
 /*
@@ -12514,4 +12469,3 @@
     return NULL;
 #endif
 }
-