rename tree.h to list.h

Sun, 07 Dec 2025 15:50:20 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 07 Dec 2025 15:50:20 +0100
changeset 971
0224108bd8c2
parent 970
954d4171a810
child 972
de69ed2c6961

rename tree.h to list.h

ui/cocoa/ListDataSource.h file | annotate | diff | comparison | revisions
ui/cocoa/list.h file | annotate | diff | comparison | revisions
ui/common/args.h file | annotate | diff | comparison | revisions
ui/common/types.c file | annotate | diff | comparison | revisions
ui/common/wrapper.h file | annotate | diff | comparison | revisions
ui/gtk/list.h file | annotate | diff | comparison | revisions
ui/motif/list.h file | annotate | diff | comparison | revisions
ui/qt/list.h file | annotate | diff | comparison | revisions
ui/qt/model.h file | annotate | diff | comparison | revisions
ui/ui/list.h file | annotate | diff | comparison | revisions
ui/ui/tree.h file | annotate | diff | comparison | revisions
ui/ui/ui.h file | annotate | diff | comparison | revisions
ui/win32/list.h file | annotate | diff | comparison | revisions
ui/winui/list.h file | annotate | diff | comparison | revisions
ui/winui/table.h file | annotate | diff | comparison | revisions
ui/winui/winui.vcxproj file | annotate | diff | comparison | revisions
ui/winui/winui.vcxproj.filters file | annotate | diff | comparison | revisions
--- a/ui/cocoa/ListDataSource.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/cocoa/ListDataSource.h	Sun Dec 07 15:50:20 2025 +0100
@@ -27,7 +27,7 @@
  */
 
 #import "toolkit.h"
-#import "../ui/tree.h"
+#import "../ui/list.h"
 
 @interface ListDataSource : NSObject <NSTableViewDataSource>
 
--- a/ui/cocoa/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/cocoa/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -28,7 +28,7 @@
 
 #import "toolkit.h"
 #import "Container.h"
-#import "../ui/tree.h"
+#import "../ui/list.h"
 
 #import "ListDataSource.h"
 
--- a/ui/common/args.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/common/args.h	Sun Dec 07 15:50:20 2025 +0100
@@ -36,7 +36,7 @@
 #include "../ui/entry.h"
 #include "../ui/menu.h"
 #include "../ui/toolbar.h"
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "../ui/text.h"
 #include "../ui/webview.h"
 #include "../ui/widget.h"
--- a/ui/common/types.c	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/common/types.c	Sun Dec 07 15:50:20 2025 +0100
@@ -33,7 +33,7 @@
 
 #include <cx/list.h>
 #include <cx/array_list.h>
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "types.h"
 #include "context.h"
 #include "../ui/image.h"
--- a/ui/common/wrapper.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/common/wrapper.h	Sun Dec 07 15:50:20 2025 +0100
@@ -30,7 +30,7 @@
 #define UIC_WRAPPER_H
 
 #include "../ui/toolkit.h"
-#include "../ui/tree.h"
+#include "../ui/list.h"
 
 #ifdef __cplusplus
 extern "C" {
--- a/ui/gtk/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/gtk/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -26,10 +26,10 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef TREE_H
-#define	TREE_H
+#ifndef LIST_H
+#define	LIST_H
 
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "toolkit.h"
 
 #include <cx/array_list.h>
@@ -209,5 +209,5 @@
 }
 #endif
 
-#endif	/* TREE_H */
+#endif	/* LIST_H */
 
--- a/ui/motif/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/motif/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -30,7 +30,7 @@
 #define	LIST_H
 
 #include "toolkit.h"
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "../common/context.h"
 
 #ifdef	__cplusplus
--- a/ui/qt/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/qt/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -29,7 +29,7 @@
 #ifndef TREE_H
 #define	TREE_H
 
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "model.h"
 
 #include <QTableView>
--- a/ui/qt/model.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/qt/model.h	Sun Dec 07 15:50:20 2025 +0100
@@ -30,7 +30,7 @@
 #define	MODEL_H
 
 #include "toolkit.h"
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "../common/context.h"
 #include <QListView>
 #include <QTreeView>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/ui/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -0,0 +1,365 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2017 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UI_TREE_H
