215 |
220 |
216 char* ui_textarea_get(UiText *text) { |
221 char* ui_textarea_get(UiText *text) { |
217 if(text->value.ptr) { |
222 if(text->value.ptr) { |
218 text->value.free(text->value.ptr); |
223 text->value.free(text->value.ptr); |
219 } |
224 } |
220 GtkTextBuffer *buf = text->obj; |
225 GtkTextBuffer *buf = text->data1; |
221 GtkTextIter start; |
226 GtkTextIter start; |
222 GtkTextIter end; |
227 GtkTextIter end; |
223 gtk_text_buffer_get_bounds(buf, &start, &end); |
228 gtk_text_buffer_get_bounds(buf, &start, &end); |
224 char *str = gtk_text_buffer_get_text(buf, &start, &end, FALSE); |
229 char *str = gtk_text_buffer_get_text(buf, &start, &end, FALSE); |
225 text->value.ptr = g_strdup(str); |
230 text->value.ptr = g_strdup(str); |
226 text->value.free = (ui_freefunc)g_free; |
231 text->value.free = (ui_freefunc)g_free; |
227 return str; |
232 return str; |
228 } |
233 } |
229 |
234 |
230 void ui_textarea_set(UiText *text, const char *str) { |
235 void ui_textarea_set(UiText *text, const char *str) { |
231 gtk_text_buffer_set_text((GtkTextBuffer*)text->obj, str, -1); |
236 gtk_text_buffer_set_text((GtkTextBuffer*)text->data1, str, -1); |
232 if(text->value.ptr) { |
237 if(text->value.ptr) { |
233 text->value.free(text->value.ptr); |
238 text->value.free(text->value.ptr); |
234 } |
239 } |
235 text->value.ptr = NULL; |
240 text->value.ptr = NULL; |
236 text->value.free = NULL; |
241 text->value.free = NULL; |
238 |
243 |
239 char* ui_textarea_getsubstr(UiText *text, int begin, int end) { |
244 char* ui_textarea_getsubstr(UiText *text, int begin, int end) { |
240 if(text->value.ptr) { |
245 if(text->value.ptr) { |
241 text->value.free(text->value.ptr); |
246 text->value.free(text->value.ptr); |
242 } |
247 } |
243 GtkTextBuffer *buf = text->obj; |
248 GtkTextBuffer *buf = text->data1; |
244 GtkTextIter ib; |
249 GtkTextIter ib; |
245 GtkTextIter ie; |
250 GtkTextIter ie; |
246 gtk_text_buffer_get_iter_at_offset(text->obj, &ib, begin); |
251 gtk_text_buffer_get_iter_at_offset(text->data1, &ib, begin); |
247 gtk_text_buffer_get_iter_at_offset(text->obj, &ie, end); |
252 gtk_text_buffer_get_iter_at_offset(text->data1, &ie, end); |
248 char *str = gtk_text_buffer_get_text(buf, &ib, &ie, FALSE); |
253 char *str = gtk_text_buffer_get_text(buf, &ib, &ie, FALSE); |
249 text->value.ptr = g_strdup(str); |
254 text->value.ptr = g_strdup(str); |
250 text->value.free = (ui_freefunc)g_free; |
255 text->value.free = (ui_freefunc)g_free; |
251 return str; |
256 return str; |
252 } |
257 } |
253 |
258 |
254 void ui_textarea_insert(UiText *text, int pos, char *str) { |
259 void ui_textarea_insert(UiText *text, int pos, char *str) { |
255 GtkTextIter offset; |
260 GtkTextIter offset; |
256 gtk_text_buffer_get_iter_at_offset(text->obj, &offset, pos); |
261 gtk_text_buffer_get_iter_at_offset(text->data1, &offset, pos); |
257 gtk_text_buffer_insert(text->obj, &offset, str, -1); |
262 gtk_text_buffer_insert(text->data1, &offset, str, -1); |
258 if(text->value.ptr) { |
263 if(text->value.ptr) { |
259 text->value.free(text->value.ptr); |
264 text->value.free(text->value.ptr); |
260 } |
265 } |
261 text->value.ptr = NULL; |
266 text->value.ptr = NULL; |
262 text->value.free = NULL; |
267 text->value.free = NULL; |
263 } |
268 } |
264 |
269 |
265 void ui_textarea_setposition(UiText *text, int pos) { |
270 void ui_textarea_setposition(UiText *text, int pos) { |
266 GtkTextIter iter; |
271 GtkTextIter iter; |
267 gtk_text_buffer_get_iter_at_offset(text->obj, &iter, pos); |
272 gtk_text_buffer_get_iter_at_offset(text->data1, &iter, pos); |
268 gtk_text_buffer_place_cursor(text->obj, &iter); |
273 gtk_text_buffer_place_cursor(text->data1, &iter); |
269 } |
274 } |
270 |
275 |
271 int ui_textarea_position(UiText *text) { |
276 int ui_textarea_position(UiText *text) { |
272 GtkTextIter begin; |
277 GtkTextIter begin; |
273 GtkTextIter end; |
278 GtkTextIter end; |
274 gtk_text_buffer_get_selection_bounds(text->obj, &begin, &end); |
279 gtk_text_buffer_get_selection_bounds(text->data1, &begin, &end); |
275 text->pos = gtk_text_iter_get_offset(&begin); |
280 text->pos = gtk_text_iter_get_offset(&begin); |
276 return text->pos; |
281 return text->pos; |
277 } |
282 } |
278 |
283 |
279 void ui_textarea_selection(UiText *text, int *begin, int *end) { |
284 void ui_textarea_selection(UiText *text, int *begin, int *end) { |
280 GtkTextIter b; |
285 GtkTextIter b; |
281 GtkTextIter e; |
286 GtkTextIter e; |
282 gtk_text_buffer_get_selection_bounds(text->obj, &b, &e); |
287 gtk_text_buffer_get_selection_bounds(text->data1, &b, &e); |
283 *begin = gtk_text_iter_get_offset(&b); |
288 *begin = gtk_text_iter_get_offset(&b); |
284 *end = gtk_text_iter_get_offset(&e); |
289 *end = gtk_text_iter_get_offset(&e); |
285 } |
290 } |
286 |
291 |
287 int ui_textarea_length(UiText *text) { |
292 int ui_textarea_length(UiText *text) { |
288 GtkTextBuffer *buf = text->obj; |
293 GtkTextBuffer *buf = text->data1; |
289 GtkTextIter start; |
294 GtkTextIter start; |
290 GtkTextIter end; |
295 GtkTextIter end; |
291 gtk_text_buffer_get_bounds(buf, &start, &end); |
296 gtk_text_buffer_get_bounds(buf, &start, &end); |
292 return gtk_text_iter_get_offset(&end); |
297 return gtk_text_iter_get_offset(&end); |
293 } |
298 } |
294 |
299 |
295 void ui_textarea_remove(UiText *text, int begin, int end) { |
300 void ui_textarea_remove(UiText *text, int begin, int end) { |
296 GtkTextBuffer *buf = text->obj; |
301 GtkTextBuffer *buf = text->data1; |
297 GtkTextIter ib; |
302 GtkTextIter ib; |
298 GtkTextIter ie; |
303 GtkTextIter ie; |
299 gtk_text_buffer_get_iter_at_offset(buf, &ib, begin); |
304 gtk_text_buffer_get_iter_at_offset(buf, &ib, begin); |
300 gtk_text_buffer_get_iter_at_offset(buf, &ie, end); |
305 gtk_text_buffer_get_iter_at_offset(buf, &ie, end); |
301 gtk_text_buffer_delete(buf, &ib, &ie); |
306 gtk_text_buffer_delete(buf, &ib, &ie); |