ui/gtk/text.c

changeset 12
fe94e0fb9ef3
parent 9
e70e855cea89
child 22
bcf880b29bc3
--- 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) {

mercurial