client/uiclient.c

Wed, 10 Dec 2025 22:22:55 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Wed, 10 Dec 2025 22:22:55 +0100
changeset 984
2cf5e6d55013
parent 983
1d7d24147961
permissions
-rw-r--r--

implement all window types in the client + small fixes

942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2025 Olaf Wintermann. All rights reserved.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "uiclient.h"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include "args.h"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31
953
c98404829cd3 fix win32 build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 948
diff changeset
32 #include <stdio.h>
c98404829cd3 fix win32 build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 948
diff changeset
33 #include <stdlib.h>
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 #include <cx/hash_map.h>
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include "../ui/common/args.h"
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
954
07c1effb2a31 add menubar (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 953
diff changeset
38 #ifndef _WIN32
07c1effb2a31 add menubar (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 953
diff changeset
39
944
cc23aad6335e move message handler to ui common
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 942
diff changeset
40 static UiMessageHandler *io;
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 static CxMap *msg_types;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 static CxMap *objects;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44
944
cc23aad6335e move message handler to ui common
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 942
diff changeset
45 void client_init(UiMessageHandler *handler) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 io = handler;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 msg_types = cxHashMapCreateSimple(CX_STORE_POINTERS);
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
49 cxMapPut(msg_types, "window", msg_window);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
50 cxMapPut(msg_types, "sidebar_window", msg_window);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
51 cxMapPut(msg_types, "splitview_window", msg_window);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
52 cxMapPut(msg_types, "simple_window", msg_window);
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 cxMapPut(msg_types, "show", msg_show);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 cxMapPut(msg_types, "vbox", msg_vbox);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 cxMapPut(msg_types, "hbox", msg_vbox);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 cxMapPut(msg_types, "grid", msg_vbox);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 cxMapPut(msg_types, "end", msg_end);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 cxMapPut(msg_types, "button", msg_button);
948
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
60 cxMapPut(msg_types, "toggle", msg_togglebutton);
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 objects = cxHashMapCreateSimple(CX_STORE_POINTERS);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 static cxmutstr jsonobj_getstring(const CxJsonValue *obj, const char *name) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 CxJsonValue *value = cxJsonObjGet(obj, name);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 if(value->type == CX_JSON_STRING) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 return value->value.string;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 } else {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 return (cxmutstr){ NULL, 0 };
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
71 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
73
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
74 static UiBool jsonobj_getbool(const CxJsonValue *obj, const char *name, int *error) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
75 CxJsonValue *value = cxJsonObjGet(obj, name);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
76 if(value->type == CX_JSON_LITERAL) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
77 if(*error) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
78 *error = 0;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
79 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
80 return value->value.literal == CX_JSON_TRUE ? 1 : 0;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
81 } else {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
82 if(error) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
83 *error = 1;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
84 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
85 return FALSE;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
86 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
87 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
88
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 /*
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90 * UI thread callback
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 */
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 static int msg_received(void *data) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 CxJsonValue *value = data;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 if(client_handle_json(NULL, value)) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95 fprintf(stderr, "Error: invalid json message\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 cxJsonValueFree(value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 /*
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 * This message callback is executed in the message handler input thread
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 */
983
1d7d24147961 fix client build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 982
diff changeset
104 void client_msg_received(cxstring msg) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 // parse message
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 CxJson json;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 cxJsonInit(&json, NULL);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 cxJsonFilln(&json, msg.ptr, msg.length);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 CxJsonValue *value;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 if(cxJsonNext(&json, &value) == CX_JSON_NO_ERROR && value) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 // handle json message in the UI thread
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 ui_call_mainthread(msg_received, value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 } else {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 fprintf(stderr, "Error: invalid json message\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117 cxJsonDestroy(&json);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 int client_handle_json(UiObject *obj, const CxJsonValue *value) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 if(value->type != CX_JSON_OBJECT) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 CxJsonValue *type = cxJsonObjGet(value, "type");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126 if(!type || type->type != CX_JSON_STRING) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 json_msg_handler handler = cxMapGet(msg_types, type->value.string);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 if(!handler) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
135 return handler(obj, value, type->value.string);
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 int client_handle_children(UiObject *parent, const CxJsonValue *value) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139 CxJsonValue *children = cxJsonObjGet(value, "children");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 if(children && children->type == CX_JSON_ARRAY) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
141 for(int i=0;i<children->value.array.array_size;i++) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
142 CxJsonValue *child = children->value.array.array[i];
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
143 if(client_handle_json(parent, child)) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
144 fprintf(stderr, "Error: invalid child\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
145 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
146 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
147 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
148 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
149 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
150 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
151
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
152 void client_add_obj_mapping(UiObject *obj, cxmutstr id) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
153 cxMapPut(objects, id, obj);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
154
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
155 CxAllocator *a = ui_allocator(obj->ctx);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
156
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
157 WindowData *wdata = cxMalloc(a, sizeof(WindowData));
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
158 wdata->widgets = cxHashMapCreate(a, CX_STORE_POINTERS, 128);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
159 obj->window = wdata;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
160 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
161
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
162 UiObject* client_get_mapped_obj(cxmutstr id) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
163 return cxMapGet(objects, id);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
164 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
165
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
166 void client_reg_widget(UiObject *obj, cxmutstr id, UIWIDGET w) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
167 WindowData *wdata = obj->window;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 if(!wdata) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
169 fprintf(stderr, "Error: missing obj window data\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
170 return;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
171 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
172 cxMapPut(wdata->widgets, id, w);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
173 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
174
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
175 UIWIDGET client_get_widget(UiObject *obj, cxmutstr id) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
176 WindowData *wdata = obj->window;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
177 if(!wdata) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
178 fprintf(stderr, "Error: missing obj window data\n");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
179 return NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
180 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
181 return cxMapGet(wdata->widgets, id);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
182 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
183
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
184 static UiObject* get_msg_obj(UiObject *obj, const CxJsonValue *value) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
185 if(obj) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
186 return obj;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
187 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
188 CxJsonValue *obj_id = cxJsonObjGet(value, "obj");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
189 if(!obj_id || obj_id->type != CX_JSON_STRING) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
190 return NULL;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
191 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
192 return client_get_mapped_obj(obj_id->value.string);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
193 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
194
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
195 int msg_window(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
196 cxmutstr obj_id = jsonobj_getstring(value, "obj");
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
197 cxmutstr id = jsonobj_getstring(value, "id");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
198 cxmutstr title = jsonobj_getstring(value, "title");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
199
982
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
200 if(!obj_id.ptr) {
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
201 return 1;
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
202 }
983
1d7d24147961 fix client build
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 982
diff changeset
203 if(!id.ptr) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
204 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
205 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
206
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
207 UiObject *obj;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
208 if(!cx_strcmp(type, "window")) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
209 obj = ui_window(title.ptr, NULL);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
210 } else if(!cx_strcmp(type, "sidebar_window")) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
211 obj = ui_sidebar_window(title.ptr, NULL);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
212 } else if(!cx_strcmp(type, "splitview_window")) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
213 int err;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
214 bool sidebar = jsonobj_getbool(value, "sidebar", &err);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
215 if(err) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
216 return 1;
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
217 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
218 obj = ui_splitview_window(title.ptr, sidebar);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
219 } else if(!cx_strcmp(type, "simple_window")) {
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
220 obj = ui_simple_window(title.ptr, NULL);
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
221 }
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
222
982
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
223 client_add_obj_mapping(obj, obj_id);
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
224
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
225 if(obj->widget) {
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
226 client_reg_widget(obj, id, obj->widget);
9102a53c5385 implement window (Server)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 976
diff changeset
227 }
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
228
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
229 return client_handle_children(obj, value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
230 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
231
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
232 int msg_show(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
233 UiObject *obj = client_get_mapped_obj(jsonobj_getstring(value, "obj"));
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
234 if(!obj) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
235 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
236 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
237 ui_show(obj);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
238 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
239 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
240
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
241 typedef UIWIDGET(*ctcreate_func)(UiObject *obj, UiContainerArgs *args);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
242
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
243 static int msg_container(UiObject *parent, const CxJsonValue *value, ctcreate_func create) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
244 CxJsonValue *args_value = cxJsonObjGet(value, "args");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
245 cxmutstr id = jsonobj_getstring(value, "id");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
246 if(!id.ptr) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
247 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
248 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
249 UiObject *obj = get_msg_obj(parent, value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
250 if(!obj) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
251 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
252 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
253
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
254 UiContainerArgs *args = json2container_args(args_value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
255 UIWIDGET w = create(obj, args);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
256 ui_container_args_free(args);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
257 client_reg_widget(obj, id, w);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
258
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
259 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
260 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
261
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
262 int msg_vbox(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
263 return msg_container(parent, value, ui_vbox_create);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
264 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
265
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
266 int msg_hbox(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
267 return msg_container(parent, value, ui_hbox_create);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
268 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
269
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
270 int msg_grid(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
271 return msg_container(parent, value, ui_grid_create);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
272 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
273
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
274 int msg_end(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
275 UiObject *obj = get_msg_obj(parent, value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
276 if(!obj) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
277 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
278 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
279 ui_end_new(obj);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
280 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
281 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
282
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
283 int msg_button(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
942
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
284 CxJsonValue *args_value = cxJsonObjGet(value, "args");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
285 cxmutstr id = jsonobj_getstring(value, "id");
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
286 if(!id.ptr) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
287 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
288 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
289 UiObject *obj = get_msg_obj(parent, value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
290 if(!obj) {
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
291 return 1;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
292 }
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
293
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
294 UiButtonArgs *args = json2button_args(args_value);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
295 UIWIDGET w = ui_button_create(obj, args);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
296 ui_button_args_free(args);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
297 client_reg_widget(obj, id, w);
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
298
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
299 return 0;
488178e3e328 add initial client code
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
300 }
948
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
301
984
2cf5e6d55013 implement all window types in the client + small fixes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 983
diff changeset
302 int msg_togglebutton(UiObject *parent, const CxJsonValue *value, cxmutstr type) {
948
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
303 CxJsonValue *args_value = cxJsonObjGet(value, "args");
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
304 cxmutstr id = jsonobj_getstring(value, "id");
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
305 if(!id.ptr) {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
306 return 1;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
307 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
308 UiObject *obj = get_msg_obj(parent, value);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
309 if(!obj) {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
310 return 1;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
311 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
312
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
313 CxJsonValue *button_type = cxJsonObjGet(value, "button_type");
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
314 if(!button_type || button_type->type != CX_JSON_INTEGER) {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
315 return 1;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
316 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
317
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
318 CxJsonValue *val = cxJsonObjGet(value, "value");
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
319 UiInteger *i = NULL;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
320 if(val && val->type == CX_JSON_STRING) {
976
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
321 i = ui_get_int_var(obj->ctx, val->value.string.ptr);
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
322 if(!i) {
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
323 i = ui_int_new(obj->ctx, val->value.string.ptr);
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
324 }
948
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
325 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
326
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
327 UiToggleArgs *args = json2toggle_args(args_value);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
328 UIWIDGET w;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
329 switch(button_type->value.integer) {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
330 default: {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
331 w = ui_togglebutton_create(obj, args);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
332 break;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
333 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
334 case 1: {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
335 w = ui_checkbox_create(obj, args);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
336 break;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
337 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
338 case 2: {
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
339 w = ui_switch_create(obj, args);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
340 break;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
341 }
976
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
342 case 3: {
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
343 w = ui_radiobutton_create(obj, args);
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
344 break;
e2763e880938 implement radiobutton (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 954
diff changeset
345 }
948
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
346 }
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
347 ui_toggle_args_free(args);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
348 client_reg_widget(obj, id, w);
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
349
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
350 return 0;
94bc57d63128 implement toggle button (Client)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 944
diff changeset
351 }
954
07c1effb2a31 add menubar (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 953
diff changeset
352
07c1effb2a31 add menubar (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 953
diff changeset
353 #endif

mercurial