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: