ui/gtk/text.c

changeset 33
458831c574f4
parent 29
c96169444d88
child 56
87e3a5dc66dd
--- a/ui/gtk/text.c	Sat Apr 12 13:44:53 2014 +0200
+++ b/ui/gtk/text.c	Sat May 10 15:43:22 2014 +0200
@@ -32,6 +32,8 @@
 
 #include "text.h"
 #include "container.h"
+#include "../common/context.h"
+#include "../common/document.h"
 
 static void selection_handler(
         GtkTextBuffer *buf,
@@ -97,6 +99,12 @@
     
     // bind value
     if(value) {
+        GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_area));
+        
+        if(value->value) {
+            gtk_text_buffer_set_text(buf, value->value, -1);
+        }
+        
         value->get = ui_textarea_get;
         value->set = ui_textarea_set;
         value->getsubstr = ui_textarea_getsubstr;
@@ -104,8 +112,8 @@
         value->position = ui_textarea_position;
         value->selection = ui_textarea_selection;
         value->length = ui_textarea_length;
+        value->remove = ui_textarea_remove;
         value->value = NULL;
-        GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_area));
         value->obj = buf;
         if(!value->undomgr) {
             value->undomgr = ui_create_undomgr();
@@ -133,6 +141,17 @@
     return scroll_area;
 }
 
+UIWIDGET ui_textarea_nv(UiObject *obj, char *varname) {
+    UiVar *var = uic_connect_var(obj->ctx, varname, UI_VAR_TEXT);
+    if(var) {
+        UiText *value = var->value;
+        return ui_textarea(obj, value);
+    } else {
+        // TODO: error
+    }
+    return NULL;
+}
+
 char* ui_textarea_get(UiText *text) {
     if(text->value) {
         g_free(text->value);
@@ -201,6 +220,15 @@
     return gtk_text_iter_get_offset(&end);
 }
 
+void ui_textarea_remove(UiText *text, int begin, int end) {
+    GtkTextBuffer *buf = text->obj;
+    GtkTextIter ib;
+    GtkTextIter ie;
+    gtk_text_buffer_get_iter_at_offset(buf, &ib, begin);
+    gtk_text_buffer_get_iter_at_offset(buf, &ie, end);
+    gtk_text_buffer_delete(buf, &ib, &ie);
+}
+
 void ui_textarea_realize_event(GtkWidget *widget, gpointer data) {
     gtk_widget_grab_focus(widget);
 }

mercurial