| 820 static void listview_update_selection(UiListView *view) { |
820 static void listview_update_selection(UiListView *view) { |
| 821 free(view->selection.rows); |
821 free(view->selection.rows); |
| 822 view->selection.count = 0; |
822 view->selection.count = 0; |
| 823 view->selection.rows = NULL; |
823 view->selection.rows = NULL; |
| 824 |
824 |
| 825 CX_ARRAY_DECLARE(int, newselection); |
|
| 826 cx_array_initialize(newselection, 8); |
|
| 827 |
|
| 828 size_t nitems = g_list_model_get_n_items(G_LIST_MODEL(view->liststore)); |
825 size_t nitems = g_list_model_get_n_items(G_LIST_MODEL(view->liststore)); |
| |
826 int *newselection = calloc(nitems, sizeof(int)); |
| |
827 int selection_size = 0; |
| 829 |
828 |
| 830 for(size_t i=0;i<nitems;i++) { |
829 for(size_t i=0;i<nitems;i++) { |
| 831 if(gtk_selection_model_is_selected(view->selectionmodel, i)) { |
830 if(gtk_selection_model_is_selected(view->selectionmodel, i)) { |
| 832 int s = (int)i; |
831 int s = (int)i; |
| 833 cx_array_simple_add(newselection, s); |
832 newselection[selection_size++] = s; |
| 834 } |
833 } |
| 835 } |
834 } |
| 836 |
835 |
| 837 if(newselection_size > 0) { |
836 if(selection_size > 0) { |
| 838 view->selection.count = newselection_size; |
837 view->selection.count = selection_size; |
| 839 view->selection.rows = newselection; |
838 view->selection.rows = newselection; |
| 840 } else { |
839 } else { |
| 841 free(newselection); |
840 free(newselection); |
| 842 } |
841 } |
| 843 } |
842 } |
| 2232 sublist->varname, |
2231 sublist->varname, |
| 2233 UI_VAR_LIST); |
2232 UI_VAR_LIST); |
| 2234 uisublist.numitems = 0; |
2233 uisublist.numitems = 0; |
| 2235 uisublist.header = sublist->header ? strdup(sublist->header) : NULL; |
2234 uisublist.header = sublist->header ? strdup(sublist->header) : NULL; |
| 2236 uisublist.separator = sublist->separator; |
2235 uisublist.separator = sublist->separator; |
| 2237 uisublist.widgets = cxLinkedListCreateSimple(CX_STORE_POINTERS); |
2236 uisublist.widgets = cxLinkedListCreate(NULL, CX_STORE_POINTERS); |
| 2238 uisublist.listbox = uilistbox; |
2237 uisublist.listbox = uilistbox; |
| 2239 uisublist.userdata = sublist->userdata; |
2238 uisublist.userdata = sublist->userdata; |
| 2240 uisublist.index = cxListSize(sublists); |
2239 uisublist.index = cxListSize(sublists); |
| 2241 uisublist.startpos = 0; |
2240 uisublist.startpos = 0; |
| 2242 cxListAdd(sublists, &uisublist); |
2241 cxListAdd(sublists, &uisublist); |
| 2283 uilistbox->getvaluedata = args->getvaluedata; |
2282 uilistbox->getvaluedata = args->getvaluedata; |
| 2284 uilistbox->onactivate = args->onactivate; |
2283 uilistbox->onactivate = args->onactivate; |
| 2285 uilistbox->onactivatedata = args->onactivatedata; |
2284 uilistbox->onactivatedata = args->onactivatedata; |
| 2286 uilistbox->onbuttonclick = args->onbuttonclick; |
2285 uilistbox->onbuttonclick = args->onbuttonclick; |
| 2287 uilistbox->onbuttonclickdata = args->onbuttonclickdata; |
2286 uilistbox->onbuttonclickdata = args->onbuttonclickdata; |
| 2288 uilistbox->sublists = cxArrayListCreateSimple(sizeof(UiListBoxSubList), 4); |
2287 uilistbox->sublists = cxArrayListCreate(NULL, sizeof(UiListBoxSubList), 4); |
| 2289 uilistbox->sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_destroy; |
2288 uilistbox->sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_destroy; |
| 2290 uilistbox->sublists->collection.destructor_data = obj; |
2289 uilistbox->sublists->collection.destructor_data = obj; |
| 2291 uilistbox->first_row = NULL; |
2290 uilistbox->first_row = NULL; |
| 2292 |
2291 |
| 2293 if(args->sublists) { |
2292 if(args->sublists) { |
| 2371 } |
2370 } |
| 2372 } |
2371 } |
| 2373 } |
2372 } |
| 2374 |
2373 |
| 2375 cxListFree(uilistbox->sublists); |
2374 cxListFree(uilistbox->sublists); |
| 2376 CxList *new_sublists = cxArrayListCreateSimple(sizeof(UiListBoxSubList), list->count(list)); |
2375 CxList *new_sublists = cxArrayListCreate(NULL, sizeof(UiListBoxSubList), list->count(list)); |
| 2377 uilistbox->sublists = new_sublists; |
2376 uilistbox->sublists = new_sublists; |
| 2378 |
2377 |
| 2379 UiSubList *sublist = list->first(list); |
2378 UiSubList *sublist = list->first(list); |
| 2380 while(sublist) { |
2379 while(sublist) { |
| 2381 add_sublist(uilistbox, new_sublists, sublist); |
2380 add_sublist(uilistbox, new_sublists, sublist); |