#include "window.h"
#include "container.h"
#include "widget.h"
#include "../common/object.h"
#include <cx/buffer.h>
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;
window->title = cx_strdup_a(a, title);
obj->widget = (UiWidget*)window;
uic_object_push_container(obj, ui_widget_container((UiWidget*)window));
ui_reg_widget(obj->widget);
return obj;
}
UiObject *ui_window(
const char *title) {
return create_window(title,
"window",
FALSE);
}
UiObject *ui_sidebar_window(
const char *title) {
return create_window(title,
"sidebar_window",
FALSE);
}
UiObject *ui_splitview_window(
const char *title, UiBool sidebar) {
return create_window(title,
"splitview_window", sidebar);
}
UiObject *ui_simple_window(
const char *title) {
return create_window(title,
"simple_window",
FALSE);
}
cxmutstr ui_window_serialize(UiWindow *w) {
CxBuffer buf;
cxBufferInit(&buf,
NULL,
1024,
NULL,
CX_BUFFER_AUTO_EXTEND |
CX_BUFFER_FREE_CONTENTS);
cxBufferPutString(&buf,
"{");
ui_serialize_type_obj_id(&w->widget, &buf);
if(w->title.ptr) {
cxBufferPutString(&buf,
",\"title\":\"");
cxBufferWrite(w->title.ptr,
1, w->title.length, &buf);
cxBufferPutString(&buf,
"\"");
}
ui_serialize_children(&w->widget, &buf);
cxBufferPutString(&buf,
"}\n");
return cx_mutstrn(buf.space, buf.size);
}