--- a/application/main.c Sun Apr 06 08:50:27 2025 +0200 +++ b/application/main.c Sun Apr 06 13:28:35 2025 +0200 @@ -37,7 +37,149 @@ #include "cx/string.h" #include "cx/list.h" -#if !defined(UI_COCOA) && !defined(UI_MOTIF) && !defined(UI_WIN32) && !defined(UI_QT) +#define UI_TEST + +#ifdef UI_TEST + +#define STATE_DOC 10 +#define STATE_SUB 100 + +typedef struct ToplevelDoc { + UiContext *ctx; + + UiList *doclist; + + void *current; +} ToplevelDoc; + +typedef struct Document { + UiContext *ctx; + + UiString *name; + char *name_str; + + UiInteger *i; + UiString *s; + UiText *t; + UiList *ls1; + UiList *ls2; +} Document; + + + +Document* create_doc(int i) { + Document *doc = ui_document_new(sizeof(Document)); + doc->ctx = ui_document_context(doc); + doc->name = ui_string_new(doc->ctx, "name"); + doc->i = ui_int_new(doc->ctx, "int"); + doc->s = ui_string_new(doc->ctx, "string"); + doc->t = ui_text_new(doc->ctx, "text"); + doc->ls1 = ui_list_new(doc->ctx, "list1"); + doc->ls2 = ui_list_new(doc->ctx, "list2"); + + ui_list_append(doc->ls1, "Hello"); + ui_list_append(doc->ls1, "World"); + ui_list_append(doc->ls1, "Test"); + + for(int x=0;x<(i+1)*2;x++) { + char buf[32]; + snprintf(buf, 32, "%d", x); + ui_list_append(doc->ls2, strdup(buf)); + } + + return doc; +} + +ToplevelDoc* create_toplevel() { + ToplevelDoc *doc = ui_document_new(sizeof(ToplevelDoc)); + doc->ctx = ui_document_context(doc); + doc->doclist = ui_list_new(doc->ctx, "doclist"); + + for(int i=0;i<3;i++) { + Document *sub = create_doc(i); + char buf[32]; + snprintf(buf, 32, "%d", i); + ui_set(sub->name, buf); + sub->name_str = strdup(buf); + ui_list_append(doc->doclist, sub); + } + + return doc; +} + +static void* doclist_getvalue(void *elm, int col) { + Document *doc = elm; + return doc->name_str; +} + +static void action_document_selected(UiEvent *event, void *userdata) { + Document *sub = event->eventdata; + ToplevelDoc *doc = event->document; + if(doc->current) { + ui_detach_document2(doc->ctx, doc->current); + } + ui_attach_document(doc->ctx, sub); + doc->current = sub; +} + +void application_startup(UiEvent *event, void *data) { + UiObject *obj = ui_window("Test", NULL); + + ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10) { + ui_hbox(obj, .colspan = 2, .spacing = 10) { + ui_combobox(obj, .varname = "doclist", .getvalue = doclist_getvalue, .onactivate = action_document_selected); + ui_textfield(obj, .varname = "name"); + ui_button(obj, .colspan = 4, .label = "Test Groups", .groups = UI_GROUPS(STATE_DOC, STATE_SUB)); + } + ui_newline(obj); + + ui_rlabel(obj, .label = "Integer", .vfill = TRUE); + ui_togglebutton(obj, .label = "Test", .varname = "int", .hfill = TRUE); + ui_newline(obj); + + + ui_rlabel(obj, .label = "String", .vfill = TRUE); + ui_textfield(obj, .varname = "string", .hfill = TRUE); + ui_newline(obj); + + ui_rlabel(obj, .label = "Text"); + UIWIDGET textarea = ui_textarea(obj, .varname = "text", .hfill =TRUE); + ui_widget_set_size(textarea, 300, 300); + ui_newline(obj); + + ui_rlabel(obj, .label = "List 1", .vfill = TRUE); + ui_combobox(obj, .varname = "list1"); + } + + ToplevelDoc *doc = create_toplevel(); + ui_attach_document(obj->ctx, doc); + + ui_show(obj); +} + +int main(int argc, char** argv) { + ui_init("app1", argc, argv); + ui_onstartup(application_startup, NULL); + + ui_set_property("ui.gtk.window.showtitle", "main"); + + // menu + ui_menu("File") { + ui_menuitem(.label = "Static Item"); + ui_menuseparator(); + ui_menu_itemlist(.varname = "list2"); + } + + ui_main(); + + return (EXIT_SUCCESS); +} + + +#endif + + +#if !defined(UI_COCOA) && !defined(UI_MOTIF) && !defined(UI_WIN32) && !defined(UI_QT) && !defined(UI_TEST) typedef struct { UiString *str1;