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

1.1       root        1: #import "textundo.h"
                      2: 
                      3: @implementation TextSelection
                      4: 
                      5: /*
                      6:  * The TextSelection class takes a snapshot of the current selection of
                      7:  * a Text object. It remembers the position of the selection and records
                      8:  * the characters in the selection with an RTF stream.
                      9:  */
                     10: 
                     11: - initText:aView
                     12: {
                     13:     NXSelPt selStart, selEnd;
                     14: 
                     15:     [aView getSel:&selStart :&selEnd];
                     16:     return [self initText:aView start:selStart.cp end:selEnd.cp];
                     17: }
                     18: 
                     19: - initText:aView start:(int)startPos end:(int)endPos
                     20: {
                     21:     [super init];
                     22: 
                     23:     text = aView;
                     24:     start = startPos;
                     25:     end = endPos;
                     26: 
                     27:     selectionChars = (NXStream *) 0;
                     28: 
                     29:     if (start == 0 && end == [text textLength]) {
                     30:        allText = YES;
                     31:     } else {
                     32:        allText = NO;
                     33:     }
                     34: 
                     35:     [text getFrame:&frame];
                     36: 
                     37:     return self;
                     38: }
                     39: 
                     40: - free
                     41: {
                     42:     if (selectionChars) {
                     43:        NXCloseMemory(selectionChars, NX_FREEBUFFER);
                     44:     }
                     45: 
                     46:     return [super free];
                     47: }
                     48: 
                     49: - (int)clickCount
                     50: {
                     51:     return clickCount;
                     52: }
                     53: 
                     54: - setClickCount:(int)value
                     55: {
                     56:     clickCount = value;
                     57:     return self;
                     58: }
                     59: 
                     60: /*
                     61:  * The Text object doesn't save everything out in writeRichText:from:to: even
                     62:  * if the bounds specify the entire contents of the object. Things like tab
                     63:  * stops and margins are missing. However, writeRichText: does a better job,
                     64:  * although not perfect.
                     65:  */
                     66: 
                     67: - capture
                     68: {
                     69:     clickCount = [text clickCount];
                     70: 
                     71:     if (start < end || allText) {
                     72:        selectionChars = NXOpenMemory(NULL, 0, NX_READWRITE);
                     73:        if (allText) {
                     74:            [text writeRichText:selectionChars];
                     75:        } else {
                     76:            [text writeRichText:selectionChars from:start to:end];
                     77:        }
                     78:     }
                     79: 
                     80:     return self;
                     81: }
                     82: 
                     83: - install
                     84: {
                     85:     [text setSel:start :start];
                     86:     [text setFrame:&frame];
                     87: 
                     88:     if (selectionChars) {
                     89:        NXSeek(selectionChars, 0, NX_FROMSTART);
                     90: 
                     91:        if (allText) {
                     92:            [text readRichText:selectionChars];
                     93:            [text display];
                     94:        } else {
                     95:            [text replaceSelWithRichText:selectionChars];
                     96:        }
                     97: 
                     98:        [text setSel:start :end];
                     99: 
                    100:     }
                    101: 
                    102:     return self;
                    103: }
                    104: 
                    105: - remove
                    106: {
                    107:     [text setSel:start :end];
                    108:     [text setClickCount:clickCount];
                    109:     [text eraseSelection];
                    110: 
                    111:     return self;
                    112: }
                    113: 
                    114: @end

unix.superglobalmegacorp.com

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