| 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 UiVar* var = uic_widget_var(obj->ctx, obj->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 |
112 |
| 114 GtkWidget *text_area = gtk_text_view_new(); |
113 GtkWidget *text_area = gtk_text_view_new(); |
| 115 ui_set_name_and_style(text_area, args->name, args->style_class); |
114 ui_set_name_and_style(text_area, args->name, args->style_class); |
| 116 ui_set_widget_groups(obj->ctx, text_area, args->groups); |
115 ui_set_widget_groups(obj->ctx, text_area, args->groups); |
| 117 |
116 |
| 143 GTK_SCROLLED_WINDOW(scroll_area), |
142 GTK_SCROLLED_WINDOW(scroll_area), |
| 144 GTK_POLICY_AUTOMATIC, |
143 GTK_POLICY_AUTOMATIC, |
| 145 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS |
144 GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS |
| 146 SCROLLEDWINDOW_SET_CHILD(scroll_area, text_area); |
145 SCROLLEDWINDOW_SET_CHILD(scroll_area, text_area); |
| 147 |
146 |
| |
147 if(args->width > 0 || args->height > 0) { |
| |
148 int width = args->width; |
| |
149 int height = args->height; |
| |
150 if(width == 0) { |
| |
151 width = -1; |
| |
152 } |
| |
153 if(height == 0) { |
| |
154 height = -1; |
| |
155 } |
| |
156 gtk_widget_set_size_request(scroll_area, width, height); |
| |
157 } |
| |
158 |
| 148 // font and padding |
159 // font and padding |
| 149 //PangoFontDescription *font; |
160 //PangoFontDescription *font; |
| 150 //font = pango_font_description_from_string("Monospace"); |
161 //font = pango_font_description_from_string("Monospace"); |
| 151 //gtk_widget_modify_font(text_area, font); // TODO |
162 //gtk_widget_modify_font(text_area, font); // TODO |
| 152 //pango_font_description_free(font); |
163 //pango_font_description_free(font); |
| 153 |
164 |
| 154 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_area), 2); |
165 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); |
166 gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2); |
| 156 |
167 |
| 157 // add |
168 // add |
| 158 UI_APPLY_LAYOUT2(current, args); |
169 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
| 159 current->container->add(current->container, scroll_area); |
170 UiLayout layout = UI_ARGS2LAYOUT(args); |
| |
171 ct->add(ct, scroll_area, &layout); |
| 160 |
172 |
| 161 // bind value |
173 // bind value |
| 162 if(var) { |
174 if(var) { |
| 163 UiText *value = var->value; |
175 UiText *value = var->value; |
| 164 GtkTextBuffer *buf; |
176 GtkTextBuffer *buf; |
| 596 static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) { |
608 static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) { |
| 597 GtkWidget *textfield = gtk_entry_new(); |
609 GtkWidget *textfield = gtk_entry_new(); |
| 598 ui_set_name_and_style(textfield, args->name, args->style_class); |
610 ui_set_name_and_style(textfield, args->name, args->style_class); |
| 599 ui_set_widget_groups(obj->ctx, textfield, args->groups); |
611 ui_set_widget_groups(obj->ctx, textfield, args->groups); |
| 600 |
612 |
| 601 UiObject* current = uic_current_obj(obj); |
613 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 602 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); |
|
| 603 |
614 |
| 604 UiTextField *uitext = malloc(sizeof(UiTextField)); |
615 UiTextField *uitext = malloc(sizeof(UiTextField)); |
| 605 uitext->obj = obj; |
616 uitext->obj = obj; |
| 606 uitext->var = var; |
617 uitext->var = var; |
| 607 uitext->onchange = args->onchange; |
618 uitext->onchange = args->onchange; |
| 628 } |
639 } |
| 629 if(password) { |
640 if(password) { |
| 630 gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); |
641 gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE); |
| 631 } |
642 } |
| 632 |
643 |
| 633 UI_APPLY_LAYOUT2(current, args); |
644 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
| 634 current->container->add(current->container, textfield); |
645 UiLayout layout = UI_ARGS2LAYOUT(args); |
| |
646 ct->add(ct, textfield, &layout); |
| 635 |
647 |
| 636 if(var) { |
648 if(var) { |
| 637 UiString *value = var->value; |
649 UiString *value = var->value; |
| 638 if(value->value.ptr) { |
650 if(value->value.ptr) { |
| 639 ENTRY_SET_TEXT(textfield, value->value.ptr); |
651 ENTRY_SET_TEXT(textfield, value->value.ptr); |
| 920 } |
932 } |
| 921 return FALSE; |
933 return FALSE; |
| 922 } |
934 } |
| 923 |
935 |
| 924 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { |
936 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { |
| 925 UiObject* current = uic_current_obj(obj); |
|
| 926 |
|
| 927 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); |
937 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); |
| 928 memset(pathtf, 0, sizeof(UiPathTextField)); |
938 memset(pathtf, 0, sizeof(UiPathTextField)); |
| 929 pathtf->obj = obj; |
939 pathtf->obj = obj; |
| 930 pathtf->getpathelm = args->getpathelm; |
940 pathtf->getpathelm = args->getpathelm; |
| 931 pathtf->getpathelmdata = args->getpathelmdata; |
941 pathtf->getpathelmdata = args->getpathelmdata; |
| 944 } |
954 } |
| 945 |
955 |
| 946 pathtf->stack = gtk_stack_new(); |
956 pathtf->stack = gtk_stack_new(); |
| 947 gtk_widget_set_name(pathtf->stack, "path-textfield-box"); |
957 gtk_widget_set_name(pathtf->stack, "path-textfield-box"); |
| 948 |
958 |
| 949 UI_APPLY_LAYOUT2(current, args); |
959 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
| 950 current->container->add(current->container, pathtf->stack); |
960 UiLayout layout = UI_ARGS2LAYOUT(args); |
| |
961 ct->add(ct, pathtf->stack, &layout); |
| 951 |
962 |
| 952 pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); |
963 pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); |
| 953 pathtf->entry = gtk_entry_new(); |
964 pathtf->entry = gtk_entry_new(); |
| 954 gtk_box_append(GTK_BOX(pathtf->entry_box), pathtf->entry); |
965 gtk_box_append(GTK_BOX(pathtf->entry_box), pathtf->entry); |
| 955 gtk_widget_set_hexpand(pathtf->entry, TRUE); |
966 gtk_widget_set_hexpand(pathtf->entry, TRUE); |
| 977 g_signal_connect(entry_cancel, "key-pressed", G_CALLBACK(ui_path_textfield_key_controller), pathtf); |
988 g_signal_connect(entry_cancel, "key-pressed", G_CALLBACK(ui_path_textfield_key_controller), pathtf); |
| 978 |
989 |
| 979 gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box); |
990 gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box); |
| 980 |
991 |
| 981 |
992 |
| 982 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); |
993 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 983 if (var) { |
994 if (var) { |
| 984 UiString* value = (UiString*)var->value; |
995 UiString* value = (UiString*)var->value; |
| 985 value->obj = pathtf; |
996 value->obj = pathtf; |
| 986 value->get = ui_path_textfield_get; |
997 value->get = ui_path_textfield_get; |
| 987 value->set = ui_path_textfield_set; |
998 value->set = ui_path_textfield_set; |
| 1081 gtk_box_set_spacing(GTK_BOX(bb), 0); |
1092 gtk_box_set_spacing(GTK_BOX(bb), 0); |
| 1082 return bb; |
1093 return bb; |
| 1083 } |
1094 } |
| 1084 |
1095 |
| 1085 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { |
1096 UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) { |
| 1086 UiObject* current = uic_current_obj(obj); |
|
| 1087 |
|
| 1088 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); |
1097 UiPathTextField *pathtf = malloc(sizeof(UiPathTextField)); |
| 1089 memset(pathtf, 0, sizeof(UiPathTextField)); |
1098 memset(pathtf, 0, sizeof(UiPathTextField)); |
| 1090 pathtf->obj = obj; |
1099 pathtf->obj = obj; |
| 1091 pathtf->getpathelm = args->getpathelm; |
1100 pathtf->getpathelm = args->getpathelm; |
| 1092 pathtf->getpathelmdata = args->getpathelmdata; |
1101 pathtf->getpathelmdata = args->getpathelmdata; |
| 1116 eventbox, |
1125 eventbox, |
| 1117 "destroy", |
1126 "destroy", |
| 1118 G_CALLBACK(ui_path_textfield_destroy), |
1127 G_CALLBACK(ui_path_textfield_destroy), |
| 1119 pathtf); |
1128 pathtf); |
| 1120 |
1129 |
| 1121 UI_APPLY_LAYOUT2(current, args); |
1130 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
| 1122 current->container->add(current->container, eventbox); |
1131 UiLayout layout = UI_ARGS2LAYOUT(args); |
| |
1132 ct->add(ct, eventbox, &layout); |
| 1123 |
1133 |
| 1124 // hbox as parent for the GtkEntry and GtkButtonBox |
1134 // hbox as parent for the GtkEntry and GtkButtonBox |
| 1125 GtkWidget *hbox = ui_gtk_hbox_new(0); |
1135 GtkWidget *hbox = ui_gtk_hbox_new(0); |
| 1126 pathtf->hbox = hbox; |
1136 pathtf->hbox = hbox; |
| 1127 gtk_container_add(GTK_CONTAINER(eventbox), hbox); |
1137 gtk_container_add(GTK_CONTAINER(eventbox), hbox); |
| 1141 pathtf->entry, |
1151 pathtf->entry, |
| 1142 "key-press-event", |
1152 "key-press-event", |
| 1143 G_CALLBACK(ui_path_textfield_key_press), |
1153 G_CALLBACK(ui_path_textfield_key_press), |
| 1144 pathtf); |
1154 pathtf); |
| 1145 |
1155 |
| 1146 UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING); |
1156 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING); |
| 1147 if (var) { |
1157 if (var) { |
| 1148 UiString* value = (UiString*)var->value; |
1158 UiString* value = (UiString*)var->value; |
| 1149 value->obj = pathtf; |
1159 value->obj = pathtf; |
| 1150 value->get = ui_path_textfield_get; |
1160 value->get = ui_path_textfield_get; |
| 1151 value->set = ui_path_textfield_set; |
1161 value->set = ui_path_textfield_set; |