ui/gtk/text.c

changeset 594
fc854e0ab924
parent 506
02ddf1044cbc
child 659
d6baaa93f7be
equal deleted inserted replaced
593:7061c9cf3b52 594:fc854e0ab924
105 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n"); 105 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
106 } 106 }
107 return buf; 107 return buf;
108 } 108 }
109 109
110 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { 110 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
111 UiObject* current = uic_current_obj(obj); 111 UiObject* current = uic_current_obj(obj);
112 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_TEXT); 112 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_TEXT);
113 113
114 GtkWidget *text_area = gtk_text_view_new(); 114 GtkWidget *text_area = gtk_text_view_new();
115 ui_set_name_and_style(text_area, args.name, args.style_class); 115 ui_set_name_and_style(text_area, args->name, args->style_class);
116 ui_set_widget_groups(obj->ctx, text_area, args.groups); 116 ui_set_widget_groups(obj->ctx, text_area, args->groups);
117 117
118 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR); 118 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR);
119 g_signal_connect( 119 g_signal_connect(
120 text_area, 120 text_area,
121 "realize", 121 "realize",
125 UiTextArea *uitext = malloc(sizeof(UiTextArea)); 125 UiTextArea *uitext = malloc(sizeof(UiTextArea));
126 uitext->obj = obj; 126 uitext->obj = obj;
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 132
133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext); 133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
134 134
135 g_signal_connect( 135 g_signal_connect(
136 text_area, 136 text_area,
153 153
154 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_area), 2); 154 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_area), 2);
155 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2); 155 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2);
156 156
157 // add 157 // add
158 UI_APPLY_LAYOUT1(current, args); 158 UI_APPLY_LAYOUT2(current, args);
159 current->container->add(current->container, scroll_area, TRUE); 159 current->container->add(current->container, scroll_area, TRUE);
160 160
161 // bind value 161 // bind value
162 if(var) { 162 if(var) {
163 UiText *value = var->value; 163 UiText *value = var->value;
590 } 590 }
591 591
592 592
593 593
594 594
595 static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs args) { 595 static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) {
596 GtkWidget *textfield = gtk_entry_new(); 596 GtkWidget *textfield = gtk_entry_new();
597 ui_set_name_and_style(textfield, args.name, args.style_class); 597 ui_set_name_and_style(textfield, args->name, args->style_class);
598 ui_set_widget_groups(obj->ctx, textfield, args.groups); 598 ui_set_widget_groups(obj->ctx, textfield, args->groups);
599 599
600 UiObject* current = uic_current_obj(obj); 600 UiObject* current = uic_current_obj(obj);
601 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); 601 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
602 602
603 UiTextField *uitext = malloc(sizeof(UiTextField)); 603 UiTextField *uitext = malloc(sizeof(UiTextField));
604 uitext->obj = obj; 604 uitext->obj = obj;
605 uitext->var = var; 605 uitext->var = var;
606 uitext->onchange = args.onchange; 606 uitext->onchange = args->onchange;
607 uitext->onchangedata = args.onchangedata; 607 uitext->onchangedata = args->onchangedata;
608 uitext->onactivate = args.onactivate; 608 uitext->onactivate = args->onactivate;
609 uitext->onactivatedata = args.onactivatedata; 609 uitext->onactivatedata = args->onactivatedata;
610 610
611 g_signal_connect( 611 g_signal_connect(
612 textfield, 612 textfield,
613 "destroy", 613 "destroy",
614 G_CALLBACK(ui_textfield_destroy), 614 G_CALLBACK(ui_textfield_destroy),
615 uitext); 615 uitext);
616 616
617 if(args.width > 0) { 617 if(args->width > 0) {
618 // TODO: gtk4 618 // TODO: gtk4
619 #if GTK_MAJOR_VERSION <= 3 619 #if GTK_MAJOR_VERSION <= 3
620 gtk_entry_set_width_chars(GTK_ENTRY(textfield), args.width); 620 gtk_entry_set_width_chars(GTK_ENTRY(textfield), args->width);
621 #endif 621 #endif
622 } 622 }
623 if(frameless) { 623 if(frameless) {
624 // TODO: gtk2legacy workaroud 624 // TODO: gtk2legacy workaroud
625 gtk_entry_set_has_frame(GTK_ENTRY(textfield), FALSE); 625 gtk_entry_set_has_frame(GTK_ENTRY(textfield), FALSE);
626 } 626 }
627 if(password) { 627 if(password) {
628 gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); 628 gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE);
629 } 629 }
630 630
631 UI_APPLY_LAYOUT1(current, args); 631 UI_APPLY_LAYOUT2(current, args);
632 current->container->add(current->container, textfield, FALSE); 632 current->container->add(current->container, textfield, FALSE);
633 633
634 if(var) { 634 if(var) {
635 UiString *value = var->value; 635 UiString *value = var->value;
636 if(value->value.ptr) { 636 if(value->value.ptr) {
645 value->value.ptr = NULL; 645 value->value.ptr = NULL;
646 value->value.free = NULL; 646 value->value.free = NULL;
647 value->obj = GTK_ENTRY(textfield); 647 value->obj = GTK_ENTRY(textfield);
648 } 648 }
649 649
650 if(args.onchange || var) { 650 if(args->onchange || var) {
651 g_signal_connect( 651 g_signal_connect(
652 textfield, 652 textfield,
653 "changed", 653 "changed",
654 G_CALLBACK(ui_textfield_changed), 654 G_CALLBACK(ui_textfield_changed),
655 uitext); 655 uitext);
656 } 656 }
657 657
658 if(args.onactivate) { 658 if(args->onactivate) {
659 g_signal_connect( 659 g_signal_connect(
660 textfield, 660 textfield,
661 "activate", 661 "activate",
662 G_CALLBACK(ui_textfield_activate), 662 G_CALLBACK(ui_textfield_activate),
663 uitext); 663 uitext);
664 } 664 }
665 665
666 return textfield; 666 return textfield;
667 } 667 }
668 668
669 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) { 669 UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
670 return create_textfield(obj, FALSE, FALSE, args); 670 return create_textfield(obj, FALSE, FALSE, args);
671 } 671 }
672 672
673 UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) { 673 UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
674 return create_textfield(obj, TRUE, FALSE, args); 674 return create_textfield(obj, TRUE, FALSE, args);
675 } 675 }
676 676
677 UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) { 677 UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
678 return create_textfield(obj, FALSE, TRUE, args); 678 return create_textfield(obj, FALSE, TRUE, args);
679 } 679 }
680 680
681 681
682 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) { 682 void ui_textfield_destroy(GtkWidget *object, UiTextField *textfield) {
913 pathbar_show_hbox(NULL, pathtf); 913 pathbar_show_hbox(NULL, pathtf);
914 } 914 }
915 return FALSE; 915 return FALSE;
916 } 916 }
917 917
918 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { 918 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
919 UiObject* current = uic_current_obj(obj); 919 UiObject* current = uic_current_obj(obj);
920 920
921 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); 921 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField));
922 memset(pathtf, 0, sizeof(UiPathTextField)); 922 memset(pathtf, 0, sizeof(UiPathTextField));
923 pathtf->obj = obj; 923 pathtf->obj = obj;
924 pathtf->getpathelm = args.getpathelm; 924 pathtf->getpathelm = args->getpathelm;
925 pathtf->getpathelmdata = args.getpathelmdata; 925 pathtf->getpathelmdata = args->getpathelmdata;
926 pathtf->onactivate = args.onactivate; 926 pathtf->onactivate = args->onactivate;
927 pathtf->onactivatedata = args.onactivatedata; 927 pathtf->onactivatedata = args->onactivatedata;
928 pathtf->ondragcomplete = args.ondragcomplete; 928 pathtf->ondragcomplete = args->ondragcomplete;
929 pathtf->ondragcompletedata = args.ondragcompletedata; 929 pathtf->ondragcompletedata = args->ondragcompletedata;
930 pathtf->ondragstart = args.ondragstart; 930 pathtf->ondragstart = args->ondragstart;
931 pathtf->ondragstartdata = args.ondragstartdata; 931 pathtf->ondragstartdata = args->ondragstartdata;
932 pathtf->ondrop = args.ondrop; 932 pathtf->ondrop = args->ondrop;
933 pathtf->ondropdata = args.ondropsdata; 933 pathtf->ondropdata = args->ondropsdata;
934 934
935 if(!pathtf->getpathelm) { 935 if(!pathtf->getpathelm) {
936 pathtf->getpathelm = default_pathelm_func; 936 pathtf->getpathelm = default_pathelm_func;
937 pathtf->getpathelmdata = NULL; 937 pathtf->getpathelmdata = NULL;
938 } 938 }
939 939
940 pathtf->stack = gtk_stack_new(); 940 pathtf->stack = gtk_stack_new();
941 gtk_widget_set_name(pathtf->stack, "path-textfield-box"); 941 gtk_widget_set_name(pathtf->stack, "path-textfield-box");
942 942
943 UI_APPLY_LAYOUT1(current, args); 943 UI_APPLY_LAYOUT2(current, args);
944 current->container->add(current->container, pathtf->stack, FALSE); 944 current->container->add(current->container, pathtf->stack, FALSE);
945 945
946 pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); 946 pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
947 pathtf->entry = gtk_entry_new(); 947 pathtf->entry = gtk_entry_new();
948 gtk_box_append(GTK_BOX(pathtf->entry_box), pathtf->entry); 948 gtk_box_append(GTK_BOX(pathtf->entry_box), pathtf->entry);
971 g_signal_connect(entry_cancel, "key-pressed", G_CALLBACK(ui_path_textfield_key_controller), pathtf); 971 g_signal_connect(entry_cancel, "key-pressed", G_CALLBACK(ui_path_textfield_key_controller), pathtf);
972 972
973 gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box); 973 gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box);
974 974
975 975
976 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); 976 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
977 if (var) { 977 if (var) {
978 UiString* value = (UiString*)var->value; 978 UiString* value = (UiString*)var->value;
979 value->obj = pathtf; 979 value->obj = pathtf;
980 value->get = ui_path_textfield_get; 980 value->get = ui_path_textfield_get;
981 value->set = ui_path_textfield_set; 981 value->set = ui_path_textfield_set;
1074 gtk_box_set_homogeneous(GTK_BOX(bb), FALSE); 1074 gtk_box_set_homogeneous(GTK_BOX(bb), FALSE);
1075 gtk_box_set_spacing(GTK_BOX(bb), 0); 1075 gtk_box_set_spacing(GTK_BOX(bb), 0);
1076 return bb; 1076 return bb;
1077 } 1077 }
1078 1078
1079 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) { 1079 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
1080 UiObject* current = uic_current_obj(obj); 1080 UiObject* current = uic_current_obj(obj);
1081 1081
1082 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); 1082 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField));
1083 memset(pathtf, 0, sizeof(UiPathTextField)); 1083 memset(pathtf, 0, sizeof(UiPathTextField));
1084 pathtf->obj = obj; 1084 pathtf->obj = obj;
1085 pathtf->getpathelm = args.getpathelm; 1085 pathtf->getpathelm = args->getpathelm;
1086 pathtf->getpathelmdata = args.getpathelmdata; 1086 pathtf->getpathelmdata = args->getpathelmdata;
1087 pathtf->onactivate = args.onactivate; 1087 pathtf->onactivate = args->onactivate;
1088 pathtf->onactivatedata = args.onactivatedata; 1088 pathtf->onactivatedata = args->onactivatedata;
1089 pathtf->ondragcomplete = args.ondragcomplete; 1089 pathtf->ondragcomplete = args->ondragcomplete;
1090 pathtf->ondragcompletedata = args.ondragcompletedata; 1090 pathtf->ondragcompletedata = args->ondragcompletedata;
1091 pathtf->ondragstart = args.ondragstart; 1091 pathtf->ondragstart = args->ondragstart;
1092 pathtf->ondragstartdata = args.ondragstartdata; 1092 pathtf->ondragstartdata = args->ondragstartdata;
1093 pathtf->ondrop = args.ondrop; 1093 pathtf->ondrop = args->ondrop;
1094 pathtf->ondropdata = args.ondropsdata; 1094 pathtf->ondropdata = args->ondropsdata;
1095 1095
1096 if(!pathtf->getpathelm) { 1096 if(!pathtf->getpathelm) {
1097 pathtf->getpathelm = default_pathelm_func; 1097 pathtf->getpathelm = default_pathelm_func;
1098 pathtf->getpathelmdata = NULL; 1098 pathtf->getpathelmdata = NULL;
1099 } 1099 }
1110 eventbox, 1110 eventbox,
1111 "destroy", 1111 "destroy",
1112 G_CALLBACK(ui_path_textfield_destroy), 1112 G_CALLBACK(ui_path_textfield_destroy),
1113 pathtf); 1113 pathtf);
1114 1114
1115 UI_APPLY_LAYOUT1(current, args); 1115 UI_APPLY_LAYOUT2(current, args);
1116 current->container->add(current->container, eventbox, FALSE); 1116 current->container->add(current->container, eventbox, FALSE);
1117 1117
1118 // hbox as parent for the GtkEntry and GtkButtonBox 1118 // hbox as parent for the GtkEntry and GtkButtonBox
1119 GtkWidget *hbox = ui_gtk_hbox_new(0); 1119 GtkWidget *hbox = ui_gtk_hbox_new(0);
1120 pathtf->hbox = hbox; 1120 pathtf->hbox = hbox;
1135 pathtf->entry, 1135 pathtf->entry,
1136 "key-press-event", 1136 "key-press-event",
1137 G_CALLBACK(ui_path_textfield_key_press), 1137 G_CALLBACK(ui_path_textfield_key_press),
1138 pathtf); 1138 pathtf);
1139 1139
1140 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING); 1140 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
1141 if (var) { 1141 if (var) {
1142 UiString* value = (UiString*)var->value; 1142 UiString* value = (UiString*)var->value;
1143 value->obj = pathtf; 1143 value->obj = pathtf;
1144 value->get = ui_path_textfield_get; 1144 value->get = ui_path_textfield_get;
1145 value->set = ui_path_textfield_set; 1145 value->set = ui_path_textfield_set;

mercurial