| 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); |