Mercurial > dwindows
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 } |