| 404 text->pos = gtk_text_iter_get_offset(&begin); |
404 text->pos = gtk_text_iter_get_offset(&begin); |
| 405 return text->pos; |
405 return text->pos; |
| 406 } |
406 } |
| 407 |
407 |
| 408 void ui_textarea_showposition(UiText *text, int pos) { |
408 void ui_textarea_showposition(UiText *text, int pos) { |
| 409 ui_textarea_scroll_to(text->obj, pos); |
409 if(text->obj) { |
| |
410 ui_textarea_scroll_to(text->obj, pos); |
| |
411 } |
| 410 } |
412 } |
| 411 |
413 |
| 412 void ui_textarea_setselection(UiText *text, int begin, int end) { |
414 void ui_textarea_setselection(UiText *text, int begin, int end) { |
| 413 GtkTextBuffer *buf = text->data1; |
415 GtkTextBuffer *buf = text->data1; |
| 414 GtkTextIter ib; |
416 GtkTextIter ib; |
| 657 |
660 |
| 658 return 0; |
661 return 0; |
| 659 } |
662 } |
| 660 |
663 |
| 661 void ui_text_undo(UiText *value) { |
664 void ui_text_undo(UiText *value) { |
| |
665 GtkTextBuffer *buf = value->data1; |
| 662 UiUndoMgr *mgr = value->data2; |
666 UiUndoMgr *mgr = value->data2; |
| 663 |
667 |
| 664 if(mgr->cur) { |
668 if(mgr->cur) { |
| 665 UiTextBufOp *op = mgr->cur; |
669 UiTextBufOp *op = mgr->cur; |
| 666 mgr->event = 0; |
670 mgr->event = 0; |
| 667 switch(op->type) { |
671 switch(op->type) { |
| 668 case UI_TEXTBUF_INSERT: { |
672 case UI_TEXTBUF_INSERT: { |
| 669 GtkTextIter begin; |
673 GtkTextIter begin; |
| 670 GtkTextIter end; |
674 GtkTextIter end; |
| 671 gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); |
675 gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start); |
| 672 gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); |
676 gtk_text_buffer_get_iter_at_offset(buf, &end, op->end); |
| 673 gtk_text_buffer_delete(value->obj, &begin, &end); |
677 gtk_text_buffer_delete(buf, &begin, &end); |
| 674 break; |
678 break; |
| 675 } |
679 } |
| 676 case UI_TEXTBUF_DELETE: { |
680 case UI_TEXTBUF_DELETE: { |
| 677 GtkTextIter begin; |
681 GtkTextIter begin; |
| 678 GtkTextIter end; |
682 GtkTextIter end; |
| 679 gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); |
683 gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start); |
| 680 gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); |
684 gtk_text_buffer_get_iter_at_offset(buf, &end, op->end); |
| 681 gtk_text_buffer_insert(value->obj, &begin, op->text, op->len); |
685 gtk_text_buffer_insert(buf, &begin, op->text, op->len); |
| 682 break; |
686 break; |
| 683 } |
687 } |
| 684 } |
688 } |
| 685 mgr->event = 1; |
689 mgr->event = 1; |
| 686 mgr->cur = mgr->cur->prev; |
690 mgr->cur = mgr->cur->prev; |
| 687 } |
691 } |
| 688 } |
692 } |
| 689 |
693 |
| 690 void ui_text_redo(UiText *value) { |
694 void ui_text_redo(UiText *value) { |
| |
695 GtkTextBuffer *buf = value->data1; |
| 691 UiUndoMgr *mgr = value->data2; |
696 UiUndoMgr *mgr = value->data2; |
| 692 |
697 |
| 693 UiTextBufOp *elm = NULL; |
698 UiTextBufOp *elm = NULL; |
| 694 if(mgr->cur) { |
699 if(mgr->cur) { |
| 695 if(mgr->cur->next) { |
700 if(mgr->cur->next) { |
| 704 mgr->event = 0; |
709 mgr->event = 0; |
| 705 switch(op->type) { |
710 switch(op->type) { |
| 706 case UI_TEXTBUF_INSERT: { |
711 case UI_TEXTBUF_INSERT: { |
| 707 GtkTextIter begin; |
712 GtkTextIter begin; |
| 708 GtkTextIter end; |
713 GtkTextIter end; |
| 709 gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); |
714 gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start); |
| 710 gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); |
715 gtk_text_buffer_get_iter_at_offset(buf, &end, op->end); |
| 711 gtk_text_buffer_insert(value->obj, &begin, op->text, op->len); |
716 gtk_text_buffer_insert(buf, &begin, op->text, op->len); |
| 712 break; |
717 break; |
| 713 } |
718 } |
| 714 case UI_TEXTBUF_DELETE: { |
719 case UI_TEXTBUF_DELETE: { |
| 715 GtkTextIter begin; |
720 GtkTextIter begin; |
| 716 GtkTextIter end; |
721 GtkTextIter end; |
| 717 gtk_text_buffer_get_iter_at_offset(value->obj, &begin, op->start); |
722 gtk_text_buffer_get_iter_at_offset(buf, &begin, op->start); |
| 718 gtk_text_buffer_get_iter_at_offset(value->obj, &end, op->end); |
723 gtk_text_buffer_get_iter_at_offset(buf, &end, op->end); |
| 719 gtk_text_buffer_delete(value->obj, &begin, &end); |
724 gtk_text_buffer_delete(buf, &begin, &end); |
| 720 break; |
725 break; |
| 721 } |
726 } |
| 722 } |
727 } |
| 723 mgr->event = 1; |
728 mgr->event = 1; |
| 724 mgr->cur = elm; |
729 mgr->cur = elm; |