+#define	UI_TREE_H
+
+#include "toolkit.h"
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+typedef struct UiModel          UiModel;
+typedef struct UiListCallbacks  UiListCallbacks;
+typedef struct UiListDnd        UiListDnd;
+
+typedef struct UiListArgs       UiListArgs;
+typedef struct UiSourceListArgs UiSourceListArgs;
+
+typedef struct UiSubList        UiSubList;
+typedef struct UiSubListItem    UiSubListItem;
+
+typedef enum UiModelType {
+    UI_STRING = 0,
+    UI_STRING_FREE,
+    UI_INTEGER,
+    UI_ICON,
+    UI_ICON_TEXT,
+    UI_ICON_TEXT_FREE,
+    UI_STRING_EDITABLE,
+    UI_BOOL_EDITABLE
+} UiModelType;
+
+typedef struct UiCellValue {
+    union {
+        const char *string;
+        int64_t i;
+        UiBool b;
+    };
+    UiModelType type;
+} UiCellValue;
+
+typedef UiBool (*ui_list_savefunc)(UiList *list, int row, int col, UiCellValue *value, void *userdata);
+
+typedef void (*ui_model_update_func)(UiModel *model, void *userdata, int insert_index, int delete_index);
+
+typedef struct UiModelChangeObserver UiModelChangeObserver;
+struct UiModelChangeObserver {
+    ui_model_update_func update;
+    void *userdata;
+    UiModelChangeObserver *next;
+};
+
+struct UiModel {
+    UiContext *ctx;
+    
+    /*
+     * number of columns
+     */
+    int columns;
+    
+    /*
+     * current allocation size (internal)
+     */
+    int alloc;
+    
+    /*
+     * array of column types
+     * array length is the number of columns
+     */
+    UiModelType *types;
+    
+    /*
+     * array of column titles
+     * array length is the number of columns
+     */
+    char **titles;
+    
+    /*
+     * array of column size hints
+     */
+    int *columnsize;
+    
+    /*
+     * Model change observers, that will be called when
+     * columns are added or removed
+     */
+    UiModelChangeObserver *observer;
+    
+    /*
+     * reference counter
+     */
+    int ref;
+};
+
+struct UiListCallbacks {
+    /*
+     * selection callback
+     */
+    ui_callback activate;
+    
+    /*
+     * cursor callback
+     */
+    ui_callback selection;
+    
+    /*
+     * userdata for all callbacks
+     */
+    void *userdata;
+};
+
+struct UiListArgs {
+    UiBool fill;
+    UiBool hexpand;
+    UiBool vexpand;
+    UiBool hfill;
+    UiBool vfill;
+    UiBool override_defaults;
+    int margin;
+    int margin_left;
+    int margin_right;
+    int margin_top;
+    int margin_bottom;
+    int colspan;
+    int rowspan;
+    int width;
+    int height;
+
+    const char *name;
+    const char *style_class;
+    UiList *list;
+    const char* varname;
+    UiModel *model;
+    char **static_elements;
+    size_t static_nelm;
+    ui_getvaluefunc getvalue;
+    ui_getvaluefunc2 getvalue2;
+    void *getvalue2data;
+    ui_getstylefunc getstyle;
+    void *getstyledata;
+    ui_callback onactivate;
+    void *onactivatedata;
+    ui_callback onselection;
+    void *onselectiondata;
+    ui_callback ondragstart;
+    void *ondragstartdata;
+    ui_callback ondragcomplete;
+    void *ondragcompletedata;
+    ui_callback ondrop;
+    void *ondropdata;
+    UiBool multiselection;
+    UiMenuBuilder *contextmenu;
+    ui_list_savefunc onsave;
+    void *onsavedata;
+    
+    const int *states;
+};
+
+typedef void (*ui_sublist_getvalue_func)(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
+
+struct UiSubList {
+    UiList *value;
+    const char *varname;
+    const char *header;
+    UiBool separator;
+    void *userdata;
+};
+
+typedef struct UiSubListEventData {
+    UiList *list;
+    int    sublist_index;
+    int    row_index;
+    void   *row_data;
+    void   *sublist_userdata;
+    void   *event_data;
+} UiSubListEventData;
+
+/*
+ * list item members must be filled by the sublist getvalue func
+ * all members must be allocated (by malloc, strdup, ...) the pointer
+ * will be passed to free
+ */
+struct UiSubListItem {
+    char          *icon;
+    char          *label;
+    char          *button_icon;
+    char          *button_label;
+    UiMenuBuilder *button_menu;
+    char          *badge;
+    void          *eventdata;
+};
+
+struct UiSourceListArgs {
+    UiBool fill;
+    UiBool hexpand;
+    UiBool vexpand;
+    UiBool hfill;
+    UiBool vfill;
+    UiBool override_defaults;
+    int margin;
+    int margin_left;
+    int margin_right;
+    int margin_top;
+    int margin_bottom;
+    int colspan;
+    int rowspan;
+    int width;
+    int height;
+    const char *name;
+    const char *style_class;
+    
+    const int *states;
+    
+    /*
+     * static list of sublists
+     * a sublist must have a varname or a value
+     * 
+     * the last entry in the list must contain all NULL values or numsublists
+     * must contain the number of sublists
+     * 
+     * sublists can be NULL, in which case sublists are dynamically loaded
+     * from dynamic_sublist/varname
+     */
+    UiSubList *sublists;
+    /*
+     * optional number of sublists
+     * if the value is 0, it is assumed, that sublists is null-terminated
+     * (last item contains only NULL values)
+     */
+    size_t numsublists;
+    
+    /*
+     * list value, that contains UiSubList* elements
+     */
+    UiList *dynamic_sublist;
+    
+    /*
+     * load sublists dynamically from a variable with the specified name
+     */
+    const char *varname;
+    
+    
+    /*
+     * callback for each list item, that should fill all necessary
+     * UiSubListItem fields
+     */
+    ui_sublist_getvalue_func getvalue;
+    
+    /*
+     * getvalue_func userdata
+     */
+    void *getvaluedata;
+    
+    /*
+     * is a sublist header a selectable item
+     */
+    UiBool header_is_item;
+    
+    /*
+     * activated when a list item is selected
+     */
+    ui_callback onactivate;
+    void        *onactivatedata;
+    
+    /*
+     * activated, when the additional list item button is clicked
+     */
+    ui_callback onbuttonclick;
+    void        *onbuttonclickdata;
+    
+    UiMenuBuilder *contextmenu;
+};
+
+#define UI_SUBLIST(...) (UiSubList){ __VA_ARGS__ }
+#define UI_SUBLISTS(...) (UiSubList[]){ __VA_ARGS__, (UiSubList){NULL,NULL,NULL,0} }
+
+
+/*
+ * Creates an UiModel, that specifies columns for a table widget.
+ *
+ * For each column a column type (UiModelType) and a title string
+ * (char*) must be specified. The column list must be terminated
+ * with -1.
+ *
+ * UiModel *model = ui_model(ctx, UI_STRING, "Column 1", UI_STRING, "Column 2", -1);
+ */
+UIEXPORT UiModel* ui_model(UiContext *ctx, ...);
+UIEXPORT UiModel* ui_model_new(UiContext *ctx);
+UIEXPORT void ui_model_add_column(UiModel *model, UiModelType type, const char *title, int width);
+UIEXPORT UiModel* ui_model_copy(UiContext *ctx, UiModel* model);
+UIEXPORT void ui_model_ref(UiModel *model);
+UIEXPORT void ui_model_unref(UiModel *model);
+UIEXPORT void ui_model_add_observer(UiModel *model, ui_model_update_func update, void *data);
+UIEXPORT void ui_model_remove_observer(UiModel *model, void *data);
+UIEXPORT void ui_model_free(UiModel *mi);
+
+#define ui_listview(obj, ...) ui_listview_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_table(obj, ...) ui_table_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_dropdown(obj, ...) ui_dropdown_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, &(UiSourceListArgs) { __VA_ARGS__ } )
+
+UIEXPORT UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_dropdown_create(UiObject *obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject *obj, UiListArgs *args);
+
+UIEXPORT void ui_listview_select(UIWIDGET listview, int index);
+UIEXPORT void ui_dropdown_select(UIWIDGET dropdown, int index);
+
+UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args);
+
+UIEXPORT void ui_sublist_item_set_icon(UiSubListItem *item, const char *icon);
+UIEXPORT void ui_sublist_item_set_label(UiSubListItem *item, const char *label);
+UIEXPORT void ui_sublist_item_set_button_icon(UiSubListItem *item, const char *button_icon);
+UIEXPORT void ui_sublist_item_set_button_label(UiSubListItem *item, const char *button_label);
+UIEXPORT void ui_sublist_item_set_button_menu(UiSubListItem *item, UiMenuBuilder *menu);
+UIEXPORT void ui_sublist_item_set_badge(UiSubListItem *item, const char *badge);
+UIEXPORT void ui_sublist_item_set_eventdata(UiSubListItem *item, void *eventdata);
+
+
+
+/*
+ * Only relevant for some language bindings
+ */
+typedef void(*ui_sourcelist_update_func)(void);
+
+/*
+ * The sourcelist update callback is called after any source list
+ * sublist update is completed
+ */
+UIEXPORT void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* UI_TREE_H */
+
--- a/ui/ui/tree.h	Sun Dec 07 15:47:53 2025 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
- *
- * Copyright 2017 Olaf Wintermann. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- *   1. Redistributions of source code must retain the above copyright
- *      notice, this list of conditions and the following disclaimer.
- *
- *   2. Redistributions in binary form must reproduce the above copyright
- *      notice, this list of conditions and the following disclaimer in the
- *      documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef UI_TREE_H
-#define	UI_TREE_H
-
-#include "toolkit.h"
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-typedef struct UiModel          UiModel;
-typedef struct UiListCallbacks  UiListCallbacks;
-typedef struct UiListDnd        UiListDnd;
-
-typedef struct UiListArgs       UiListArgs;
-typedef struct UiSourceListArgs UiSourceListArgs;
-
-typedef struct UiSubList        UiSubList;
-typedef struct UiSubListItem    UiSubListItem;
-
-typedef enum UiModelType {
-    UI_STRING = 0,
-    UI_STRING_FREE,
-    UI_INTEGER,
-    UI_ICON,
-    UI_ICON_TEXT,
-    UI_ICON_TEXT_FREE,
-    UI_STRING_EDITABLE,
-    UI_BOOL_EDITABLE
-} UiModelType;
-
-typedef struct UiCellValue {
-    union {
-        const char *string;
-        int64_t i;
-        UiBool b;
-    };
-    UiModelType type;
-} UiCellValue;
-
-typedef UiBool (*ui_list_savefunc)(UiList *list, int row, int col, UiCellValue *value, void *userdata);
-
-typedef void (*ui_model_update_func)(UiModel *model, void *userdata, int insert_index, int delete_index);
-
-typedef struct UiModelChangeObserver UiModelChangeObserver;
-struct UiModelChangeObserver {
-    ui_model_update_func update;
-    void *userdata;
-    UiModelChangeObserver *next;
-};
-
-struct UiModel {
-    UiContext *ctx;
-    
-    /*
-     * number of columns
-     */
-    int columns;
-    
-    /*
-     * current allocation size (internal)
-     */
-    int alloc;
-    
-    /*
-     * array of column types
-     * array length is the number of columns
-     */
-    UiModelType *types;
-    
-    /*
-     * array of column titles
-     * array length is the number of columns
-     */
-    char **titles;
-    
-    /*
-     * array of column size hints
-     */
-    int *columnsize;
-    
-    /*
-     * Model change observers, that will be called when
-     * columns are added or removed
-     */
-    UiModelChangeObserver *observer;
-    
-    /*
-     * reference counter
-     */
-    int ref;
-};
-
-struct UiListCallbacks {
-    /*
-     * selection callback
-     */
-    ui_callback activate;
-    
-    /*
-     * cursor callback
-     */
-    ui_callback selection;
-    
-    /*
-     * userdata for all callbacks
-     */
-    void *userdata;
-};
-
-struct UiListArgs {
-    UiBool fill;
-    UiBool hexpand;
-    UiBool vexpand;
-    UiBool hfill;
-    UiBool vfill;
-    UiBool override_defaults;
-    int margin;
-    int margin_left;
-    int margin_right;
-    int margin_top;
-    int margin_bottom;
-    int colspan;
-    int rowspan;
-    int width;
-    int height;
-
-    const char *name;
-    const char *style_class;
-    UiList *list;
-    const char* varname;
-    UiModel *model;
-    char **static_elements;
-    size_t static_nelm;
-    ui_getvaluefunc getvalue;
-    ui_getvaluefunc2 getvalue2;
-    void *getvalue2data;
-    ui_getstylefunc getstyle;
-    void *getstyledata;
-    ui_callback onactivate;
-    void *onactivatedata;
-    ui_callback onselection;
-    void *onselectiondata;
-    ui_callback ondragstart;
-    void *ondragstartdata;
-    ui_callback ondragcomplete;
-    void *ondragcompletedata;
-    ui_callback ondrop;
-    void *ondropdata;
-    UiBool multiselection;
-    UiMenuBuilder *contextmenu;
-    ui_list_savefunc onsave;
-    void *onsavedata;
-    
-    const int *states;
-};
-
-typedef void (*ui_sublist_getvalue_func)(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
-
-struct UiSubList {
-    UiList *value;
-    const char *varname;
-    const char *header;
-    UiBool separator;
-    void *userdata;
-};
-
-typedef struct UiSubListEventData {
-    UiList *list;
-    int    sublist_index;
-    int    row_index;
-    void   *row_data;
-    void   *sublist_userdata;
-    void   *event_data;
-} UiSubListEventData;
-
-/*
- * list item members must be filled by the sublist getvalue func
- * all members must be allocated (by malloc, strdup, ...) the pointer
- * will be passed to free
- */
-struct UiSubListItem {
-    char          *icon;
-    char          *label;
-    char          *button_icon;
-    char          *button_label;
-    UiMenuBuilder *button_menu;
-    char          *badge;
-    void          *eventdata;
-};
-
-struct UiSourceListArgs {
-    UiBool fill;
-    UiBool hexpand;
-    UiBool vexpand;
-    UiBool hfill;
-    UiBool vfill;
-    UiBool override_defaults;
-    int margin;
-    int margin_left;
-    int margin_right;
-    int margin_top;
-    int margin_bottom;
-    int colspan;
-    int rowspan;
-    int width;
-    int height;
-    const char *name;
-    const char *style_class;
-    
-    const int *states;
-    
-    /*
-     * static list of sublists
-     * a sublist must have a varname or a value
-     * 
-     * the last entry in the list must contain all NULL values or numsublists
-     * must contain the number of sublists
-     * 
-     * sublists can be NULL, in which case sublists are dynamically loaded
-     * from dynamic_sublist/varname
-     */
-    UiSubList *sublists;
-    /*
-     * optional number of sublists
-     * if the value is 0, it is assumed, that sublists is null-terminated
-     * (last item contains only NULL values)
-     */
-    size_t numsublists;
-    
-    /*
-     * list value, that contains UiSubList* elements
-     */
-    UiList *dynamic_sublist;
-    
-    /*
-     * load sublists dynamically from a variable with the specified name
-     */
-    const char *varname;
-    
-    
-    /*
-     * callback for each list item, that should fill all necessary
-     * UiSubListItem fields
-     */
-    ui_sublist_getvalue_func getvalue;
-    
-    /*
-     * getvalue_func userdata
-     */
-    void *getvaluedata;
-    
-    /*
-     * is a sublist header a selectable item
-     */
-    UiBool header_is_item;
-    
-    /*
-     * activated when a list item is selected
-     */
-    ui_callback onactivate;
-    void        *onactivatedata;
-    
-    /*
-     * activated, when the additional list item button is clicked
-     */
-    ui_callback onbuttonclick;
-    void        *onbuttonclickdata;
-    
-    UiMenuBuilder *contextmenu;
-};
-
-#define UI_SUBLIST(...) (UiSubList){ __VA_ARGS__ }
-#define UI_SUBLISTS(...) (UiSubList[]){ __VA_ARGS__, (UiSubList){NULL,NULL,NULL,0} }
-
-
-/*
- * Creates an UiModel, that specifies columns for a table widget.
- *
- * For each column a column type (UiModelType) and a title string
- * (char*) must be specified. The column list must be terminated
- * with -1.
- *
- * UiModel *model = ui_model(ctx, UI_STRING, "Column 1", UI_STRING, "Column 2", -1);
- */
-UIEXPORT UiModel* ui_model(UiContext *ctx, ...);
-UIEXPORT UiModel* ui_model_new(UiContext *ctx);
-UIEXPORT void ui_model_add_column(UiModel *model, UiModelType type, const char *title, int width);
-UIEXPORT UiModel* ui_model_copy(UiContext *ctx, UiModel* model);
-UIEXPORT void ui_model_ref(UiModel *model);
-UIEXPORT void ui_model_unref(UiModel *model);
-UIEXPORT void ui_model_add_observer(UiModel *model, ui_model_update_func update, void *data);
-UIEXPORT void ui_model_remove_observer(UiModel *model, void *data);
-UIEXPORT void ui_model_free(UiModel *mi);
-
-#define ui_listview(obj, ...) ui_listview_create(obj, &(UiListArgs) { __VA_ARGS__ } )
-#define ui_table(obj, ...) ui_table_create(obj, &(UiListArgs) { __VA_ARGS__ } )
-#define ui_dropdown(obj, ...) ui_dropdown_create(obj, &(UiListArgs) { __VA_ARGS__ } )
-#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, &(UiListArgs) { __VA_ARGS__ } )
-#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, &(UiSourceListArgs) { __VA_ARGS__ } )
-
-UIEXPORT UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_dropdown_create(UiObject *obj, UiListArgs *args);
-UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject *obj, UiListArgs *args);
-
-UIEXPORT void ui_listview_select(UIWIDGET listview, int index);
-UIEXPORT void ui_dropdown_select(UIWIDGET dropdown, int index);
-
-UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args);
-
-UIEXPORT void ui_sublist_item_set_icon(UiSubListItem *item, const char *icon);
-UIEXPORT void ui_sublist_item_set_label(UiSubListItem *item, const char *label);
-UIEXPORT void ui_sublist_item_set_button_icon(UiSubListItem *item, const char *button_icon);
-UIEXPORT void ui_sublist_item_set_button_label(UiSubListItem *item, const char *button_label);
-UIEXPORT void ui_sublist_item_set_button_menu(UiSubListItem *item, UiMenuBuilder *menu);
-UIEXPORT void ui_sublist_item_set_badge(UiSubListItem *item, const char *badge);
-UIEXPORT void ui_sublist_item_set_eventdata(UiSubListItem *item, void *eventdata);
-
-
-
-/*
- * Only relevant for some language bindings
- */
-typedef void(*ui_sourcelist_update_func)(void);
-
-/*
- * The sourcelist update callback is called after any source list
- * sublist update is completed
- */
-UIEXPORT void ui_sourcelist_set_update_callback(ui_sourcelist_update_func cb);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* UI_TREE_H */
-
--- a/ui/ui/ui.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/ui/ui.h	Sun Dec 07 15:50:20 2025 +0100
@@ -38,7 +38,7 @@
 #include "button.h"
 #include "text.h"
 #include "properties.h"
