add srclist wrapper functions

Sat, 12 Jul 2025 17:03:06 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 12 Jul 2025 17:03:06 +0200
changeset 656
2f18119d176a
parent 655
453a782b0e22
child 657
02bcdbc34f31

add srclist wrapper functions

ui/common/wrapper.c file | annotate | diff | comparison | revisions
ui/common/wrapper.h file | annotate | diff | comparison | revisions
--- a/ui/common/wrapper.c	Sat Jul 12 16:29:55 2025 +0200
+++ b/ui/common/wrapper.c	Sat Jul 12 17:03:06 2025 +0200
@@ -27,7 +27,8 @@
  */
 
 #include "wrapper.h"
-#include "../ui/tree.h"
+#include "types.h"
+#include <cx/list.h>
 
 /* ---------------------------- UiObject ---------------------------- */
 
@@ -62,6 +63,77 @@
     list->iter = iter;
 }
 
+
+/* ------------------------------ UiSublist ------------------------------ */
+
+UiSubList* ui_sublist_new(void) {
+    UiSubList *sublist = malloc(sizeof(UiSubList));
+    memset(sublist, 0, sizeof(UiSubList));
+    return sublist;
+}
+
+void ui_sublist_set_value(UiSubList *sublist, UiList *value) {
+    sublist->value = value;
+}
+
+void ui_sublist_set_varname(UiSubList *sublist, const char *varname) {
+    free((void*)sublist->varname);
+    sublist->varname = strdup(varname);
+}
+
+void ui_sublist_set_header(UiSubList *sublist, const char *header) {
+    free((void*)sublist->header);
+    sublist->header = strdup(header);
+}
+
+void ui_sublist_set_separator(UiSubList *sublist, UiBool separator) {
+    sublist->separator = separator;
+}
+
+void ui_sublist_set_userdata(UiSubList *sublist, void *userdata) {
+    sublist->userdata = userdata;
+}
+
+void ui_sublist_free(UiSubList *sublist) {
+    free((void*)sublist->varname);
+    free((void*)sublist->header);
+    free(sublist);
+}
+
+
+/* -------------------- Source list (UiList<UiSublist>) -------------------- */
+
+UiList* ui_srclist_new(UiContext *ctx, const char *name) {
+    UiList *list = ui_list_new2(ctx, name, uic_ucx_list_init, NULL);
+    CxList *cxlist = list->data;
+    cxlist->collection.simple_destructor = (cx_destructor_func)ui_sublist_free;
+    return list;
+}
+
+void ui_srclist_add(UiList *list, UiSubList *item) {
+    ui_list_append(list, item);
+}
+
+void ui_srclist_insert(UiList *list, int index, UiSubList *item) {
+    CxList *cxlist = list->data;
+    cxListInsert(cxlist, index, item);
+}
+
+void ui_srclist_remove(UiList *list, int index) {
+    CxList *cxlist = list->data;
+    cxListRemove(cxlist, index);
+}
+
+void ui_srclist_clear(UiList *list) {
+    CxList *cxlist = list->data;
+    cxListClear(cxlist);
+}
+
+int ui_srclist_size(UiList *list) {
+    return ui_list_count(list);
+}
+
+
 /* ---------------------------- UiEvent ---------------------------- */
 
 UiObject* ui_event_get_obj(UiEvent *event) {
--- a/ui/common/wrapper.h	Sat Jul 12 16:29:55 2025 +0200
+++ b/ui/common/wrapper.h	Sat Jul 12 17:03:06 2025 +0200
@@ -30,6 +30,7 @@
 #define UIC_WRAPPER_H
 
 #include "../ui/toolkit.h"
+#include "../ui/tree.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -42,6 +43,21 @@
 UIEXPORT void* ui_list_get_data(UiList *list);
 UIEXPORT void* ui_list_get_iter(UiList *list);
 UIEXPORT void ui_list_set_iter(UiList *list, void *iter);
+
+UIEXPORT UiSubList* ui_sublist_new(void);
+UIEXPORT void ui_sublist_set_value(UiSubList *sublist, UiList *value);
+UIEXPORT void ui_sublist_set_varname(UiSubList *sublist, const char *varname);
+UIEXPORT void ui_sublist_set_header(UiSubList *sublist, const char *header);
+UIEXPORT void ui_sublist_set_separator(UiSubList *sublist, UiBool separator);
+UIEXPORT void ui_sublist_set_userdata(UiSubList *sublist, void *userdata);
+UIEXPORT void ui_sublist_free(UiSubList *sublist);
+
+UIEXPORT UiList* ui_srclist_new(UiContext *ctx, const char *name);
+UIEXPORT void ui_srclist_add(UiList *list, UiSubList *item);
+UIEXPORT void ui_srclist_insert(UiList *list, int index, UiSubList *item);
+UIEXPORT void ui_srclist_remove(UiList *list, int index);
+UIEXPORT void ui_srclist_clear(UiList *list);
+UIEXPORT int ui_srclist_size(UiList *list);
     
 UIEXPORT UiObject* ui_event_get_obj(UiEvent *event);
 UIEXPORT void* ui_event_get_document(UiEvent *event);

mercurial