changeset 819:2dd7638a7719

Fix for some dw_container_change_item() misbehavior... was functioning the same as dw_container_set_item(). Also added dw_container_change_row_title() which performs the same task as dw_container_set_row_title() on inserted items.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 26 Mar 2011 12:49:59 +0000
parents c17634e2b303
children 19a632499344
files dw.def dw.h dww.def os2/dw.c win/dw.c
diffstat 5 files changed, 71 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/dw.def	Sat Mar 26 05:24:01 2011 +0000
+++ b/dw.def	Sat Mar 26 12:49:59 2011 +0000
@@ -142,6 +142,7 @@
   dw_container_delete_row                @235
   dw_container_change_item               @236
   dw_container_get_column_type           @237
+  dw_container_change_row_title          @238
 
   dw_filesystem_setup                    @240
   dw_filesystem_set_item                 @241
--- a/dw.h	Sat Mar 26 05:24:01 2011 +0000
+++ b/dw.h	Sat Mar 26 12:49:59 2011 +0000
@@ -1548,6 +1548,7 @@
 void API dw_container_change_item(HWND handle, int column, int row, void *data);
 void API dw_container_set_column_width(HWND handle, int column, int width);
 void API dw_container_set_row_title(void *pointer, int row, char *title);
+void API dw_container_change_row_title(HWND handle, int row, char *title);
 void API dw_container_insert(HWND handle, void *pointer, int rowcount);
 void API dw_container_clear(HWND handle, int redraw);
 void API dw_container_delete(HWND handle, int rowcount);
--- a/dww.def	Sat Mar 26 05:24:01 2011 +0000
+++ b/dww.def	Sat Mar 26 12:49:59 2011 +0000
@@ -139,6 +139,7 @@
   dw_container_delete_row                @235
   dw_container_change_item               @236
   dw_container_get_column_type           @237
+  dw_container_change_row_title          @238
 
   dw_filesystem_setup                    @240
   dw_filesystem_set_item                 @241
--- a/os2/dw.c	Sat Mar 26 05:24:01 2011 +0000
+++ b/os2/dw.c	Sat Mar 26 12:49:59 2011 +0000
@@ -7275,6 +7275,34 @@
 }
 
 /*
+ * Changes the title of a row already inserted in the container.
+ * Parameters:
+ *          handle: Handle to the container window (widget).
+ *          row: Zero based row of data being set.
+ *          title: String title of the item.
+ */
+void API dw_container_change_row_title(HWND handle, int row, char *title)
+{
+   PRECORDCORE pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)0L, MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
+   int count = 0;
+
+   while(pCore)
+   {
+      if(count == row)
+      {
+         pCore->pszIcon = title;
+         pCore->pszName = title;
+         pCore->pszText = title;
+
+         WinSendMsg(handle, CM_INVALIDATERECORD, (MPARAM)&pCore, MPFROM2SHORT(1, CMA_NOREPOSITION | CMA_TEXTCHANGED));
+         return;
+      }
+      pCore = WinSendMsg(handle, CM_QUERYRECORD, (MPARAM)pCore, MPFROM2SHORT(CMA_NEXT, CMA_ITEMORDER));
+      count++;
+   }
+}
+
+/*
  * Sets the title of a row in the container.
  * Parameters:
  *          handle: Handle to the container window (widget).
--- a/win/dw.c	Sat Mar 26 05:24:01 2011 +0000
+++ b/win/dw.c	Sat Mar 26 12:49:59 2011 +0000
@@ -7681,7 +7681,12 @@
    ULONG *flags;
    LV_ITEM lvi;
    char textbuffer[100], *destptr = textbuffer;
-   int item = (int)dw_window_get_data(handle, "_dw_insertitem");
+   int item = 0;
+   
+   if(pointer)
+   {
+	   item = (int)dw_window_get_data(handle, "_dw_insertitem");
+   }
 
    if(!cinfo || !cinfo->flags || !data)
       return;
@@ -7860,6 +7865,27 @@
    ListView_SetColumnWidth(handle, column, width);
 }
 
+/* Internal version that handles both types */
+void _dw_container_set_row_title(HWND handle, void *pointer, int row, char *title)
+{
+   LV_ITEM lvi;
+   int item = 0;
+   
+   if(pointer)
+   {
+	   item = (int)dw_window_get_data(handle, "_dw_insertitem");
+   }
+
+   lvi.iItem = row + item;
+   lvi.iSubItem = 0;
+   lvi.mask = LVIF_PARAM;
+   lvi.lParam = (LPARAM)title;
+
+   if(!ListView_SetItem(handle, &lvi) && lvi.lParam)
+      lvi.lParam = 0;
+
+}
+
 /*
  * Sets the title of a row in the container.
  * Parameters:
@@ -7869,18 +7895,19 @@
  */
 void API dw_container_set_row_title(void *pointer, int row, char *title)
 {
-   LV_ITEM lvi;
-   HWND container = (HWND)pointer;
-   int item = (int)dw_window_get_data(container, "_dw_insertitem");
-
-   lvi.iItem = row + item;
-   lvi.iSubItem = 0;
-   lvi.mask = LVIF_PARAM;
-   lvi.lParam = (LPARAM)title;
-
-   if(!ListView_SetItem(container, &lvi) && lvi.lParam)
-      lvi.lParam = 0;
-
+	_dw_container_set_row_title(pointer, pointer, row, title);
+}
+
+/*
+ * Changes the title of a row already inserted in the container.
+ * Parameters:
+ *          handle: Handle to the container window (widget).
+ *          row: Zero based row of data being set.
+ *          title: String title of the item.
+ */
+void API dw_container_change_row_title(HWND handle, int row, char *title)
+{
+	_dw_container_set_row_title(handle, NULL, row, title);
 }
 
 /*