diff -r 979c0e0ee853 -r fe94e0fb9ef3 ui/gtk/text.c --- a/ui/gtk/text.c Fri Mar 28 20:03:49 2014 +0100 +++ b/ui/gtk/text.c Sat Mar 29 12:15:39 2014 +0100 @@ -66,6 +66,8 @@ if(value) { value->get = ui_textarea_get; value->set = ui_textarea_set; + value->getsubstr = ui_textarea_getsubstr; + value->insert = ui_textarea_insert; value->value = NULL; GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_area)); value->obj = buf; @@ -105,9 +107,33 @@ void ui_textarea_set(UiText *text, char *str) { if(text->value) { g_free(text->value); - text->value = NULL; + } + text->value = NULL; + gtk_text_buffer_set_text((GtkTextBuffer*)text->obj, str, -1); +} + +char* ui_textarea_getsubstr(UiText *text, int begin, int end) { + if(text->value) { + g_free(text->value); } - gtk_text_buffer_set_text((GtkTextBuffer*)text->obj, str, -1); + GtkTextBuffer *buf = text->obj; + GtkTextIter ib; + GtkTextIter ie; + gtk_text_buffer_get_iter_at_offset(text->obj, &ib, begin); + gtk_text_buffer_get_iter_at_offset(text->obj, &ie, end); + char *str = gtk_text_buffer_get_text(buf, &ib, &ie, FALSE); + text->value = str; + return str; +} + +void ui_textarea_insert(UiText *text, int pos, char *str) { + if(text->value) { + g_free(text->value); + } + text->value = NULL; + GtkTextIter offset; + gtk_text_buffer_get_iter_at_offset(text->obj, &offset, pos); + gtk_text_buffer_insert(text->obj, &offset, str, -1); } void ui_textarea_realize_event(GtkWidget *widget, gpointer data) {