Mercurial > dwindows
comparison win/dw.c @ 69:9510897c0b03
Added new container functions, and implemented some missing functionality.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 04 Feb 2002 16:04:43 +0000 |
parents | 8d6100960adf |
children | 291c30a92b9b |
comparison
equal
deleted
inserted
replaced
68:8d6100960adf | 69:9510897c0b03 |
---|---|
1983 if(msg == WM_CHAR && (char)mp1 != '\r') | 1983 if(msg == WM_CHAR && (char)mp1 != '\r') |
1984 break; | 1984 break; |
1985 | 1985 |
1986 iItem = ListView_GetNextItem(hWnd, -1, LVNI_FOCUSED); | 1986 iItem = ListView_GetNextItem(hWnd, -1, LVNI_FOCUSED); |
1987 | 1987 |
1988 memset(&lvi, 0, sizeof(LV_ITEM)); | |
1989 | |
1988 if(iItem > -1) | 1990 if(iItem > -1) |
1989 { | 1991 { |
1990 lvi.iItem = iItem; | 1992 lvi.iItem = iItem; |
1991 lvi.mask = LVIF_PARAM; | 1993 lvi.mask = LVIF_PARAM; |
1992 | 1994 |
1993 ListView_GetItem(hWnd, &lvi); | 1995 ListView_GetItem(hWnd, &lvi); |
1994 } | 1996 } |
1995 else | |
1996 lvi.lParam = (LPARAM)NULL; | |
1997 | 1997 |
1998 { | 1998 { |
1999 SignalHandler *tmp = Root; | 1999 SignalHandler *tmp = Root; |
2000 | 2000 |
2001 while(tmp) | 2001 while(tmp) |
2038 | 2038 |
2039 MapWindowPoints(HWND_DESKTOP, tmp->window, &lhi.pt, 1); | 2039 MapWindowPoints(HWND_DESKTOP, tmp->window, &lhi.pt, 1); |
2040 | 2040 |
2041 iItem = ListView_HitTest(tmp->window, &lhi); | 2041 iItem = ListView_HitTest(tmp->window, &lhi); |
2042 | 2042 |
2043 memset(&lvi, 0, sizeof(LV_ITEM)); | |
2044 | |
2043 if(iItem > -1) | 2045 if(iItem > -1) |
2044 { | 2046 { |
2045 lvi.iItem = iItem; | 2047 lvi.iItem = iItem; |
2046 lvi.mask = LVIF_PARAM; | 2048 lvi.mask = LVIF_PARAM; |
2047 | 2049 |
2048 ListView_GetItem(tmp->window, &lvi); | 2050 ListView_GetItem(tmp->window, &lvi); |
2049 ListView_SetSelectionMark(tmp->window, iItem); | 2051 ListView_SetSelectionMark(tmp->window, iItem); |
2050 } | 2052 } |
2051 else | |
2052 lvi.lParam = (LPARAM)NULL; | |
2053 | 2053 |
2054 /* Seems to be having lParam as 1 which really sucks */ | 2054 /* Seems to be having lParam as 1 which really sucks */ |
2055 if(lvi.lParam < 100) | 2055 if(lvi.lParam < 100) |
2056 lvi.lParam = 0; | 2056 lvi.lParam = 0; |
2057 | 2057 |
3557 */ | 3557 */ |
3558 HWND dw_container_new(ULONG id) | 3558 HWND dw_container_new(ULONG id) |
3559 { | 3559 { |
3560 HWND tmp = CreateWindow(WC_LISTVIEW, | 3560 HWND tmp = CreateWindow(WC_LISTVIEW, |
3561 "", | 3561 "", |
3562 WS_CHILD | LVS_REPORT | | 3562 WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS | |
3563 LVS_SHAREIMAGELISTS | WS_BORDER | | 3563 LVS_SHAREIMAGELISTS | WS_BORDER | |
3564 WS_CLIPCHILDREN, | 3564 WS_CLIPCHILDREN, |
3565 0,0,2000,1000, | 3565 0,0,2000,1000, |
3566 DW_HWND_OBJECT, | 3566 DW_HWND_OBJECT, |
3567 (HMENU)id, | 3567 (HMENU)id, |
3591 */ | 3591 */ |
3592 HWND dw_tree_new(ULONG id) | 3592 HWND dw_tree_new(ULONG id) |
3593 { | 3593 { |
3594 HWND tmp = CreateWindow(WC_TREEVIEW, | 3594 HWND tmp = CreateWindow(WC_TREEVIEW, |
3595 "", | 3595 "", |
3596 WS_CHILD | TVS_HASLINES | | 3596 WS_CHILD | TVS_HASLINES | TVS_SHOWSELALWAYS | |
3597 TVS_HASBUTTONS | TVS_LINESATROOT | | 3597 TVS_HASBUTTONS | TVS_LINESATROOT | |
3598 WS_BORDER | WS_CLIPCHILDREN, | 3598 WS_BORDER | WS_CLIPCHILDREN, |
3599 0,0,2000,1000, | 3599 0,0,2000,1000, |
3600 DW_HWND_OBJECT, | 3600 DW_HWND_OBJECT, |
3601 (HMENU)id, | 3601 (HMENU)id, |
5385 l = 1; | 5385 l = 1; |
5386 | 5386 |
5387 memcpy(&tempflags[l], flags, sizeof(unsigned long) * count); | 5387 memcpy(&tempflags[l], flags, sizeof(unsigned long) * count); |
5388 tempflags[count + l] = 0; | 5388 tempflags[count + l] = 0; |
5389 cinfo->flags = tempflags; | 5389 cinfo->flags = tempflags; |
5390 cinfo->columns = count; | |
5390 | 5391 |
5391 | 5392 |
5392 for(z=0;z<count;z++) | 5393 for(z=0;z<count;z++) |
5393 { | 5394 { |
5394 if(titles[z]) | 5395 if(titles[z]) |
5764 */ | 5765 */ |
5765 char *dw_container_query_start(HWND handle, unsigned long flags) | 5766 char *dw_container_query_start(HWND handle, unsigned long flags) |
5766 { | 5767 { |
5767 LV_ITEM lvi; | 5768 LV_ITEM lvi; |
5768 | 5769 |
5769 if(flags) | 5770 _index = ListView_GetNextItem(handle, -1, flags); |
5770 _index = ListView_GetNextItem(handle, -1, LVNI_SELECTED); | 5771 |
5771 else | 5772 if(_index == -1) |
5772 _index = ListView_GetNextItem(handle, -1, LVNI_ALL); | 5773 return NULL; |
5773 | 5774 |
5775 memset(&lvi, 0, sizeof(LV_ITEM)); | |
5774 | 5776 |
5775 lvi.iItem = _index; | 5777 lvi.iItem = _index; |
5776 lvi.mask = LVIF_PARAM; | 5778 lvi.mask = LVIF_PARAM; |
5777 | 5779 |
5778 ListView_GetItem(handle, &lvi); | 5780 ListView_GetItem(handle, &lvi); |
5790 */ | 5792 */ |
5791 char *dw_container_query_next(HWND handle, unsigned long flags) | 5793 char *dw_container_query_next(HWND handle, unsigned long flags) |
5792 { | 5794 { |
5793 LV_ITEM lvi; | 5795 LV_ITEM lvi; |
5794 | 5796 |
5795 if(flags) | 5797 _index = ListView_GetNextItem(handle, _index, flags); |
5796 _index = ListView_GetNextItem(handle, _index, LVNI_SELECTED); | |
5797 else | |
5798 _index = ListView_GetNextItem(handle, _index, LVNI_ALL); | |
5799 | 5798 |
5800 if(_index == -1) | 5799 if(_index == -1) |
5801 return NULL; | 5800 return NULL; |
5802 | 5801 |
5802 memset(&lvi, 0, sizeof(LV_ITEM)); | |
5803 | |
5803 lvi.iItem = _index; | 5804 lvi.iItem = _index; |
5804 lvi.mask = LVIF_PARAM; | 5805 lvi.mask = LVIF_PARAM; |
5805 | 5806 |
5806 ListView_GetItem(handle, &lvi); | 5807 ListView_GetItem(handle, &lvi); |
5807 | 5808 |
5808 return (char *)lvi.lParam; | 5809 return (char *)lvi.lParam; |
5810 } | |
5811 | |
5812 /* | |
5813 * Cursors the item with the text speficied, and scrolls to that item. | |
5814 * Parameters: | |
5815 * handle: Handle to the window (widget) to be queried. | |
5816 * text: Text usually returned by dw_container_query(). | |
5817 */ | |
5818 void dw_container_cursor(HWND handle, char *text) | |
5819 { | |
5820 int index = ListView_GetNextItem(handle, -1, LVNI_ALL); | |
5821 | |
5822 while(index != -1) | |
5823 { | |
5824 LV_ITEM lvi; | |
5825 | |
5826 memset(&lvi, 0, sizeof(LV_ITEM)); | |
5827 | |
5828 lvi.iItem = index; | |
5829 lvi.mask = LVIF_PARAM; | |
5830 | |
5831 ListView_GetItem(handle, &lvi); | |
5832 | |
5833 if((char *)lvi.lParam == text) | |
5834 { | |
5835 RECT viewport, item; | |
5836 | |
5837 ListView_SetItemState(handle, index, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED); | |
5838 ListView_EnsureVisible(handle, index, TRUE); | |
5839 return; | |
5840 } | |
5841 | |
5842 index = ListView_GetNextItem(handle, index, LVNI_ALL); | |
5843 } | |
5844 } | |
5845 | |
5846 /* | |
5847 * Optimizes the column widths so that all data is visible. | |
5848 * Parameters: | |
5849 * handle: Handle to the window (widget) to be optimized. | |
5850 */ | |
5851 void dw_container_optimize(HWND handle) | |
5852 { | |
5853 ContainerInfo *cinfo = (ContainerInfo *)GetWindowLong(handle, GWL_USERDATA); | |
5854 ULONG *flags; | |
5855 LV_ITEM lvi; | |
5856 | |
5857 if(cinfo && cinfo->columns > 0) | |
5858 { | |
5859 int z, index; | |
5860 ULONG *flags = cinfo->flags, *columns = calloc(sizeof(ULONG), cinfo->columns); | |
5861 char *text = malloc(1024); | |
5862 | |
5863 /* Initialize with sizes of column labels */ | |
5864 for(z=0;z<cinfo->columns;z++) | |
5865 { | |
5866 if(flags[z] & DW_CFA_BITMAPORICON) | |
5867 columns[z] = 5; | |
5868 else | |
5869 { | |
5870 LVCOLUMN lvc; | |
5871 | |
5872 lvc.mask = LVCF_TEXT; | |
5873 lvc.cchTextMax = 1023; | |
5874 lvc.pszText = text; | |
5875 | |
5876 if(ListView_GetColumn(handle, z, &lvc)) | |
5877 columns[z] = ListView_GetStringWidth(handle, lvc.pszText); | |
5878 } | |
5879 } | |
5880 | |
5881 index = ListView_GetNextItem(handle, -1, LVNI_ALL); | |
5882 | |
5883 /* Query all the item texts */ | |
5884 while(index != -1) | |
5885 { | |
5886 for(z=0;z<cinfo->columns;z++) | |
5887 { | |
5888 LV_ITEM lvi; | |
5889 | |
5890 memset(&lvi, 0, sizeof(LV_ITEM)); | |
5891 | |
5892 lvi.iItem = index; | |
5893 lvi.iSubItem = z; | |
5894 lvi.mask = LVIF_TEXT; | |
5895 lvi.cchTextMax = 1023; | |
5896 lvi.pszText = text; | |
5897 | |
5898 if(ListView_GetItem(handle, &lvi)) | |
5899 { | |
5900 int width = ListView_GetStringWidth(handle, lvi.pszText); | |
5901 if(width > columns[z]) | |
5902 { | |
5903 if(z == 0) | |
5904 columns[z] = width + 20; | |
5905 else | |
5906 columns[z] = width; | |
5907 } | |
5908 } | |
5909 } | |
5910 | |
5911 index = ListView_GetNextItem(handle, index, LVNI_ALL); | |
5912 } | |
5913 | |
5914 /* Set the new sizes */ | |
5915 for(z=0;z<cinfo->columns;z++) | |
5916 ListView_SetColumnWidth(handle, z, columns[z] + 15); | |
5917 | |
5918 free(columns); | |
5919 free(text); | |
5920 } | |
5809 } | 5921 } |
5810 | 5922 |
5811 /* | 5923 /* |
5812 * Creates a rendering context widget (window) to be packed. | 5924 * Creates a rendering context widget (window) to be packed. |
5813 * Parameters: | 5925 * Parameters: |