| 405 XtManageChild(textfield); |
405 XtManageChild(textfield); |
| 406 ui_container_add(ctn, textfield); |
406 ui_container_add(ctn, textfield); |
| 407 |
407 |
| 408 ui_set_widget_groups(obj->ctx, textfield, args->groups); |
408 ui_set_widget_groups(obj->ctx, textfield, args->groups); |
| 409 |
409 |
| |
410 UiEventDataExt *eventdata = malloc(sizeof(UiEventDataExt)); |
| |
411 memset(eventdata, 0, sizeof(UiEventDataExt)); |
| |
412 eventdata->obj = obj; |
| |
413 eventdata->callback = args->onactivate; |
| |
414 eventdata->userdata = args->onactivatedata; |
| |
415 eventdata->callback2 = args->onchange; |
| |
416 eventdata->userdata2 = args->onchangedata; |
| |
417 |
| 410 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
418 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 411 if(var) { |
419 if(var) { |
| |
420 eventdata->customdata0 = var; |
| |
421 |
| 412 UiString *value = (UiString*)var->value; |
422 UiString *value = (UiString*)var->value; |
| 413 value->obj = textfield; |
423 value->obj = textfield; |
| 414 value->get = ui_textfield_get; |
424 value->get = ui_textfield_get; |
| 415 value->set = ui_textfield_set; |
425 value->set = ui_textfield_set; |
| 416 |
426 |
| 417 if(value->value.ptr) { |
427 if(value->value.ptr) { |
| 418 ui_textfield_set(value, value->value.ptr); |
428 ui_textfield_set(value, value->value.ptr); |
| 419 } |
429 } |
| 420 } |
430 } |
| 421 |
431 |
| |
432 XtAddCallback( |
| |
433 textfield, |
| |
434 XmNactivateCallback, |
| |
435 (XtCallbackProc)ui_textfield_activate, |
| |
436 eventdata); |
| |
437 XtAddCallback( |
| |
438 textfield, |
| |
439 XmNvalueChangedCallback, |
| |
440 (XtCallbackProc)ui_textfield_value_changed, |
| |
441 eventdata); |
| |
442 XtAddCallback( |
| |
443 textfield, |
| |
444 XmNdestroyCallback, |
| |
445 (XtCallbackProc)ui_destroy_data, |
| |
446 eventdata); |
| |
447 |
| 422 return textfield; |
448 return textfield; |
| |
449 } |
| |
450 |
| |
451 static void textfield_event(UiEventDataExt *eventdata, ui_callback callback, void *userdata) { |
| |
452 if(callback) { |
| |
453 UiVar *var = eventdata->customdata0; |
| |
454 UiString *value = var ? var->value : NULL; |
| |
455 |
| |
456 UiEvent e; |
| |
457 e.obj = eventdata->obj; |
| |
458 e.window = e.obj->window; |
| |
459 e.document = e.obj->ctx->document; |
| |
460 e.eventdata = value; |
| |
461 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0; |
| |
462 e.intval = 0; |
| |
463 e.set = ui_get_setop(); |
| |
464 callback(&e, userdata); |
| |
465 } |
| |
466 } |
| |
467 |
| |
468 void ui_textfield_activate(Widget widget, XtPointer ud, XtPointer cb) { |
| |
469 UiEventDataExt *eventdata = ud; |
| |
470 textfield_event(ud, eventdata->callback, eventdata->userdata); |
| |
471 } |
| |
472 |
| |
473 void ui_textfield_value_changed(Widget widget, XtPointer ud, XtPointer cb) { |
| |
474 UiEventDataExt *eventdata = ud; |
| |
475 if(ui_onchange_events_is_enabled()) { |
| |
476 textfield_event(ud, eventdata->callback2, eventdata->userdata2); |
| |
477 } |
| 423 } |
478 } |
| 424 |
479 |
| 425 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { |
480 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) { |
| 426 return create_textfield(obj, args, FALSE, FALSE); |
481 return create_textfield(obj, args, FALSE, FALSE); |
| 427 } |
482 } |