ui/server/window.c

changeset 991
ab3125bd8b5f
parent 990
38a48b756d80
equal deleted inserted replaced
990:38a48b756d80 991:ab3125bd8b5f
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #include "window.h" 29 #include "window.h"
30 #include "container.h" 30 #include "container.h"
31 #include "widget.h"
31 32
32 #include "../common/object.h" 33 #include "../common/object.h"
33 34
34 #include <cx/buffer.h> 35 #include <cx/buffer.h>
35 36
36 static UiObject* create_window(const char *title, UiBool simple, UiBool sidebar, UiBool splitview) { 37 static UiObject* create_window(const char *title, const char *type, UiBool sidebar) {
37 UiObject *obj = uic_object_new_toplevel(); 38 UiObject *obj = uic_object_new_toplevel();
38 const CxAllocator *a = obj->ctx->allocator; 39 const CxAllocator *a = obj->ctx->allocator;
39 40
40 UiWindow *window = cxZalloc(a, sizeof(UiWindow)); 41 UiWindow *window = cxZalloc(a, sizeof(UiWindow));
41 window->widget.obj = ui_create_server_object(obj->ctx); 42 window->widget.obj = ui_create_server_object(obj->ctx);
43 window->widget.type = cx_str(type);
42 window->widget.children = cxLinkedListCreate(a, NULL, CX_STORE_POINTERS); 44 window->widget.children = cxLinkedListCreate(a, NULL, CX_STORE_POINTERS);
43 window->widget.serialize = (ui_serialize_func)ui_window_serialize; 45 window->widget.serialize = (ui_serialize_func)ui_window_serialize;
44 window->widget.invisible = TRUE; 46 window->widget.invisible = TRUE;
45 window->title = cx_strdup_a(a, title); 47 window->title = cx_strdup_a(a, title);
46 48
50 52
51 return obj; 53 return obj;
52 } 54 }
53 55
54 UiObject *ui_window(const char *title) { 56 UiObject *ui_window(const char *title) {
55 return create_window(title, FALSE, FALSE, FALSE); 57 return create_window(title, "window", FALSE);
56 } 58 }
57 59
58 UiObject *ui_sidebar_window(const char *title) { 60 UiObject *ui_sidebar_window(const char *title) {
59 return create_window(title, FALSE, TRUE, FALSE); 61 return create_window(title, "sidebar_window", FALSE);
60 } 62 }
61 63
62 UiObject *ui_splitview_window(const char *title, UiBool sidebar) { 64 UiObject *ui_splitview_window(const char *title, UiBool sidebar) {
63 return create_window(title, FALSE, sidebar, TRUE); 65 return create_window(title, "splitview_window", sidebar);
64 } 66 }
65 67
66 UiObject *ui_simple_window(const char *title) { 68 UiObject *ui_simple_window(const char *title) {
67 return create_window(title, TRUE, FALSE, FALSE); 69 return create_window(title, "simple_window", FALSE);
68 } 70 }
69 71
70 72
71 cxmutstr ui_window_serialize(UiWindow *w) { 73 cxmutstr ui_window_serialize(UiWindow *w) {
72 CxBuffer buf; 74 CxBuffer buf;
73 cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS); 75 cxBufferInit(&buf, NULL, 1024, NULL, CX_BUFFER_AUTO_EXTEND | CX_BUFFER_FREE_CONTENTS);
74 76
75 cxBufferPutString(&buf, "{\"type\":"); 77 cxBufferPutString(&buf, "{");
76 switch(w->type) { 78 ui_serialize_type_obj_id(&w->widget, &buf);
77 case UI_WINDOW_MAIN: cxBufferPutString(&buf, "\"window\""); break;
78 case UI_WINDOW_SIMPLE: cxBufferPutString(&buf, "\"simple_window\""); break;
79 case UI_WINDOW_SIDEBAR: cxBufferPutString(&buf, "\"sidebar_window\""); break;
80 case UI_WINDOW_SPLITVIEW: cxBufferPutString(&buf, "\"splitview_window\""); break;
81 }
82
83 cxmutstr obj_id = w->widget.obj->id;
84 cxmutstr id = w->widget.id;
85
86 cxBufferPutString(&buf, ", \"obj\":\"");
87 cxBufferWrite(obj_id.ptr, 1, obj_id.length, &buf);
88 cxBufferPutString(&buf, "\",");
89
90 cxBufferPutString(&buf, " \"id\":\"");
91 cxBufferWrite(id.ptr, 1, id.length, &buf);
92 cxBufferPutString(&buf, "\", ");
93 79
94 if(w->title.ptr) { 80 if(w->title.ptr) {
95 cxBufferPutString(&buf, " \"title\":\""); 81 cxBufferPutString(&buf, ",\"title\":\"");
96 cxBufferWrite(w->title.ptr, 1, w->title.length, &buf); 82 cxBufferWrite(w->title.ptr, 1, w->title.length, &buf);
97 cxBufferPutString(&buf, "\""); 83 cxBufferPutString(&buf, "\"");
98 } 84 }
99 85
100 ui_serialize_children(&w->widget, &buf); 86 ui_serialize_children(&w->widget, &buf);

mercurial