application/main.c

changeset 0
2483f517c562
child 2
fbdfaacc4182
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/application/main.c	Sun Jan 21 16:30:18 2024 +0100
@@ -0,0 +1,110 @@
+/*
+ * 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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ui/ui.h>
+#include <cx/buffer.h>
+#include <cx/utils.h>
+
+typedef struct {
+    UiText *text;
+} MyDocument;
+
+MyDocument *doc1;
+MyDocument *doc2;
+
+
+void action_menu(UiEvent *event, void *userdata) {
+    printf("action_menu: %s\n", (char*)userdata);
+}
+
+void action_button(UiEvent *event, void *userdata) {
+    printf("button test\n");
+    MyDocument *doc = event->document;
+    if(!doc) {
+        printf("no document\n");
+        return;
+    }
+    
+    char *text = doc->text->get(doc->text);
+    printf("text: {\n%s\n}\n", text);
+}
+
+void action_switch(UiEvent *event, void *userdata) {
+    if(event->document == doc1) {
+        ui_set_document(event->obj, doc2);
+    } else {
+        ui_set_document(event->obj, doc1);
+    }
+}
+
+
+MyDocument* create_doc(void) {
+    MyDocument *doc = ui_document_new(sizeof(MyDocument));
+    UiContext *docctx = ui_document_context(doc);
+    doc->text = ui_text_new(docctx, "text");
+    return doc;
+}
+
+void application_startup(UiEvent *event, void *data) {
+    
+    UiObject *obj = ui_window("Test", NULL);
+    ui_textarea_nv(obj, "text");
+    ui_button(obj, "Test", action_button, NULL);
+    ui_button(obj, "Switch Document", action_switch, NULL);
+    
+    doc1 = create_doc();
+    doc2 = create_doc();
+    
+    ui_attach_document(obj->ctx, doc1);
+    
+    ui_show(obj);
+}
+
+int main(int argc, char** argv) { 
+    ui_init("app1", argc, argv);
+    ui_onstartup(application_startup, NULL);
+    
+    // menu
+    ui_menu("_File");
+    ui_menuitem("_Hello", action_menu, NULL);
+    ui_submenu("Submenu1");
+    ui_submenu("Submenu2");
+    ui_menuitem("item2", action_menu, NULL);
+    ui_submenu_end();
+    ui_menuitem("item3", action_menu, NULL);
+    ui_submenu_end();
+    ui_menuitem("item4", action_menu, NULL);
+
+    
+    ui_main();
+    
+    return (EXIT_SUCCESS);
+}

mercurial