ui/gtk/text.c

changeset 487
077c5029aaee
parent 486
a5f3abf8b9d1
equal deleted inserted replaced
486:a5f3abf8b9d1 487:077c5029aaee
160 gtk_text_buffer_set_text(buf, value->value.ptr, -1); 160 gtk_text_buffer_set_text(buf, value->value.ptr, -1);
161 value->value.free(value->value.ptr); 161 value->value.free(value->value.ptr);
162 } 162 }
163 } 163 }
164 gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_area), buf); 164 gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_area), buf);
165 value->obj = text_area;
165 value->save = ui_textarea_save; 166 value->save = ui_textarea_save;
166 value->restore = ui_textarea_restore; 167 value->restore = ui_textarea_restore;
167 value->destroy = ui_textarea_text_destroy; 168 value->destroy = ui_textarea_text_destroy;
168 value->get = ui_textarea_get; 169 value->get = ui_textarea_get;
169 value->set = ui_textarea_set; 170 value->set = ui_textarea_set;
203 // NOOP 204 // NOOP
204 } 205 }
205 206
206 void ui_textarea_restore(UiText *text) { 207 void ui_textarea_restore(UiText *text) {
207 GtkWidget *textarea = text->obj; 208 GtkWidget *textarea = text->obj;
209 if(!text->data1) {
210 text->data1 = gtk_text_buffer_new(NULL);
211 text->datatype = UI_TEXT_TYPE_BUFFER;
212 }
208 gtk_text_view_set_buffer(GTK_TEXT_VIEW(textarea), text->data1); 213 gtk_text_view_set_buffer(GTK_TEXT_VIEW(textarea), text->data1);
209 } 214 }
210 215
211 void ui_textarea_text_destroy(UiText *text) { 216 void ui_textarea_text_destroy(UiText *text) {
212 GtkTextBuffer *buf = text->data1; 217 GtkTextBuffer *buf = text->data1;
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);

mercurial