ui/gtk/text.c

changeset 506
02ddf1044cbc
parent 505
8002be179741
equal deleted inserted replaced
505:8002be179741 506:02ddf1044cbc
91 G_CALLBACK(selection_handler), 91 G_CALLBACK(selection_handler),
92 uitext); 92 uitext);
93 } 93 }
94 #endif 94 #endif
95 95
96 static GtkTextBuffer* create_textbuffer(UiTextArea *textarea) {
97 GtkTextBuffer *buf = gtk_text_buffer_new(NULL);
98 if(textarea) {
99 g_signal_connect(
100 buf,
101 "changed",
102 G_CALLBACK(ui_textbuf_changed),
103 textarea);
104 } else {
105 fprintf(stderr, "Error: create_textbuffer: textarea == NULL\n");
106 }
107 return buf;
108 }
109
96 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) { 110 UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
97 UiObject* current = uic_current_obj(obj); 111 UiObject* current = uic_current_obj(obj);
98 UiVar* var = uic_widget_var(obj->ctx, current->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);
99 113
100 GtkWidget *text_area = gtk_text_view_new(); 114 GtkWidget *text_area = gtk_text_view_new();
114 uitext->var = var; 128 uitext->var = var;
115 uitext->last_selection_state = 0; 129 uitext->last_selection_state = 0;
116 uitext->onchange = args.onchange; 130 uitext->onchange = args.onchange;
117 uitext->onchangedata = args.onchangedata; 131 uitext->onchangedata = args.onchangedata;
118 132
133 g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
134
119 g_signal_connect( 135 g_signal_connect(
120 text_area, 136 text_area,
121 "destroy", 137 "destroy",
122 G_CALLBACK(ui_textarea_destroy), 138 G_CALLBACK(ui_textarea_destroy),
123 uitext); 139 uitext);
124
125 g_signal_connect(
126 buf,
127 "changed",
128 G_CALLBACK(ui_textbuf_changed),
129 uitext);
130 140
131 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW(); 141 GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
132 gtk_scrolled_window_set_policy( 142 gtk_scrolled_window_set_policy(
133 GTK_SCROLLED_WINDOW(scroll_area), 143 GTK_SCROLLED_WINDOW(scroll_area),
134 GTK_POLICY_AUTOMATIC, 144 GTK_POLICY_AUTOMATIC,
153 UiText *value = var->value; 163 UiText *value = var->value;
154 GtkTextBuffer *buf; 164 GtkTextBuffer *buf;
155 if(value->data1 && value->datatype == UI_TEXT_TYPE_BUFFER) { 165 if(value->data1 && value->datatype == UI_TEXT_TYPE_BUFFER) {
156 buf = value->data1; 166 buf = value->data1;
157 } else { 167 } else {
158 buf = gtk_text_buffer_new(NULL); 168 buf = create_textbuffer(uitext);
159 if(value->value.ptr) { 169 if(value->value.ptr) {
160 gtk_text_buffer_set_text(buf, value->value.ptr, -1); 170 gtk_text_buffer_set_text(buf, value->value.ptr, -1);
161 value->value.free(value->value.ptr); 171 value->value.free(value->value.ptr);
162 } 172 }
163 } 173 }
205 } 215 }
206 216
207 void ui_textarea_restore(UiText *text) { 217 void ui_textarea_restore(UiText *text) {
208 GtkWidget *textarea = text->obj; 218 GtkWidget *textarea = text->obj;
209 if(!text->data1) { 219 if(!text->data1) {
210 text->data1 = gtk_text_buffer_new(NULL); 220 text->data1 = create_textbuffer(g_object_get_data(G_OBJECT(textarea), "ui_textarea"));
211 text->datatype = UI_TEXT_TYPE_BUFFER; 221 text->datatype = UI_TEXT_TYPE_BUFFER;
212 } 222 }
213 gtk_text_view_set_buffer(GTK_TEXT_VIEW(textarea), text->data1); 223 gtk_text_view_set_buffer(GTK_TEXT_VIEW(textarea), text->data1);
214 } 224 }
215 225
796 evt.obj = event->obj; 806 evt.obj = event->obj;
797 evt.window = evt.obj->window; 807 evt.window = evt.obj->window;
798 evt.document = evt.obj->ctx->document; 808 evt.document = evt.obj->ctx->document;
799 evt.eventdata = elm->path; 809 evt.eventdata = elm->path;
800 evt.intval = event->value0; 810 evt.intval = event->value0;
801 e.set = ui_get_setop(); 811 evt.set = ui_get_setop();
802 event->callback(&evt, event->userdata); 812 event->callback(&evt, event->userdata);
803 free(path.ptr); 813 free(path.ptr);
804 } 814 }
805 815
806 int ui_pathtextfield_update(UiPathTextField* pathtf, const char *full_path) { 816 int ui_pathtextfield_update(UiPathTextField* pathtf, const char *full_path) {

mercurial