| 219 |
219 |
| 220 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
220 void ui_textarea_scroll_to(UIWIDGET textarea, int pos) { |
| 221 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
221 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| 222 if(!widget) { |
222 if(!widget) { |
| 223 fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); |
223 fprintf(stderr, "Error: ui_textarea_scroll_to: widget is not a textarea\n"); |
| |
224 return; |
| 224 } |
225 } |
| 225 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
226 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| 226 |
227 |
| 227 GtkTextIter offset; |
228 GtkTextIter offset; |
| 228 gtk_text_buffer_get_iter_at_offset(buf, &offset, pos); |
229 gtk_text_buffer_get_iter_at_offset(buf, &offset, pos); |
| 229 |
230 |
| 230 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(widget), &offset, 0.2, FALSE, 0, 0); |
231 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(widget), &offset, 0.2, FALSE, 0, 0); |
| |
232 } |
| |
233 |
| |
234 void ui_textarea_focus(UIWIDGET textarea) { |
| |
235 gtk_widget_grab_focus(textarea); |
| |
236 } |
| |
237 |
| |
238 void ui_textarea_set_selection(UIWIDGET textarea, int begin, int end) { |
| |
239 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
240 if(!widget) { |
| |
241 fprintf(stderr, "Error: ui_textarea_set_selection: widget is not a textarea\n"); |
| |
242 return; |
| |
243 } |
| |
244 |
| |
245 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| |
246 GtkTextIter ib; |
| |
247 GtkTextIter ie; |
| |
248 gtk_text_buffer_get_iter_at_offset(buf, &ib, begin); |
| |
249 gtk_text_buffer_get_iter_at_offset(buf, &ie, end); |
| |
250 gtk_text_buffer_select_range(buf, &ib, &ie); |
| |
251 } |
| |
252 |
| |
253 void ui_textarea_select_all(UIWIDGET textarea) { |
| |
254 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
255 if(!widget) { |
| |
256 fprintf(stderr, "Error: ui_textarea_select_all: widget is not a textarea\n"); |
| |
257 return; |
| |
258 } |
| |
259 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| |
260 GtkTextIter start; |
| |
261 GtkTextIter end; |
| |
262 gtk_text_buffer_get_bounds(buf, &start, &end); |
| |
263 gtk_text_buffer_select_range(buf, &start, &end); |
| |
264 } |
| |
265 |
| |
266 void ui_textarea_set_editable(UIWIDGET textarea, UiBool editable) { |
| |
267 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
268 if(!widget) { |
| |
269 fprintf(stderr, "Error: ui_textarea_set_editable: widget is not a textarea\n"); |
| |
270 return; |
| |
271 } |
| |
272 gtk_text_view_set_editable(GTK_TEXT_VIEW(widget), editable); |
| |
273 } |
| |
274 |
| |
275 UiBool ui_textarea_is_editable(UIWIDGET textarea) { |
| |
276 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
277 if(!widget) { |
| |
278 fprintf(stderr, "Error: ui_textarea_is_editable: widget is not a textarea\n"); |
| |
279 return 0; |
| |
280 } |
| |
281 return gtk_text_view_get_editable(GTK_TEXT_VIEW(widget)); |
| |
282 } |
| |
283 |
| |
284 void ui_textarea_set_position(UIWIDGET textarea, int pos) { |
| |
285 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
286 if(!widget) { |
| |
287 fprintf(stderr, "Error: ui_textarea_set_position: widget is not a textarea\n"); |
| |
288 return; |
| |
289 } |
| |
290 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| |
291 GtkTextIter iter; |
| |
292 gtk_text_buffer_get_iter_at_offset(buf, &iter, pos); |
| |
293 gtk_text_buffer_place_cursor(buf, &iter); |
| |
294 } |
| |
295 |
| |
296 int ui_textarea_get_position(UIWIDGET textarea) { |
| |
297 GtkWidget *widget = ui_textarea_gettextwidget(textarea); |
| |
298 if(!widget) { |
| |
299 fprintf(stderr, "Error: ui_textarea_get_position: widget is not a textarea\n"); |
| |
300 return 0; |
| |
301 } |
| |
302 GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget)); |
| |
303 GtkTextIter begin; |
| |
304 GtkTextIter end; |
| |
305 gtk_text_buffer_get_selection_bounds(buf, &begin, &end); |
| |
306 return gtk_text_iter_get_offset(&begin); |
| 231 } |
307 } |
| 232 |
308 |
| 233 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
309 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
| 234 return g_object_get_data(G_OBJECT(textarea), "ui_textarea_widget"); |
310 return g_object_get_data(G_OBJECT(textarea), "ui_textarea_widget"); |
| 235 } |
311 } |