#include "text.h"
static W32WidgetClass textarea_widget_class = {
.eventproc = ui_textarea_eventproc,
.enable = w32_widget_default_enable,
.show = w32_widget_default_show,
.get_preferred_size = ui_textarea_get_preferred_size,
.destroy = w32_widget_default_destroy
};
UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
HINSTANCE hInstance = GetModuleHandle(
NULL);
UiContainerPrivate *container = ui_obj_container(obj);
HWND parent = ui_container_get_parent(container);
UiLayout layout =
UI_ARGS2LAYOUT(args);
int width = args->width >=
0 ? args->width :
100;
int height = args->height >=
0 ? args->height :
100;
HWND hwnd = CreateWindowEx(
0,
"EDIT",
"",
WS_CHILD |
WS_VISIBLE |
WS_BORDER |
ES_LEFT |
ES_MULTILINE |
ES_AUTOVSCROLL |
ES_AUTOHSCROLL |
ES_WANTRETURN |
WS_VSCROLL,
0,
0, width, height,
parent,
(
HMENU)
0,
hInstance,
NULL);
ui_win32_set_ui_font(hwnd);
W32Widget *widget = w32_widget_create(&textarea_widget_class, hwnd,
sizeof(UiTextArea));
ui_container_add(container, widget, &layout);
UiTextArea *textarea = (UiTextArea*)widget;
textarea->width = width;
textarea->widget.var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname,
UI_VAR_TEXT);
textarea->widget.callback = args->onchange;
textarea->widget.callbackdata = args->onchangedata;
if (textarea->widget.var) {
UiText *t = textarea->widget.var->value;
if (t->value.ptr) {
}
t->obj = widget;
t->save = ui_textarea_save;
t->destroy = ui_textarea_destroy;
t->restore = ui_textarea_restore;
t->get = ui_textarea_get;
t->set = ui_textarea_set;
t->getsubstr = ui_textarea_getsubstr;
t->insert = ui_textarea_insert;
t->setposition = ui_textarea_setposition;
t->position = ui_textarea_position;
t->setselection = ui_textarea_setselection;
t->selection = ui_textarea_selection;
t->length = ui_textarea_length;
t->remove = ui_textarea_remove;
}
return widget;
}
W32Size ui_textarea_get_preferred_size(W32Widget *widget) {
W32Size size;
UiTextArea *textarea = (UiTextArea*)widget;
size.width = textarea->width;
size.height = textarea->height;
return size;
}
int ui_textarea_eventproc(W32Widget *widget,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam) {
return 0;
}
void ui_textarea_save(UiText *text) {
}
void ui_textarea_destroy(UiText *text) {
}
void ui_textarea_restore(UiText *text) {
}
void ui_textarea_set(UiText *text,
const char *str) {
}
char* ui_textarea_get(UiText *text) {
return NULL;
}
char* ui_textarea_getsubstr(UiText *text,
int begin,
int end) {
return NULL;
}
void ui_textarea_insert(UiText *text,
int pos,
char *str) {
}
void ui_textarea_setposition(UiText *text,
int pos) {
}
int ui_textarea_position(UiText *text) {
return 0;
}
void ui_textarea_setselection(UiText *text,
int begin,
int end) {
}
void ui_textarea_selection(UiText *text,
int *begin,
int *end) {
}
int ui_textarea_length(UiText *text) {
return 0;
}
void ui_textarea_remove(UiText *text,
int begin,
int end) {
}
static W32WidgetClass textfield_widget_class = {
.eventproc = ui_textfield_eventproc,
.enable = w32_widget_default_enable,
.show = w32_widget_default_show,
.get_preferred_size = ui_textfield_get_preferred_size,
.destroy = w32_widget_default_destroy
};
UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
HINSTANCE hInstance = GetModuleHandle(
NULL);
UiContainerPrivate *container = ui_obj_container(obj);
HWND parent = ui_container_get_parent(container);
UiLayout layout =
UI_ARGS2LAYOUT(args);
int width = args->width >=
0 ? args->width :
100;
HWND hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
"EDIT",
"",
WS_VISIBLE |
WS_CHILD |
ES_LEFT |
ES_AUTOHSCROLL,
0,
0, width,
25,
parent,
(
HMENU)
0,
hInstance,
NULL);
ui_win32_set_ui_font(hwnd);
W32Widget *widget = w32_widget_create(&textfield_widget_class, hwnd,
sizeof(UiTextField));
ui_container_add(container, widget, &layout);
UiTextField *textfield = (UiTextField*)widget;
textfield->width = width;
textfield->widget.var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname,
UI_VAR_STRING);
textfield->widget.callback = args->onchange;
textfield->widget.callbackdata = args->onchangedata;
if (textfield->widget.var) {
UiString *s = textfield->widget.var->value;
if (s->value.ptr) {
}
s->obj = widget;
s->get = ui_textfield_get;
s->set = ui_textfield_set;
}
return widget;
}
W32Size ui_textfield_get_preferred_size(W32Widget *widget) {
UiTextField *textfield = (UiTextField *)widget;
return (W32Size){ .width = textfield->width, .height =
32};
}
int ui_textfield_eventproc(W32Widget *widget,
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam) {
return 0;
}
char* ui_textfield_get(UiString *s) {
UiTextField *textfield = s->obj;
if (s->value.free) {
s->value.free(s->value.ptr);
}
int len = GetWindowTextLength(textfield->widget.widget.hwnd);
s->value.ptr = calloc(len
+1,
1);
GetWindowText(textfield->widget.widget.hwnd, s->value.ptr, len
+1);
return s->value.ptr;
}
void ui_textfield_set(UiString *s,
const char *value) {
UiTextField *textfield = s->obj;
if (s->value.free) {
s->value.free(s->value.ptr);
}
s->value.ptr =
NULL;
SetWindowText(textfield->widget.widget.hwnd, value);
}