ui/gtk/text.c

changeset 1142
e2a6707aa1e0
parent 1114
388285e877fe
child 1149
76b7664f951e
equal deleted inserted replaced
1141:e37824dd7281 1142:e2a6707aa1e0
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;
562 UiVar *var = data; 564 UiVar *var = data;
563 UiText *value = var->value; 565 UiText *value = var->value;
564 if(!value->data2) { 566 if(!value->data2) {
565 value->data2 = ui_create_undomgr(); 567 value->data2 = ui_create_undomgr();
566 } 568 }
569 GtkTextBuffer *buf = value->data1;
567 UiUndoMgr *mgr = value->data2; 570 UiUndoMgr *mgr = value->data2;
568 if(!mgr->event) { 571 if(!mgr->event) {
569 return; 572 return;
570 } 573 }
571 574
581 elm = next; 584 elm = next;
582 } 585 }
583 } 586 }
584 } 587 }
585 588
586 char *text = gtk_text_buffer_get_text(value->obj, start, end, FALSE); 589 char *text = gtk_text_buffer_get_text(buf, start, end, FALSE);
587 590
588 UiTextBufOp *op = malloc(sizeof(UiTextBufOp)); 591 UiTextBufOp *op = malloc(sizeof(UiTextBufOp));
589 op->prev = NULL; 592 op->prev = NULL;
590 op->next = NULL; 593 op->next = NULL;
591 op->type = UI_TEXTBUF_DELETE; 594 op->type = UI_TEXTBUF_DELETE;
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;

mercurial