diff -r 9a5f47fbc5c3 -r 458831c574f4 ui/gtk/text.c --- 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); }