ui/win32/list.c

changeset 918
7d3dd5aacfda
parent 917
ca3918f9c96b
child 919
d9018dcd4e2d
equal deleted inserted replaced
917:ca3918f9c96b 918:7d3dd5aacfda
52 return NULL; 52 return NULL;
53 } 53 }
54 54
55 55
56 static UiListView* create_listview_widget(UiObject *obj, HWND hwnd, UiListArgs *args, UiBool table) { 56 static UiListView* create_listview_widget(UiObject *obj, HWND hwnd, UiListArgs *args, UiBool table) {
57 UiListView *listview = w32_widget_create(&listview_widget_class, hwnd, sizeof(UiWidget)); 57 UiListView *listview = w32_widget_create(&listview_widget_class, hwnd, sizeof(UiListView));
58 listview->widget.hwnd = hwnd; 58 listview->widget.hwnd = hwnd;
59 listview->preferred_width = args->width ? args->width : 300; 59 listview->preferred_width = args->width ? args->width : 300;
60 listview->preferred_height = args->height ? args->height : 300; 60 listview->preferred_height = args->height ? args->height : 300;
61 listview->onactivate = args->onactivate; 61 listview->onactivate = args->onactivate;
62 listview->onactivatedata = args->onactivatedata; 62 listview->onactivatedata = args->onactivatedata;
92 HINSTANCE hInstance = GetModuleHandle(NULL); 92 HINSTANCE hInstance = GetModuleHandle(NULL);
93 UiContainerPrivate *container = ui_obj_container(obj); 93 UiContainerPrivate *container = ui_obj_container(obj);
94 HWND parent = ui_container_get_parent(container); 94 HWND parent = ui_container_get_parent(container);
95 UiLayout layout = UI_ARGS2LAYOUT(args); 95 UiLayout layout = UI_ARGS2LAYOUT(args);
96 96
97 int type = table ? LVS_REPORT : LVS_LIST;
98 HWND hwnd = CreateWindowEx( 97 HWND hwnd = CreateWindowEx(
99 WS_EX_CLIENTEDGE, 98 WS_EX_CLIENTEDGE,
100 WC_LISTVIEW, 99 WC_LISTVIEW,
101 "", 100 "",
102 WS_CHILD | WS_VISIBLE | LVS_REPORT, 101 WS_CHILD | WS_VISIBLE | LVS_REPORT,
103 0, 0, 100, 100, 102 0, 0, 100, 100,
104 parent, 103 parent,
105 (HMENU)1, 104 (HMENU)1337,
106 hInstance, 105 hInstance,
107 NULL); 106 NULL);
108 ui_win32_set_ui_font(hwnd); 107 ui_win32_set_ui_font(hwnd);
109 108
110 ListView_SetExtendedListViewStyle( 109 ListView_SetExtendedListViewStyle(
129 ui_model_add_column(obj->ctx, model, UI_STRING, "Test", -1); 128 ui_model_add_column(obj->ctx, model, UI_STRING, "Test", -1);
130 listview->model = model; 129 listview->model = model;
131 numcolumns = 1; 130 numcolumns = 1;
132 } 131 }
133 132
134 ///*
135 UiModel *model = listview->model; 133 UiModel *model = listview->model;
136 for (int i=0;i<numcolumns;i++) { 134 for (int i=0;i<numcolumns;i++) {
137 LVCOLUMN col; 135 LVCOLUMN col;
138 UiModelType type = model->types[i]; 136 UiModelType type = model->types[i];
139 char *title = model->titles[i]; 137 char *title = model->titles[i];
176 size.width = listview->preferred_width; 174 size.width = listview->preferred_width;
177 size.height = listview->preferred_height; 175 size.height = listview->preferred_height;
178 return size; 176 return size;
179 } 177 }
180 178
179 static void insert_item(UiList *list, int row, void *elm) {
180 UiListView *listview = (UiListView*)list->obj;
181 HWND hwnd = listview->widget.hwnd;
182 UiModel *model = listview->model;
183
184 LVITEM item;
185 item.mask = LVIF_TEXT;
186 item.iItem = row;
187 item.iSubItem = 0;
188 int idx = -1;
189 for (int col=0;col<model->columns;col++) {
190 UiBool freeResult = FALSE;
191 char *str = listview->getvalue(list, elm, row, col, listview->getvaluedata, &freeResult);
192 if (col == 0) {
193 item.pszText = str;
194 idx = ListView_InsertItem(hwnd, &item);
195 } else {
196 ListView_SetItemText(hwnd, idx, col, str);
197 }
198
199 if (freeResult) {
200 free(str);
201 }
202 }
203 }
204
181 void ui_listview_update(UiList *list, int row) { 205 void ui_listview_update(UiList *list, int row) {
182 UiListView *listview = (UiListView*)list->obj; 206 UiListView *listview = (UiListView*)list->obj;
183 HWND hwnd = listview->widget.hwnd; 207 HWND hwnd = listview->widget.hwnd;
184 UiModel *model = listview->model; 208 UiModel *model = listview->model;
185 if (row < 0) { 209 if (row < 0) {
186 ListView_DeleteAllItems(hwnd); 210 ListView_DeleteAllItems(hwnd);
187 void *elm = list->first(list); 211 void *elm = list->first(list);
188 int row = 0; 212 int row = 0;
189 while (elm) { 213 while (elm) {
190 LVITEM item; 214 insert_item(list, row, elm);
191 item.mask = LVIF_TEXT;
192 item.iItem = row;
193 item.iSubItem = 0;
194 int idx = -1;
195 for (int col=0;col<model->columns;col++) {
196 UiBool freeResult = FALSE;
197 char *str = listview->getvalue(list, elm, row, col, listview->getvaluedata, &freeResult);
198 if (col == 0) {
199 item.pszText = str;
200 idx = ListView_InsertItem(hwnd, &item);
201 } else {
202 ListView_SetItemText(hwnd, idx, col, str);
203 }
204
205 if (freeResult) {
206 free(str);
207 }
208 }
209
210 elm = list->next(list); 215 elm = list->next(list);
211 row++; 216 row++;
212 } 217 }
213
214 for (int i=0;i<model->columns;i++) {
215 ListView_SetColumnWidth(hwnd, i, LVSCW_AUTOSIZE);
216 }
217 } else { 218 } else {
218 // TODO 219 ListView_DeleteItem(hwnd, row);
220 void *elm = list->get(list, row);
221 insert_item(list, row, elm);
222 }
223
224 for (int i=0;i<model->columns;i++) {
225 ListView_SetColumnWidth(hwnd, i, LVSCW_AUTOSIZE);
219 } 226 }
220 } 227 }
221 228
222 UiListSelection ui_listview_getselection(UiList *list) { 229 UiListSelection ui_listview_getselection(UiList *list) {
223 UiListSelection sel = { 0, NULL }; 230 UiListSelection sel = { 0, NULL };

mercurial