# HG changeset patch # User Olaf Wintermann # Date 1765537234 -3600 # Node ID ab3125bd8b5ffef7017953828c9e1b2539fb179a # Parent 38a48b756d80ad82b64303e5d4a2daa96e890fac move some common serialization code to functions (Server) diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/button.c --- a/ui/server/button.c Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/button.c Fri Dec 12 12:00:34 2025 +0100 @@ -32,6 +32,7 @@ #include "args.h" #include "container.h" +#include "widget.h" cxmutstr ui_button_args_to_string(UiContext *ctx, UiButtonArgs *args) { CxBuffer buf; @@ -58,6 +59,7 @@ UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) { UiCallbackWidget *widget = cxZalloc(obj->ctx->allocator, sizeof(UiCallbackWidget)); widget->widget.obj = obj->widget->obj; + widget->widget.type = CX_STR("button"); widget->widget.args = ui_button_args_to_string(obj->ctx, args); widget->widget.serialize = (ui_serialize_func)ui_button_serialize; widget->callback = args->onclick; @@ -74,11 +76,9 @@ CxBuffer buf; cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); - cxBufferPutString(&buf, "{\"type\":\"button\", \"obj\":\""); - cxBufferPutString(&buf, w->widget.obj->id.ptr); - cxBufferPutString(&buf, "\", \"id\":\""); - cxBufferPutString(&buf, w->widget.id.ptr); - cxBufferPutString(&buf, "\", \"args\":"); + cxBufferPutString(&buf, "{"); + ui_serialize_type_obj_id(&w->widget, &buf); + cxBufferPutString(&buf, ",\"args\":"); cxBufferPutString(&buf, w->widget.args.ptr); cxBufferPutString(&buf, "}\n"); diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/container.c --- a/ui/server/container.c Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/container.c Fri Dec 12 12:00:34 2025 +0100 @@ -30,6 +30,7 @@ #include #include "container.h" +#include "widget.h" #include "args.h" void ui_container_begin_close(UiObject *obj) { @@ -80,12 +81,13 @@ widget->args = ui_container_args_to_string(obj->ctx, args); widget->children = cxLinkedListCreate(a, NULL, CX_STORE_POINTERS); widget->serialize = ui_container_serialize; - uic_object_push_container(obj, ui_widget_container(widget)); - ui_reg_widget((UiWidget*)widget); UiWidget *parent = obj->container_end->container; cxListAdd(parent->children, widget); + uic_object_push_container(obj, ui_widget_container(widget)); + ui_reg_widget((UiWidget*)widget); + return widget; } @@ -109,15 +111,10 @@ CxBuffer buf; cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); - cxBufferPutString(&buf, "{\"type\":\""); - cxBufferPutString(&buf, w->type.ptr); - cxBufferPutString(&buf, "\",\"args\":\""); + cxBufferPutString(&buf, "{"); + ui_serialize_type_obj_id(w, &buf); + cxBufferPutString(&buf, ",\"args\":"); cxBufferPutString(&buf, w->args.ptr); - cxBufferPutString(&buf, "\",\"obj\":"); - cxBufferPutString(&buf, w->obj->id.ptr); - cxBufferPutString(&buf, "\",\"id\":"); - cxBufferPutString(&buf, w->id.ptr); - cxBufferPutString(&buf, "\""); ui_serialize_children(w, &buf); diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/toolkit.h --- a/ui/server/toolkit.h Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/toolkit.h Fri Dec 12 12:00:34 2025 +0100 @@ -86,7 +86,6 @@ typedef struct UiCallbackWidget { UiWidget widget; - cxstring type; ui_callback callback; void *userdata; } UiCallbackWidget; diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/widget.c --- a/ui/server/widget.c Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/widget.c Fri Dec 12 12:00:34 2025 +0100 @@ -26,7 +26,20 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#include + #include "widget.h" +#include "toolkit.h" + +void ui_serialize_type_obj_id(UiWidget *w, CxBuffer *buf) { + cxBufferPutString(buf, "\"type\":\""); + cxBufferPutString(buf, w->type.ptr); + cxBufferPutString(buf, "\",\"obj\":\""); + cxBufferPutString(buf, w->obj->id.ptr); + cxBufferPutString(buf, "\",\"id\":\""); + cxBufferPutString(buf, w->id.ptr); + cxBufferPutString(buf, "\""); +} void ui_set_enabled(UIWIDGET widget, int enabled) { diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/widget.h --- a/ui/server/widget.h Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/widget.h Fri Dec 12 12:00:34 2025 +0100 @@ -31,11 +31,13 @@ #include "../ui/widget.h" +#include + #ifdef __cplusplus extern "C" { #endif - +void ui_serialize_type_obj_id(UiWidget *w, CxBuffer *buf); #ifdef __cplusplus diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/window.c --- a/ui/server/window.c Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/window.c Fri Dec 12 12:00:34 2025 +0100 @@ -28,17 +28,19 @@ #include "window.h" #include "container.h" +#include "widget.h" #include "../common/object.h" #include -static UiObject* create_window(const char *title, UiBool simple, UiBool sidebar, UiBool splitview) { +static UiObject* create_window(const char *title, const char *type, UiBool sidebar) { UiObject *obj = uic_object_new_toplevel(); const CxAllocator *a = obj->ctx->allocator; UiWindow *window = cxZalloc(a, sizeof(UiWindow)); window->widget.obj = ui_create_server_object(obj->ctx); + window->widget.type = cx_str(type); window->widget.children = cxLinkedListCreate(a, NULL, CX_STORE_POINTERS); window->widget.serialize = (ui_serialize_func)ui_window_serialize; window->widget.invisible = TRUE; @@ -52,19 +54,19 @@ } UiObject *ui_window(const char *title) { - return create_window(title, FALSE, FALSE, FALSE); + return create_window(title, "window", FALSE); } UiObject *ui_sidebar_window(const char *title) { - return create_window(title, FALSE, TRUE, FALSE); + return create_window(title, "sidebar_window", FALSE); } UiObject *ui_splitview_window(const char *title, UiBool sidebar) { - return create_window(title, FALSE, sidebar, TRUE); + return create_window(title, "splitview_window", sidebar); } UiObject *ui_simple_window(const char *title) { - return create_window(title, TRUE, FALSE, FALSE); + return create_window(title, "simple_window", FALSE); } @@ -72,27 +74,11 @@ CxBuffer buf; cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); - cxBufferPutString(&buf, "{\"type\":"); - switch(w->type) { - case UI_WINDOW_MAIN: cxBufferPutString(&buf, "\"window\""); break; - case UI_WINDOW_SIMPLE: cxBufferPutString(&buf, "\"simple_window\""); break; - case UI_WINDOW_SIDEBAR: cxBufferPutString(&buf, "\"sidebar_window\""); break; - case UI_WINDOW_SPLITVIEW: cxBufferPutString(&buf, "\"splitview_window\""); break; - } - - cxmutstr obj_id = w->widget.obj->id; - cxmutstr id = w->widget.id; - - cxBufferPutString(&buf, ", \"obj\":\""); - cxBufferWrite(obj_id.ptr, 1, obj_id.length, &buf); - cxBufferPutString(&buf, "\","); - - cxBufferPutString(&buf, " \"id\":\""); - cxBufferWrite(id.ptr, 1, id.length, &buf); - cxBufferPutString(&buf, "\", "); + cxBufferPutString(&buf, "{"); + ui_serialize_type_obj_id(&w->widget, &buf); if(w->title.ptr) { - cxBufferPutString(&buf, " \"title\":\""); + cxBufferPutString(&buf, ",\"title\":\""); cxBufferWrite(w->title.ptr, 1, w->title.length, &buf); cxBufferPutString(&buf, "\""); } diff -r 38a48b756d80 -r ab3125bd8b5f ui/server/window.h --- a/ui/server/window.h Fri Dec 12 11:38:47 2025 +0100 +++ b/ui/server/window.h Fri Dec 12 12:00:34 2025 +0100 @@ -36,17 +36,9 @@ extern "C" { #endif -enum UiWindowType { - UI_WINDOW_MAIN = 0, - UI_WINDOW_SIMPLE, - UI_WINDOW_SIDEBAR, - UI_WINDOW_SPLITVIEW -}; -typedef enum UiWindowType UiWindowType; typedef struct UiWindow { UiWidget widget; - UiWindowType type; cxmutstr title; } UiWindow;