Mon, 01 Jun 2026 20:07:13 +0200
fix sourcelist dynamic update (Cocoa)
| make/xcode/toolkit/toolkit/main.m | file | annotate | diff | comparison | revisions | |
| ui/cocoa/list.m | file | annotate | diff | comparison | revisions |
--- a/make/xcode/toolkit/toolkit/main.m Sun May 31 14:09:31 2026 +0200 +++ b/make/xcode/toolkit/toolkit/main.m Mon Jun 01 20:07:13 2026 +0200 @@ -45,6 +45,8 @@ UiList *sidebar_list2; UiString *link; UiGeneric *webview; + + UiList *srclist; } MyDocument; MyDocument* create_doc(void) { @@ -83,6 +85,8 @@ doc->link = ui_string_new(ctx, "link"); doc->webview = ui_generic_new(ctx, "webview"); + doc->srclist = ui_list_new(ctx, "srclist"); + return doc; } @@ -145,6 +149,19 @@ printf("textfield changed\n"); } +static void init_sourcelist(MyDocument *doc) { + UiContext *ctx = ui_document_context(doc); + + UiSubList *sublist0 = calloc(1, sizeof(UiSubList)); + sublist0->header = "iCloud"; + sublist0->value = ui_list_new(ctx, NULL); + ui_list_append(sublist0->value, "Hello"); + + ui_list_append(doc->srclist, sublist0); + + ui_list_update(doc->srclist); +} + void application_startup(UiEvent *event, void *data) { UiObject *obj = ui_splitview_window("My Window", TRUE); //WindowData *wdata = ui_malloc(obj->ctx, sizeof(WindowData)); @@ -167,9 +184,11 @@ sublist[1].varname = NULL; sublist[1].userdata = NULL; ui_sidebar(obj) { - ui_sourcelist(obj, .fill = TRUE, .sublists = sublist, .numsublists = 2); + ui_sourcelist(obj, .fill = TRUE, .dynamic_sublist = doc->srclist); } + init_sourcelist(doc); + ui_left_panel0(obj) { ui_grid(obj, .margin_left = 10, .margin_right = 10, .columnspacing = 10, .rowspacing = 10, .fill = TRUE) {
--- a/ui/cocoa/list.m Sun May 31 14:09:31 2026 +0200 +++ b/ui/cocoa/list.m Mon Jun 01 20:07:13 2026 +0200 @@ -508,18 +508,37 @@ [_sections removeAllObjects]; - CxIterator i = cxListIterator(_sublists); - int index = 0; - int rownum = 0; - cx_foreach(UiSubList *, sl, i) { - UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl]; - section.sublistIndex = index; - section.rownum = rownum; - section.sublistStartRow = rownum; - [section update:-1]; - [_sections addObject:section]; - index++; - rownum += 1 + section.items.count; + if(_sublists) { + CxIterator i = cxListIterator(_sublists); + int index = 0; + int rownum = 0; + cx_foreach(UiSubList *, sl, i) { + UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl]; + section.sublistIndex = index; + section.rownum = rownum; + section.sublistStartRow = rownum; + [section update:-1]; + [_sections addObject:section]; + index++; + rownum += 1 + section.items.count; + } + } else if (_dynamic_sublists) { + UiList *sublists = _dynamic_sublists->value; + UiSubList *sl = sublists->first(sublists); + int index = 0; + int rownum = 0; + while(sl) { + UiSourceListItem *section = [[UiSourceListItem alloc] init:self sublist:sl]; + section.sublistIndex = index; + section.rownum = rownum; + section.sublistStartRow = rownum; + [section update:-1]; + [_sections addObject:section]; + index++; + rownum += 1 + section.items.count; + + sl = sublists->next(sublists); + } } [_outlineView reloadData];