application/main.c

changeset 553
90e38db0c755
parent 550
0412c4c1048e
child 554
28e490aa15e3
--- 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;

mercurial