ui/gtk/text.c

changeset 1103
4ba6f75d8966
parent 1068
1c79dbd248f4
equal deleted inserted replaced
1102:c4883a63929b 1103:4ba6f75d8966
127 uitext->ctx = obj->ctx; 127 uitext->ctx = obj->ctx;
128 uitext->var = var; 128 uitext->var = var;
129 uitext->last_selection_state = 0; 129 uitext->last_selection_state = 0;
130 uitext->onchange = args->onchange; 130 uitext->onchange = args->onchange;
131 uitext->onchangedata = args->onchangedata; 131 uitext->onchangedata = args->onchangedata;
132 uitext->action = args->action ? strdup(args->action) : NULL;
132 133
133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); 134 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
134 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area); 135 g_object_set_data(G_OBJECT(text_area), "ui_textarea_widget", text_area);
135 136
136 g_signal_connect( 137 g_signal_connect(
210 211
211 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) { 212 void ui_textarea_destroy(GtkWidget *object, UiTextArea *textarea) {
212 if(textarea->var) { 213 if(textarea->var) {
213 ui_destroy_boundvar(textarea->ctx, textarea->var); 214 ui_destroy_boundvar(textarea->ctx, textarea->var);
214 } 215 }
216 free(textarea->action);
215 free(textarea); 217 free(textarea);
216 } 218 }
217 219
218 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { 220 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) {
219 GtkWidget *widget = ui_textarea_gettextwidget(textarea); 221 GtkWidget *widget = ui_textarea_gettextwidget(textarea);
391 textarea->onchange(&e, textarea->onchangedata); 393 textarea->onchange(&e, textarea->onchangedata);
392 } 394 }
393 395
394 if(value->observers) { 396 if(value->observers) {
395 ui_notify_evt(value->observers, &e); 397 ui_notify_evt(value->observers, &e);
398 }
399
400 if(textarea->action) {
401 uic_action_callback(&e, textarea->action);
396 } 402 }
397 } 403 }
398 404
399 // undo manager functions 405 // undo manager functions
400 406
658 uitext->var = var; 664 uitext->var = var;
659 uitext->onchange = args->onchange; 665 uitext->onchange = args->onchange;
660 uitext->onchangedata = args->onchangedata; 666 uitext->onchangedata = args->onchangedata;
661 uitext->onactivate = args->onactivate; 667 uitext->onactivate = args->onactivate;
662 uitext->onactivatedata = args->onactivatedata; 668 uitext->onactivatedata = args->onactivatedata;
669 uitext->onactivate_action = args->onactivate_action ? strdup(args->onactivate_action) : NULL;
670 uitext->onchange_action = args->onchange_action ? strdup(args->onchange_action) : NULL;
663 671
664 g_signal_connect( 672 g_signal_connect(
665 textfield, 673 textfield,
666 "destroy", 674 "destroy",
667 G_CALLBACK(ui_textfield_destroy), 675 G_CALLBACK(ui_textfield_destroy),
701 value->value.ptr = NULL; 709 value->value.ptr = NULL;
702 value->value.free = NULL; 710 value->value.free = NULL;
703 value->obj = GTK_ENTRY(textfield); 711 value->obj = GTK_ENTRY(textfield);
704 } 712 }
705 713
706 if(args->onchange || var) { 714 if(args->onchange || args->onchange_action || var) {
707 g_signal_connect( 715 g_signal_connect(
708 textfield, 716 textfield,
709 "changed", 717 "changed",
710 G_CALLBACK(ui_textfield_changed), 718 G_CALLBACK(ui_textfield_changed),
711 uitext); 719 uitext);
712 } 720 }
713 721
714 if(args->onactivate) { 722 if(args->onactivate || args->onactivate_action) {
715 g_signal_connect( 723 g_signal_connect(
716 textfield, 724 textfield,
717 "activate", 725 "activate",
718 G_CALLBACK(ui_textfield_activate), 726 G_CALLBACK(ui_textfield_activate),
719 uitext); 727 uitext);
769 int ui_textfield_get_position(UIWIDGET textfield) { 777 int ui_textfield_get_position(UIWIDGET textfield) {
770 return ENTRY_GET_POSITION(textfield); 778 return ENTRY_GET_POSITION(textfield);
771 } 779 }
772 780
773 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) { 781 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) {
782 free(textfield->onactivate_action);
783 free(textfield->onchange_action);
774 free(textfield); 784 free(textfield);
775 } 785 }
776 786
777 void ui_textfield_changed(GtkEditable *editable, UiTextField *textfield) { 787 void ui_textfield_changed(GtkEditable *editable, UiTextField *textfield) {
778 if(!ui_onchange_events_is_enabled()) { 788 if(!ui_onchange_events_is_enabled()) {
779 return; 789 return;
780 } 790 }
781 791
782 UiString *value = textfield->var ? textfield->var->value : NULL; 792 UiString *value = textfield->var ? textfield->var->value : NULL;
783 793
794 UiEvent e;
795 e.obj = textfield->obj;
796 e.window = e.obj->window;
797 e.document = textfield->obj->ctx->document;
798 e.eventdata = value;
799 e.eventdatatype = value ? UI_EVENT_DATA_STRING_VALUE : 0;
800 e.intval = 0;
801 e.set = ui_get_setop();
802
803 if(textfield->onchange) {
804 textfield->onchange(&e, textfield->onchangedata);
805 }
806
807 if(textfield->var) {
808 ui_notify_evt(value->observers, &e);
809 }
810
811 if(textfield->onchange_action) {
812 uic_action_callback(&e, textfield->onchange_action);
813 }
814 }
815
816 void ui_textfield_activate(GtkEntry* self, UiTextField *textfield) {
817 UiString *value = textfield->var ? textfield->var->value : NULL;
818
784 UiEvent e; 819 UiEvent e;
785 e.obj = textfield->obj; 820 e.obj = textfield->obj;
786 e.window = e.obj->window; 821 e.window = e.obj->window;
787 e.document = textfield->obj->ctx->document; 822 e.document = textfield->obj->ctx->document;
788 e.eventdata = value; 823 e.eventdata = value;
789 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0; 824 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0;
790 e.intval = 0; 825 e.intval = 0;
791 e.set = ui_get_setop(); 826 e.set = ui_get_setop();
792 827
793 if(textfield->onchange) {
794 textfield->onchange(&e, textfield->onchangedata);
795 }
796
797 if(textfield->var) {
798 ui_notify_evt(value->observers, &e);
799 }
800 }
801
802 void ui_textfield_activate(GtkEntry* self, UiTextField *textfield) {
803 if(textfield->onactivate) { 828 if(textfield->onactivate) {
804 UiString *value = textfield->var ? textfield->var->value : NULL;
805
806 UiEvent e;
807 e.obj = textfield->obj;
808 e.window = e.obj->window;
809 e.document = textfield->obj->ctx->document;
810 e.eventdata = value;
811 e.eventdatatype = value ? UI_EVENT_DATA_TEXT_VALUE : 0;
812 e.intval = 0;
813 e.set = ui_get_setop();
814 textfield->onactivate(&e, textfield->onactivatedata); 829 textfield->onactivate(&e, textfield->onactivatedata);
830 }
831
832 if(textfield->onactivate_action) {
833 uic_action_callback(&e, textfield->onactivate_action);
815 } 834 }
816 } 835 }
817 836
818 char* ui_textfield_get(UiString *str) { 837 char* ui_textfield_get(UiString *str) {
819 if(str->value.ptr) { 838 if(str->value.ptr) {

mercurial