Mercurial > dwindows
comparison win/dw.c @ 1872:eae36372d64d
Second Windows round of changes to split the data and string
container functionality...
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 08 Aug 2013 18:26:46 +0000 |
parents | 5a4d98cab9d3 |
children | fb137f7f91e4 |
comparison
equal
deleted
inserted
replaced
1871:3f571ad9b92e | 1872:eae36372d64d |
---|---|
260 #define IS_VISTAPLUS (dwComctlVer >= PACKVERSION(6,10)) | 260 #define IS_VISTAPLUS (dwComctlVer >= PACKVERSION(6,10)) |
261 | 261 |
262 #ifndef MIN | 262 #ifndef MIN |
263 #define MIN(a, b) (((a) < (b)) ? (a) : (b)) | 263 #define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
264 #endif | 264 #endif |
265 | |
266 #define _DW_DATA_TYPE_STRING 0 | |
267 #define _DW_DATA_TYPE_POINTER 1 | |
265 | 268 |
266 /* | 269 /* |
267 * For the dw*from_data() functions, a temporary file is required to write | 270 * For the dw*from_data() functions, a temporary file is required to write |
268 * the contents of the image to so it can be loaded by the Win32 API | 271 * the contents of the image to so it can be loaded by the Win32 API |
269 * We use _tempnam() which uses TMP env variable by default. It can be passed | 272 * We use _tempnam() which uses TMP env variable by default. It can be passed |
2010 memset(&lvi, 0, sizeof(LV_ITEM)); | 2013 memset(&lvi, 0, sizeof(LV_ITEM)); |
2011 | 2014 |
2012 if(iItem > -1) | 2015 if(iItem > -1) |
2013 { | 2016 { |
2014 int (DWSIGNAL *treeselectfunc)(HWND, HWND, char *, void *, void *) = tmp->signalfunction; | 2017 int (DWSIGNAL *treeselectfunc)(HWND, HWND, char *, void *, void *) = tmp->signalfunction; |
2018 void **params; | |
2015 | 2019 |
2016 lvi.iItem = iItem; | 2020 lvi.iItem = iItem; |
2017 lvi.mask = LVIF_PARAM; | 2021 lvi.mask = LVIF_PARAM; |
2018 | 2022 |
2019 ListView_GetItem(tmp->window, &lvi); | 2023 ListView_GetItem(tmp->window, &lvi); |
2020 | 2024 |
2021 /* Seems to be having lParam as 1 which really sucks */ | 2025 params = (void **)lvi.lParam; |
2022 if(lvi.lParam < 100) | 2026 |
2023 lvi.lParam = 0; | 2027 treeselectfunc(tmp->window, 0, params ? (char *)params[_DW_DATA_TYPE_STRING] : NULL, tmp->data, params ? params[_DW_DATA_TYPE_POINTER] : NULL); |
2024 | |
2025 treeselectfunc(tmp->window, 0, (char *)lvi.lParam, tmp->data, 0); | |
2026 tmp = NULL; | 2028 tmp = NULL; |
2027 } | 2029 } |
2028 } | 2030 } |
2029 } | 2031 } |
2030 } | 2032 } |
2931 case WM_LBUTTONDBLCLK: | 2933 case WM_LBUTTONDBLCLK: |
2932 case WM_CHAR: | 2934 case WM_CHAR: |
2933 { | 2935 { |
2934 LV_ITEM lvi; | 2936 LV_ITEM lvi; |
2935 int iItem; | 2937 int iItem; |
2938 void **params = NULL; | |
2936 | 2939 |
2937 if(LOWORD(mp1) == '\t') | 2940 if(LOWORD(mp1) == '\t') |
2938 { | 2941 { |
2939 if(GetAsyncKeyState(VK_SHIFT) & 0x8000) | 2942 if(GetAsyncKeyState(VK_SHIFT) & 0x8000) |
2940 _shift_focus(hWnd, _DW_DIRECTION_BACKWARD); | 2943 _shift_focus(hWnd, _DW_DIRECTION_BACKWARD); |
2954 { | 2957 { |
2955 lvi.iItem = iItem; | 2958 lvi.iItem = iItem; |
2956 lvi.mask = LVIF_PARAM; | 2959 lvi.mask = LVIF_PARAM; |
2957 | 2960 |
2958 ListView_GetItem(hWnd, &lvi); | 2961 ListView_GetItem(hWnd, &lvi); |
2962 params = (void **)lvi.lParam; | |
2959 } | 2963 } |
2960 | 2964 |
2961 { | 2965 { |
2962 SignalHandler *tmp = Root; | 2966 SignalHandler *tmp = Root; |
2963 | 2967 |
2964 while(tmp) | 2968 while(tmp) |
2965 { | 2969 { |
2966 if(tmp->message == NM_DBLCLK && tmp->window == hWnd) | 2970 if(tmp->message == NM_DBLCLK && tmp->window == hWnd) |
2967 { | 2971 { |
2968 int (DWSIGNAL *containerselectfunc)(HWND, char *, void *) = tmp->signalfunction; | 2972 int (DWSIGNAL *containerselectfunc)(HWND, char *, void *, void *) = tmp->signalfunction; |
2969 | 2973 |
2970 /* Seems to be having lParam as 1 which really sucks */ | 2974 containerselectfunc(tmp->window, params ? params[_DW_DATA_TYPE_STRING] : NULL, tmp->data, params ? params[_DW_DATA_TYPE_POINTER] : NULL); |
2971 if(lvi.lParam < 100) | |
2972 lvi.lParam = 0; | |
2973 | |
2974 containerselectfunc(tmp->window, (char *)lvi.lParam, tmp->data); | |
2975 tmp = NULL; | 2975 tmp = NULL; |
2976 } | 2976 } |
2977 if(tmp) | 2977 if(tmp) |
2978 tmp = tmp->next; | 2978 tmp = tmp->next; |
2979 } | 2979 } |
2991 int (DWSIGNAL *containercontextfunc)(HWND, char *, int, int, void *, void *) = tmp->signalfunction; | 2991 int (DWSIGNAL *containercontextfunc)(HWND, char *, int, int, void *, void *) = tmp->signalfunction; |
2992 LONG x,y; | 2992 LONG x,y; |
2993 LV_ITEM lvi; | 2993 LV_ITEM lvi; |
2994 int iItem; | 2994 int iItem; |
2995 LVHITTESTINFO lhi; | 2995 LVHITTESTINFO lhi; |
2996 TCHAR textbuf[1025] = {0}; | |
2996 | 2997 |
2997 dw_pointer_query_pos(&x, &y); | 2998 dw_pointer_query_pos(&x, &y); |
2998 | 2999 |
2999 lhi.pt.x = x; | 3000 lhi.pt.x = x; |
3000 lhi.pt.y = y; | 3001 lhi.pt.y = y; |
3006 memset(&lvi, 0, sizeof(LV_ITEM)); | 3007 memset(&lvi, 0, sizeof(LV_ITEM)); |
3007 | 3008 |
3008 if(iItem > -1) | 3009 if(iItem > -1) |
3009 { | 3010 { |
3010 lvi.iItem = iItem; | 3011 lvi.iItem = iItem; |
3011 lvi.mask = LVIF_PARAM; | 3012 lvi.pszText = textbuf; |
3013 lvi.cchTextMax = 1024; | |
3014 lvi.mask = LVIF_PARAM | LVIF_TEXT; | |
3012 | 3015 |
3013 ListView_GetItem(tmp->window, &lvi); | 3016 ListView_GetItem(tmp->window, &lvi); |
3014 ListView_SetSelectionMark(tmp->window, iItem); | 3017 ListView_SetSelectionMark(tmp->window, iItem); |
3015 } | 3018 } |
3016 | 3019 |
3017 /* Seems to be having lParam as 1 which really sucks */ | 3020 containercontextfunc(tmp->window, lvi.pszText ? WideToUTF8(lvi.pszText) : NULL, x, y, tmp->data, (void *)lvi.lParam); |
3018 if(lvi.lParam < 100) | |
3019 lvi.lParam = 0; | |
3020 | |
3021 containercontextfunc(tmp->window, (char *)lvi.lParam, x, y, tmp->data, NULL); | |
3022 tmp = NULL; | 3021 tmp = NULL; |
3023 } | 3022 } |
3024 if(tmp) | 3023 if(tmp) |
3025 tmp = tmp->next; | 3024 tmp = tmp->next; |
3026 } | 3025 } |
9448 { | 9447 { |
9449 ListView_SetColumnWidth(handle, column, width); | 9448 ListView_SetColumnWidth(handle, column, width); |
9450 } | 9449 } |
9451 | 9450 |
9452 /* Internal version that handles both types */ | 9451 /* Internal version that handles both types */ |
9453 void _dw_container_set_row_title(HWND handle, void *pointer, int row, char *title) | 9452 void _dw_container_set_row_data(HWND handle, void *pointer, int row, int type, void *data) |
9454 { | 9453 { |
9455 LV_ITEM lvi; | 9454 LV_ITEM lvi; |
9456 int item = 0; | 9455 int item = 0; |
9457 | 9456 |
9458 if(pointer) | 9457 if(pointer) |
9459 { | 9458 { |
9460 item = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_insertitem")); | 9459 item = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_insertitem")); |
9461 } | 9460 } |
9462 | 9461 |
9462 memset(&lvi, 0, sizeof(LV_ITEM)); | |
9463 | |
9463 lvi.iItem = row + item; | 9464 lvi.iItem = row + item; |
9464 lvi.iSubItem = 0; | |
9465 lvi.mask = LVIF_PARAM; | 9465 lvi.mask = LVIF_PARAM; |
9466 lvi.lParam = (LPARAM)title; | 9466 |
9467 | 9467 if(ListView_GetItem(handle, &lvi)) |
9468 if(!ListView_SetItem(handle, &lvi) && lvi.lParam) | 9468 { |
9469 lvi.lParam = 0; | 9469 void **params = (void **)lvi.lParam; |
9470 | 9470 void *newparam = data; |
9471 | |
9472 /* Make sure we have our pointer array... */ | |
9473 if(!params) | |
9474 { | |
9475 /* If not allocate it */ | |
9476 params = (void **)calloc(2, sizeof(void *)); | |
9477 lvi.lParam = (LPARAM)params; | |
9478 ListView_SetItem(handle, &lvi); | |
9479 } | |
9480 /* If type string, we need to duplicate the string... | |
9481 * freeing any existing string. | |
9482 */ | |
9483 if(type == _DW_DATA_TYPE_STRING) | |
9484 { | |
9485 void *oldparam = params[type]; | |
9486 | |
9487 params[type] = NULL; | |
9488 | |
9489 if(oldparam) | |
9490 free(oldparam); | |
9491 if(newparam) | |
9492 newparam = _strdup((char *)newparam); | |
9493 } | |
9494 /* Set the new data in the pointer array */ | |
9495 params[type] = newparam; | |
9496 } | |
9471 } | 9497 } |
9472 | 9498 |
9473 /* | 9499 /* |
9474 * Sets the title of a row in the container. | 9500 * Sets the title of a row in the container. |
9475 * Parameters: | 9501 * Parameters: |
9477 * row: Zero based row of data being set. | 9503 * row: Zero based row of data being set. |
9478 * title: String title of the item. | 9504 * title: String title of the item. |
9479 */ | 9505 */ |
9480 void API dw_container_set_row_title(void *pointer, int row, char *title) | 9506 void API dw_container_set_row_title(void *pointer, int row, char *title) |
9481 { | 9507 { |
9482 _dw_container_set_row_title(pointer, pointer, row, title); | 9508 _dw_container_set_row_data(pointer, pointer, row, _DW_DATA_TYPE_STRING, title); |
9483 } | 9509 } |
9484 | 9510 |
9485 /* | 9511 /* |
9486 * Changes the title of a row already inserted in the container. | 9512 * Changes the title of a row already inserted in the container. |
9487 * Parameters: | 9513 * Parameters: |
9489 * row: Zero based row of data being set. | 9515 * row: Zero based row of data being set. |
9490 * title: String title of the item. | 9516 * title: String title of the item. |
9491 */ | 9517 */ |
9492 void API dw_container_change_row_title(HWND handle, int row, char *title) | 9518 void API dw_container_change_row_title(HWND handle, int row, char *title) |
9493 { | 9519 { |
9494 _dw_container_set_row_title(handle, NULL, row, title); | 9520 _dw_container_set_row_data(handle, NULL, row, _DW_DATA_TYPE_STRING, title); |
9521 } | |
9522 | |
9523 /* | |
9524 * Sets the title of a row in the container. | |
9525 * Parameters: | |
9526 * pointer: Pointer to the allocated memory in dw_container_alloc(). | |
9527 * row: Zero based row of data being set. | |
9528 * data: Data pointer. | |
9529 */ | |
9530 void API dw_container_set_row_data(void *pointer, int row, void *data) | |
9531 { | |
9532 _dw_container_set_row_data(pointer, pointer, row, _DW_DATA_TYPE_POINTER, data); | |
9533 } | |
9534 | |
9535 /* | |
9536 * Changes the data of a row already inserted in the container. | |
9537 * Parameters: | |
9538 * handle: Handle to the container window (widget). | |
9539 * row: Zero based row of data being set. | |
9540 * data: Data pointer. | |
9541 */ | |
9542 void API dw_container_change_row_data(HWND handle, int row, void *data) | |
9543 { | |
9544 _dw_container_set_row_data(handle, NULL, row, _DW_DATA_TYPE_POINTER, data); | |
9495 } | 9545 } |
9496 | 9546 |
9497 /* | 9547 /* |
9498 * Sets the title of a row in the container. | 9548 * Sets the title of a row in the container. |
9499 * Parameters: | 9549 * Parameters: |
9568 */ | 9618 */ |
9569 char * API dw_container_query_start(HWND handle, unsigned long flags) | 9619 char * API dw_container_query_start(HWND handle, unsigned long flags) |
9570 { | 9620 { |
9571 LV_ITEM lvi; | 9621 LV_ITEM lvi; |
9572 int _index = ListView_GetNextItem(handle, -1, flags); | 9622 int _index = ListView_GetNextItem(handle, -1, flags); |
9623 void **params; | |
9624 int type = _DW_DATA_TYPE_STRING; | |
9573 | 9625 |
9574 if(_index == -1) | 9626 if(_index == -1) |
9575 return NULL; | 9627 return NULL; |
9628 | |
9629 if(flags & DW_CR_RETDATA) | |
9630 type = _DW_DATA_TYPE_POINTER; | |
9576 | 9631 |
9577 memset(&lvi, 0, sizeof(LV_ITEM)); | 9632 memset(&lvi, 0, sizeof(LV_ITEM)); |
9578 | 9633 |
9579 lvi.iItem = _index; | 9634 lvi.iItem = _index; |
9580 lvi.mask = LVIF_PARAM; | 9635 lvi.mask = LVIF_PARAM; |
9581 | 9636 |
9582 ListView_GetItem(handle, &lvi); | 9637 ListView_GetItem(handle, &lvi); |
9638 params = (void **)lvi.lParam; | |
9583 | 9639 |
9584 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER(_index)); | 9640 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER(_index)); |
9585 return (char *)lvi.lParam; | 9641 return params ? (char *)params[type] : NULL; |
9586 } | 9642 } |
9587 | 9643 |
9588 /* | 9644 /* |
9589 * Continues an existing query of a container. | 9645 * Continues an existing query of a container. |
9590 * Parameters: | 9646 * Parameters: |
9595 */ | 9651 */ |
9596 char * API dw_container_query_next(HWND handle, unsigned long flags) | 9652 char * API dw_container_query_next(HWND handle, unsigned long flags) |
9597 { | 9653 { |
9598 LV_ITEM lvi; | 9654 LV_ITEM lvi; |
9599 int _index = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_index")); | 9655 int _index = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_index")); |
9656 void **params; | |
9657 int type = _DW_DATA_TYPE_STRING; | |
9600 | 9658 |
9601 _index = ListView_GetNextItem(handle, _index, flags); | 9659 _index = ListView_GetNextItem(handle, _index, flags); |
9602 | 9660 |
9603 if(_index == -1) | 9661 if(_index == -1) |
9604 return NULL; | 9662 return NULL; |
9605 | 9663 |
9664 if(flags & DW_CR_RETDATA) | |
9665 type = _DW_DATA_TYPE_POINTER; | |
9666 | |
9606 memset(&lvi, 0, sizeof(LV_ITEM)); | 9667 memset(&lvi, 0, sizeof(LV_ITEM)); |
9607 | 9668 |
9608 lvi.iItem = _index; | 9669 lvi.iItem = _index; |
9609 lvi.mask = LVIF_PARAM; | 9670 lvi.mask = LVIF_PARAM; |
9610 | 9671 |
9611 ListView_GetItem(handle, &lvi); | 9672 ListView_GetItem(handle, &lvi); |
9673 params = (void **)lvi.lParam; | |
9612 | 9674 |
9613 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER(_index)); | 9675 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER(_index)); |
9614 return (char *)lvi.lParam; | 9676 return params ? (char *)params[type] : NULL; |
9615 } | 9677 } |
9616 | 9678 |
9617 /* | 9679 /* |
9618 * Cursors the item with the text speficied, and scrolls to that item. | 9680 * Cursors the item with the text speficied, and scrolls to that item. |
9619 * Parameters: | 9681 * Parameters: |
9621 * text: Text usually returned by dw_container_query(). | 9683 * text: Text usually returned by dw_container_query(). |
9622 */ | 9684 */ |
9623 void API dw_container_cursor(HWND handle, char *text) | 9685 void API dw_container_cursor(HWND handle, char *text) |
9624 { | 9686 { |
9625 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); | 9687 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); |
9626 int textcomp = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_textcomp")); | |
9627 | 9688 |
9628 while ( index != -1 ) | 9689 while ( index != -1 ) |
9629 { | 9690 { |
9630 LV_ITEM lvi; | 9691 LV_ITEM lvi; |
9692 void **params; | |
9631 | 9693 |
9632 memset(&lvi, 0, sizeof(LV_ITEM)); | 9694 memset(&lvi, 0, sizeof(LV_ITEM)); |
9633 | 9695 |
9634 lvi.iItem = index; | 9696 lvi.iItem = index; |
9635 lvi.mask = LVIF_PARAM; | 9697 lvi.mask = LVIF_PARAM; |
9636 | 9698 |
9637 ListView_GetItem( handle, &lvi ); | 9699 ListView_GetItem( handle, &lvi ); |
9638 | 9700 params = (void **)lvi.lParam; |
9639 if ( (textcomp && lvi.lParam && strcmp( (char *)lvi.lParam, text ) == 0) || (!textcomp && (char *)lvi.lParam == text) ) | 9701 |
9702 if ( params && params[_DW_DATA_TYPE_STRING] && strcmp( (char *)params[_DW_DATA_TYPE_STRING], text ) == 0 ) | |
9640 { | 9703 { |
9641 unsigned long width, height; | 9704 unsigned long width, height; |
9642 | 9705 |
9643 ListView_SetItemState( handle, index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED ); | 9706 ListView_SetItemState( handle, index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED ); |
9644 dw_window_get_pos_size( handle, NULL, NULL, &width, &height); | 9707 dw_window_get_pos_size( handle, NULL, NULL, &width, &height); |
9651 index = ListView_GetNextItem( handle, index, LVNI_ALL ); | 9714 index = ListView_GetNextItem( handle, index, LVNI_ALL ); |
9652 } | 9715 } |
9653 } | 9716 } |
9654 | 9717 |
9655 /* | 9718 /* |
9719 * Cursors the item with the text speficied, and scrolls to that item. | |
9720 * Parameters: | |
9721 * handle: Handle to the window (widget) to be queried. | |
9722 * text: Text usually returned by dw_container_query(). | |
9723 */ | |
9724 void API dw_container_cursor_by_data(HWND handle, void *data) | |
9725 { | |
9726 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); | |
9727 | |
9728 while ( index != -1 ) | |
9729 { | |
9730 LV_ITEM lvi; | |
9731 void **params; | |
9732 | |
9733 memset(&lvi, 0, sizeof(LV_ITEM)); | |
9734 | |
9735 lvi.iItem = index; | |
9736 lvi.mask = LVIF_PARAM; | |
9737 | |
9738 ListView_GetItem( handle, &lvi ); | |
9739 params = (void **)lvi.lParam; | |
9740 | |
9741 if ( params && params[_DW_DATA_TYPE_POINTER] == data ) | |
9742 { | |
9743 unsigned long width, height; | |
9744 | |
9745 ListView_SetItemState( handle, index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED ); | |
9746 dw_window_get_pos_size( handle, NULL, NULL, &width, &height); | |
9747 if(width < 10 || height < 10) | |
9748 dw_window_set_data( handle, "_dw_cursor", DW_INT_TO_POINTER(index) ); | |
9749 ListView_EnsureVisible( handle, index, TRUE ); | |
9750 return; | |
9751 } | |
9752 | |
9753 index = ListView_GetNextItem( handle, index, LVNI_ALL ); | |
9754 } | |
9755 } | |
9756 | |
9757 /* | |
9656 * Deletes the item with the text speficied. | 9758 * Deletes the item with the text speficied. |
9657 * Parameters: | 9759 * Parameters: |
9658 * handle: Handle to the window (widget). | 9760 * handle: Handle to the window (widget). |
9659 * text: Text usually returned by dw_container_query(). | 9761 * text: Text usually returned by dw_container_query(). |
9660 */ | 9762 */ |
9661 void API dw_container_delete_row(HWND handle, char *text) | 9763 void API dw_container_delete_row(HWND handle, char *text) |
9662 { | 9764 { |
9663 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); | 9765 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); |
9664 int textcomp = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_textcomp")); | 9766 void **params; |
9665 | 9767 |
9666 while(index != -1) | 9768 while(index != -1) |
9667 { | 9769 { |
9668 LV_ITEM lvi; | 9770 LV_ITEM lvi; |
9771 void **params; | |
9669 | 9772 |
9670 memset(&lvi, 0, sizeof(LV_ITEM)); | 9773 memset(&lvi, 0, sizeof(LV_ITEM)); |
9671 | 9774 |
9672 lvi.iItem = index; | 9775 lvi.iItem = index; |
9673 lvi.mask = LVIF_PARAM; | 9776 lvi.mask = LVIF_PARAM; |
9674 | 9777 |
9675 ListView_GetItem(handle, &lvi); | 9778 ListView_GetItem(handle, &lvi); |
9676 | 9779 params = (void **)lvi.lParam; |
9677 if ( (textcomp && lvi.lParam && strcmp( (char *)lvi.lParam, text ) == 0) || (!textcomp && (char *)lvi.lParam == text) ) | 9780 |
9781 if ( params && params[_DW_DATA_TYPE_STRING] && strcmp( (char *)params[_DW_DATA_TYPE_STRING], text ) == 0 ) | |
9678 { | 9782 { |
9679 int _index = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_index")); | 9783 int _index = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_index")); |
9680 | 9784 |
9681 if(index < _index) | 9785 if(index < _index) |
9682 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER((_index - 1))); | 9786 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER((_index - 1))); |
9683 | 9787 |
9684 ListView_DeleteItem(handle, index); | 9788 ListView_DeleteItem(handle, index); |
9685 return; | 9789 return; |
9686 } | 9790 } |
9687 | 9791 |
9688 index = ListView_GetNextItem(handle, index, LVNI_ALL); | 9792 index = ListView_GetNextItem(handle, index, LVNI_ALL); |
9793 } | |
9794 } | |
9795 | |
9796 /* | |
9797 * Deletes the item with the text speficied. | |
9798 * Parameters: | |
9799 * handle: Handle to the window (widget). | |
9800 * text: Text usually returned by dw_container_query(). | |
9801 */ | |
9802 void API dw_container_delete_row_by_data(HWND handle, void *data) | |
9803 { | |
9804 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); | |
9805 | |
9806 while(index != -1) | |
9807 { | |
9808 LV_ITEM lvi; | |
9809 void **params; | |
9810 | |
9811 memset(&lvi, 0, sizeof(LV_ITEM)); | |
9812 | |
9813 lvi.iItem = index; | |
9814 lvi.mask = LVIF_PARAM; | |
9815 | |
9816 ListView_GetItem(handle, &lvi); | |
9817 params = (void **)lvi.lParam; | |
9818 | |
9819 if ( params && params[_DW_DATA_TYPE_POINTER] == data ) | |
9820 { | |
9821 int _index = DW_POINTER_TO_INT(dw_window_get_data(handle, "_dw_index")); | |
9822 | |
9823 if(index < _index) | |
9824 dw_window_set_data(handle, "_dw_index", DW_INT_TO_POINTER((_index - 1))); | |
9825 | |
9826 ListView_DeleteItem(handle, index); | |
9827 return; | |
9828 } | |
9829 | |
9830 index = ListView_GetNextItem(handle, index, LVNI_ALL); | |
9689 } | 9831 } |
9690 } | 9832 } |
9691 | 9833 |
9692 /* | 9834 /* |
9693 * Optimizes the column widths so that all data is visible. | 9835 * Optimizes the column widths so that all data is visible. |