| 36 #include <cx/string.h> |
36 #include <cx/string.h> |
| 37 |
37 |
| 38 |
38 |
| 39 /* ------------------------------ Text Area ------------------------------ */ |
39 /* ------------------------------ Text Area ------------------------------ */ |
| 40 |
40 |
| 41 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { |
41 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) { |
| 42 Arg xargs[16]; |
42 Arg xargs[16]; |
| 43 int n = 0; |
43 int n = 0; |
| 44 |
44 |
| 45 XtSetArg(xargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; |
45 XtSetArg(xargs[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; |
| 46 |
46 |
| 47 UiContainerPrivate *ctn = ui_obj_container(obj); |
47 UiContainerPrivate *ctn = ui_obj_container(obj); |
| 48 UI_APPLY_LAYOUT(ctn->layout, args); |
48 UI_APPLY_LAYOUT(ctn->layout, args); |
| 49 |
49 |
| 50 Widget parent = ctn->prepare(ctn, xargs, &n); |
50 Widget parent = ctn->prepare(ctn, xargs, &n); |
| 51 char *name = args.name ? (char*)args.name : "textarea"; |
51 char *name = args->name ? (char*)args->name : "textarea"; |
| 52 XtSetArg(xargs[n], XmNwidth, 100); n++; |
52 XtSetArg(xargs[n], XmNwidth, 100); n++; |
| 53 Widget widget = XmCreateScrolledText(parent, name, xargs, n); |
53 Widget widget = XmCreateScrolledText(parent, name, xargs, n); |
| 54 XtManageChild(widget); |
54 XtManageChild(widget); |
| 55 |
55 |
| 56 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_TEXT); |
56 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT); |
| 57 |
57 |
| 58 UiTextArea *textarea = malloc(sizeof(UiTextArea)); |
58 UiTextArea *textarea = malloc(sizeof(UiTextArea)); |
| 59 memset(textarea, 0, sizeof(UiTextArea)); |
59 memset(textarea, 0, sizeof(UiTextArea)); |
| 60 textarea->obj = obj; |
60 textarea->obj = obj; |
| 61 textarea->var = var; |
61 textarea->var = var; |
| 381 |
381 |
| 382 |
382 |
| 383 |
383 |
| 384 /* ------------------------------ Text Field ------------------------------ */ |
384 /* ------------------------------ Text Field ------------------------------ */ |
| 385 |
385 |
| 386 static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, int frameless, int password) { |
386 static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, int frameless, int password) { |
| 387 Arg xargs[16]; |
387 Arg xargs[16]; |
| 388 int n = 0; |
388 int n = 0; |
| 389 |
389 |
| 390 if(frameless) { |
390 if(frameless) { |
| 391 XtSetArg(xargs[n], XmNshadowThickness, 0); |
391 XtSetArg(xargs[n], XmNshadowThickness, 0); |
| 397 |
397 |
| 398 UiContainerPrivate *ctn = ui_obj_container(obj); |
398 UiContainerPrivate *ctn = ui_obj_container(obj); |
| 399 UI_APPLY_LAYOUT(ctn->layout, args); |
399 UI_APPLY_LAYOUT(ctn->layout, args); |
| 400 |
400 |
| 401 Widget parent = ctn->prepare(ctn, xargs, &n); |
401 Widget parent = ctn->prepare(ctn, xargs, &n); |
| 402 char *name = args.name ? (char*)args.name : "textfield"; |
402 char *name = args->name ? (char*)args->name : "textfield"; |
| 403 Widget textfield = XmCreateTextField(parent, name, xargs, n); |
403 Widget textfield = XmCreateTextField(parent, name, xargs, n); |
| 404 XtManageChild(textfield); |
404 XtManageChild(textfield); |
| 405 |
405 |
| 406 ui_set_widget_groups(obj->ctx, textfield, args.groups); |
406 ui_set_widget_groups(obj->ctx, textfield, args->groups); |
| 407 |
407 |
| 408 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING); |
408 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 409 if(var) { |
409 if(var) { |
| 410 UiString *value = (UiString*)var->value; |
410 UiString *value = (UiString*)var->value; |
| 411 value->obj = textfield; |
411 value->obj = textfield; |
| 412 value->get = ui_textfield_get; |
412 value->get = ui_textfield_get; |
| 413 value->set = ui_textfield_set; |
413 value->set = ui_textfield_set; |
| 418 } |
418 } |
| 419 |
419 |
| 420 return textfield; |
420 return textfield; |
| 421 } |
421 } |
| 422 |
422 |
| 423 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) { |
423 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { |
| 424 return create_textfield(obj, args, FALSE, FALSE); |
424 return create_textfield(obj, args, FALSE, FALSE); |
| 425 } |
425 } |
| 426 |
426 |
| 427 UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) { |
427 UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) { |
| 428 return create_textfield(obj, args, TRUE, FALSE); |
428 return create_textfield(obj, args, TRUE, FALSE); |
| 429 } |
429 } |
| 430 |
430 |
| 431 UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) { |
431 UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) { |
| 432 return create_textfield(obj, args, FALSE, FALSE); |
432 return create_textfield(obj, args, FALSE, FALSE); |
| 433 } |
433 } |
| 434 |
434 |
| 435 char* ui_textfield_get(UiString *str) { |
435 char* ui_textfield_get(UiString *str) { |
| 436 if(str->value.free) { |
436 if(str->value.free) { |
| 963 evt.eventdata = path; |
963 evt.eventdata = path; |
| 964 evt.intval = index; |
964 evt.intval = index; |
| 965 event->callback(&evt, event->userdata); |
965 event->callback(&evt, event->userdata); |
| 966 } |
966 } |
| 967 |
967 |
| 968 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { |
968 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { |
| 969 Arg xargs[16]; |
969 Arg xargs[16]; |
| 970 int n = 0; |
970 int n = 0; |
| 971 |
971 |
| 972 UiContainerPrivate *ctn = ui_obj_container(obj); |
972 UiContainerPrivate *ctn = ui_obj_container(obj); |
| 973 UI_APPLY_LAYOUT(ctn->layout, args); |
973 UI_APPLY_LAYOUT(ctn->layout, args); |
| 975 Widget parent = ctn->prepare(ctn, xargs, &n); |
975 Widget parent = ctn->prepare(ctn, xargs, &n); |
| 976 // TODO: name |
976 // TODO: name |
| 977 |
977 |
| 978 |
978 |
| 979 PathBar *pathbar = CreatePathBar(parent, xargs, n); |
979 PathBar *pathbar = CreatePathBar(parent, xargs, n); |
| 980 if(!args.getpathelm) { |
980 if(!args->getpathelm) { |
| 981 pathbar->getpathelm= default_pathelm_func; |
981 pathbar->getpathelm= default_pathelm_func; |
| 982 } else { |
982 } else { |
| 983 pathbar->getpathelm = args.getpathelm; |
983 pathbar->getpathelm = args->getpathelm; |
| 984 pathbar->getpathelmdata = args.getpathelmdata; |
984 pathbar->getpathelmdata = args->getpathelmdata; |
| 985 } |
985 } |
| 986 |
986 |
| 987 |
987 |
| 988 XtManageChild(pathbar->widget); |
988 XtManageChild(pathbar->widget); |
| 989 ctn->add(ctn, pathbar->widget); |
989 ctn->add(ctn, pathbar->widget); |
| 990 |
990 |
| 991 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING); |
991 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 992 if (var) { |
992 if (var) { |
| 993 UiString* value = (UiString*)var->value; |
993 UiString* value = (UiString*)var->value; |
| 994 value->obj = pathbar; |
994 value->obj = pathbar; |
| 995 value->get = ui_path_textfield_get; |
995 value->get = ui_path_textfield_get; |
| 996 value->set = ui_path_textfield_set; |
996 value->set = ui_path_textfield_set; |
| 1000 ui_string_set(value, str); |
1000 ui_string_set(value, str); |
| 1001 free(str); |
1001 free(str); |
| 1002 } |
1002 } |
| 1003 } |
1003 } |
| 1004 |
1004 |
| 1005 if(args.onactivate) { |
1005 if(args->onactivate) { |
| 1006 UiEventData *eventdata = malloc(sizeof(UiEventData)); |
1006 UiEventData *eventdata = malloc(sizeof(UiEventData)); |
| 1007 eventdata->callback = args.onactivate; |
1007 eventdata->callback = args->onactivate; |
| 1008 eventdata->userdata = args.onactivatedata; |
1008 eventdata->userdata = args->onactivatedata; |
| 1009 eventdata->obj = obj; |
1009 eventdata->obj = obj; |
| 1010 eventdata->value = 0; |
1010 eventdata->value = 0; |
| 1011 |
1011 |
| 1012 pathbar->updateDir = pathbar_activate; |
1012 pathbar->updateDir = pathbar_activate; |
| 1013 pathbar->updateDirData = eventdata; |
1013 pathbar->updateDirData = eventdata; |