Annotation of Examples/AppKit/Draw/textUndo.subproj/TextSelChange.m, revision 1.1.1.1

1.1       root        1: #import "textundo.h"
                      2: 
                      3: @implementation TextSelChange
                      4: 
                      5: /*
                      6:  * The TextSelChange is the workhorse of undoable text. It records the
                      7:  * contents of the selection (via TextSelection objects) before and after
                      8:  * a change is made. By alternately installing and removing the old and new
                      9:  * selections, the original change can be undone and redone.
                     10:  */
                     11: 
                     12: - initView:aView name:(const char *)str
                     13: {
                     14:     [super initView:aView];
                     15: 
                     16:     oldSel = nil;
                     17:     newSel = nil;
                     18: 
                     19:     name = str;
                     20: 
                     21:     return self;
                     22: }
                     23: 
                     24: - free
                     25: {
                     26:     if (newSel) {
                     27:        [newSel free];
                     28:     }
                     29: 
                     30:     if (oldSel) {
                     31:        [oldSel free];
                     32:     }
                     33: 
                     34:     return [super free];
                     35: }
                     36: 
                     37: - (const char *)changeName
                     38: {
                     39:     return name;
                     40: }
                     41: 
                     42: - saveAfterChange
                     43: {
                     44:     newSel = [[[TextSelection alloc] initText:textView] capture];
                     45:     return self;
                     46: }
                     47: 
                     48: - saveBeforeChange
                     49: {
                     50:     NXSelPt start, end;
                     51: 
                     52:     [textView getSel:&start :&end];
                     53:     selStart = start.cp;
                     54:     selEnd = end.cp;
                     55: 
                     56:     oldSel = [TextSelection alloc];
                     57:     [[oldSel initText:textView start:selStart end:selEnd] capture];
                     58:     [oldSel setClickCount:[newSel clickCount]];
                     59: 
                     60:     return self;
                     61: }
                     62: 
                     63: - undoChange
                     64: {
                     65:     [[textView window] disableFlushWindow];
                     66:     [newSel remove];
                     67:     [oldSel install];
                     68:     [[[textView window] reenableFlushWindow] flushWindow];
                     69:     
                     70:     return [super undoChange];
                     71: }
                     72: 
                     73: - redoChange
                     74: {
                     75:     NXRect oldBounds, invalidRect;
                     76:     id delegate;
                     77: 
                     78:     [[textView window] disableFlushWindow];
                     79: 
                     80:     if (delegate = [textView delegate]) {
                     81:        [textView getBounds:&oldBounds];
                     82:        invalidRect = oldBounds;
                     83:        invalidRect.size.width = 0.0;
                     84:        invalidRect.size.height = 0.0;
                     85:     } else {
                     86:        delegate = nil;
                     87:     }
                     88: 
                     89:     [oldSel remove];
                     90:     [newSel install];
                     91: 
                     92:     if (delegate != nil &&
                     93:        [delegate respondsTo:@selector(textDidResize:oldBounds:invalid:)])
                     94:     {
                     95:        [delegate textDidResize:textView
                     96:                       oldBounds:&oldBounds
                     97:                         invalid:&invalidRect];
                     98:     }
                     99: 
                    100:     [[[textView window] reenableFlushWindow] flushWindow];
                    101: 
                    102:     return [super redoChange];
                    103: }
                    104: 
                    105: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.