-#include "tree.h"
+#include "list.h"
 #include "graphics.h"
 #include "entry.h"
 #include "range.h"
--- a/ui/win32/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/win32/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -30,7 +30,7 @@
 #define LIST_H
 
 #include "toolkit.h"
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "win32.h"
 #include <commctrl.h>
 
--- a/ui/winui/list.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/winui/list.h	Sun Dec 07 15:50:20 2025 +0100
@@ -28,7 +28,7 @@
 
 #pragma once
 
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "toolkit.h"
 
 #include "../ui/container.h"
--- a/ui/winui/table.h	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/winui/table.h	Sun Dec 07 15:50:20 2025 +0100
@@ -28,7 +28,7 @@
 
 #pragma once
 
-#include "../ui/tree.h"
+#include "../ui/list.h"
 #include "toolkit.h"
 #include "dnd.h"
 
--- a/ui/winui/winui.vcxproj	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/winui/winui.vcxproj	Sun Dec 07 15:50:20 2025 +0100
@@ -142,7 +142,7 @@
     <ClInclude Include="..\ui\text.h" />
     <ClInclude Include="..\ui\toolbar.h" />
     <ClInclude Include="..\ui\toolkit.h" />
-    <ClInclude Include="..\ui\tree.h" />
+    <ClInclude Include="..\ui\list.h" />
     <ClInclude Include="..\ui\ui.h" />
     <ClInclude Include="..\ui\window.h" />
     <ClInclude Include="appmenu.h" />
--- a/ui/winui/winui.vcxproj.filters	Sun Dec 07 15:47:53 2025 +0100
+++ b/ui/winui/winui.vcxproj.filters	Sun Dec 07 15:50:20 2025 +0100
@@ -108,7 +108,7 @@
     <ClInclude Include="..\ui\toolkit.h">
       <Filter>public</Filter>
     </ClInclude>
-    <ClInclude Include="..\ui\tree.h">
+    <ClInclude Include="..\ui\list.h">
       <Filter>public</Filter>
     </ClInclude>
     <ClInclude Include="..\ui\ui.h">

mercurial