ui/gtk/text.c

changeset 112
c3f2f16fa4b8
parent 110
c00e968d018b
equal deleted inserted replaced
111:81c4f73236a4 112:c3f2f16fa4b8
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;

mercurial