comparison win/dw.c @ 1500:97002721c4ca

Allow passing NULL to the container set item functions on Windows. NULL will empty the field of text and icon.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 26 Dec 2011 10:56:36 +0000
parents f8b4d6075cac
children 9b2600034473
comparison
equal deleted inserted replaced
1499:97e5e8688fe1 1500:97002721c4ca
8406 void API dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data) 8406 void API dw_container_set_item(HWND handle, void *pointer, int column, int row, void *data)
8407 { 8407 {
8408 ContainerInfo *cinfo = (ContainerInfo *)GetWindowLongPtr(handle, GWLP_USERDATA); 8408 ContainerInfo *cinfo = (ContainerInfo *)GetWindowLongPtr(handle, GWLP_USERDATA);
8409 ULONG *flags; 8409 ULONG *flags;
8410 LV_ITEM lvi; 8410 LV_ITEM lvi;
8411 char textbuffer[101] = {0}, *destptr = textbuffer; 8411 char textbuffer[101] = {0};
8412 int item = 0; 8412 int item = 0;
8413 8413
8414 if(pointer) 8414 if(pointer)
8415 { 8415 {
8416 item = (int)dw_window_get_data(handle, "_dw_insertitem"); 8416 item = (int)dw_window_get_data(handle, "_dw_insertitem");
8417 } 8417 }
8418 8418
8419 if(!cinfo || !cinfo->flags || !data) 8419 if(!cinfo || !cinfo->flags)
8420 return; 8420 return;
8421 8421
8422 flags = cinfo->flags; 8422 flags = cinfo->flags;
8423 8423
8424 lvi.mask = LVIF_DI_SETITEM | LVIF_TEXT; 8424 lvi.mask = LVIF_DI_SETITEM | LVIF_TEXT;
8425 lvi.iItem = row + item; 8425 lvi.iItem = row + item;
8426 lvi.iSubItem = column; 8426 lvi.iSubItem = column;
8427 lvi.pszText = textbuffer;
8428 lvi.cchTextMax = 0;
8427 8429
8428 if(flags[column] & DW_CFA_BITMAPORICON) 8430 if(flags[column] & DW_CFA_BITMAPORICON)
8429 { 8431 {
8430 HICON hicon = *((HICON *)data);
8431
8432 lvi.mask = LVIF_DI_SETITEM | LVIF_IMAGE; 8432 lvi.mask = LVIF_DI_SETITEM | LVIF_IMAGE;
8433 lvi.pszText = NULL; 8433 lvi.pszText = NULL;
8434 lvi.cchTextMax = 0; 8434
8435 8435 if(data)
8436 lvi.iImage = _lookup_icon(handle, hicon, 0); 8436 {
8437 } 8437 HICON hicon = *((HICON *)data);
8438 else if(flags[column] & DW_CFA_STRING) 8438
8439 lvi.iImage = _lookup_icon(handle, hicon, 0);
8440 }
8441 else
8442 lvi.iImage = -1;
8443 }
8444 else if(flags[column] & DW_CFA_STRING && data)
8439 { 8445 {
8440 char *tmp = *((char **)data); 8446 char *tmp = *((char **)data);
8441 8447
8442 if(!tmp) 8448 if(!tmp)
8443 tmp = ""; 8449 tmp = "";
8444 8450
8445 lvi.pszText = tmp; 8451 lvi.pszText = tmp;
8446 lvi.cchTextMax = strlen(tmp); 8452 lvi.cchTextMax = strlen(tmp);
8447 destptr = tmp; 8453 }
8448 } 8454 else if(flags[column] & DW_CFA_ULONG && data)
8449 else if(flags[column] & DW_CFA_ULONG)
8450 { 8455 {
8451 ULONG tmp = *((ULONG *)data); 8456 ULONG tmp = *((ULONG *)data);
8452 8457
8453 _snprintf(textbuffer, 100, "%lu", tmp); 8458 _snprintf(textbuffer, 100, "%lu", tmp);
8454 8459
8455 lvi.pszText = textbuffer;
8456 lvi.cchTextMax = strlen(textbuffer); 8460 lvi.cchTextMax = strlen(textbuffer);
8457 } 8461 }
8458 else if(flags[column] & DW_CFA_DATE) 8462 else if(flags[column] & DW_CFA_DATE && data)
8459 { 8463 {
8460 struct tm curtm; 8464 struct tm curtm;
8461 CDATE cdate = *((CDATE *)data); 8465 CDATE cdate = *((CDATE *)data);
8462 8466
8463 memset(&curtm, 0, sizeof(struct tm)); 8467 memset(&curtm, 0, sizeof(struct tm));
8470 curtm.tm_mday = (cdate.day >= 0 && cdate.day < 32) ? cdate.day : 1; 8474 curtm.tm_mday = (cdate.day >= 0 && cdate.day < 32) ? cdate.day : 1;
8471 curtm.tm_mon = (cdate.month > 0 && cdate.month < 13) ? cdate.month - 1 : 0; 8475 curtm.tm_mon = (cdate.month > 0 && cdate.month < 13) ? cdate.month - 1 : 0;
8472 curtm.tm_year = cdate.year - 1900; 8476 curtm.tm_year = cdate.year - 1900;
8473 strftime(textbuffer, 100, "%x", &curtm); 8477 strftime(textbuffer, 100, "%x", &curtm);
8474 } 8478 }
8475 else 8479
8476 {
8477 textbuffer[0] = 0;
8478 }
8479
8480 lvi.pszText = textbuffer;
8481 lvi.cchTextMax = strlen(textbuffer); 8480 lvi.cchTextMax = strlen(textbuffer);
8482 } 8481 }
8483 else if(flags[column] & DW_CFA_TIME) 8482 else if(flags[column] & DW_CFA_TIME && data)
8484 { 8483 {
8485 struct tm curtm; 8484 struct tm curtm;
8486 CTIME ctime = *((CTIME *)data); 8485 CTIME ctime = *((CTIME *)data);
8487 8486
8488 curtm.tm_hour = (ctime.hours >= 0 && ctime.hours < 24) ? ctime.hours : 0; 8487 curtm.tm_hour = (ctime.hours >= 0 && ctime.hours < 24) ? ctime.hours : 0;
8489 curtm.tm_min = (ctime.minutes >= 0 && ctime.minutes < 60) ? ctime.minutes : 0; 8488 curtm.tm_min = (ctime.minutes >= 0 && ctime.minutes < 60) ? ctime.minutes : 0;
8490 curtm.tm_sec = (ctime.seconds >= 0 && ctime.seconds < 60) ? ctime.seconds : 0; 8489 curtm.tm_sec = (ctime.seconds >= 0 && ctime.seconds < 60) ? ctime.seconds : 0;
8491 8490
8492 strftime(textbuffer, 100, "%X", &curtm); 8491 strftime(textbuffer, 100, "%X", &curtm);
8493 8492
8494 lvi.pszText = textbuffer;
8495 lvi.cchTextMax = strlen(textbuffer); 8493 lvi.cchTextMax = strlen(textbuffer);
8496 } 8494 }
8497 8495
8498 ListView_SetItem(handle, &lvi); 8496 ListView_SetItem(handle, &lvi);
8499 } 8497 }