Annotation of Examples/AppKit/Draw/undo.subproj/Change.m, revision 1.1.1.1

1.1       root        1: #import "change.h"
                      2: 
                      3: /*
                      4:  * Please refer to external reference pages for complete
                      5:  * documentation on using the Change class.
                      6:  */
                      7: 
                      8: @interface Change(PrivateMethods)
                      9: 
                     10: - calcTargetForAction:(SEL)theAction in:aView;
                     11: 
                     12: @end
                     13: 
                     14: @implementation Change
                     15: 
                     16: /* Methods called directly by your code */
                     17: 
                     18: - init
                     19: {
                     20:     [super init];
                     21:     _changeFlags.disabled = NO;
                     22:     _changeFlags.hasBeenDone = NO;
                     23:     _changeFlags.changeInProgress = NO;
                     24:     _changeManager = nil;
                     25:     return self;
                     26: }
                     27: 
                     28: - startChange
                     29: {
                     30:     return [self startChangeIn:nil];
                     31: }
                     32: 
                     33: - startChangeIn:aView
                     34: {
                     35:     _changeFlags.changeInProgress = YES;
                     36:     _changeManager = [NXApp calcTargetForAction:@selector(changeInProgress:)];
                     37: 
                     38:     if (_changeManager == nil && aView != nil)
                     39:         _changeManager = [self calcTargetForAction:@selector(changeInProgress:) in:aView];
                     40: 
                     41:     if(_changeManager != nil) {
                     42:        if ([_changeManager changeInProgress:self] && !_changeFlags.disabled)
                     43:            return self;
                     44:        else
                     45:            return nil;
                     46:     }
                     47: 
                     48:     return self;
                     49: }
                     50: 
                     51: - endChange
                     52: {
                     53:     if (_changeManager == nil || _changeFlags.disabled) {
                     54:        [self free];
                     55:        return nil;
                     56:     } else {
                     57:        _changeFlags.hasBeenDone = YES;
                     58:        _changeFlags.changeInProgress = NO;
                     59:        if ([_changeManager changeComplete:self])
                     60:            return self;
                     61:        else
                     62:            return nil;
                     63:     }
                     64: }
                     65: 
                     66: - changeManager
                     67: {
                     68:     return _changeManager;
                     69: }
                     70: 
                     71: /* Methods called by ChangeManager or by your code */
                     72: 
                     73: - disable
                     74: {
                     75:     _changeFlags.disabled = YES;
                     76:     return self;
                     77: }
                     78: 
                     79: - (BOOL)disabled
                     80: {
                     81:     return _changeFlags.disabled;
                     82: }
                     83: 
                     84: - (BOOL)hasBeenDone
                     85: {
                     86:     return _changeFlags.hasBeenDone;
                     87: }
                     88: 
                     89: - (BOOL)changeInProgress
                     90: {
                     91:     return _changeFlags.changeInProgress;
                     92: }
                     93: 
                     94: - (const char *)changeName
                     95: /*
                     96:  * To be overridden 
                     97:  */
                     98: {
                     99:     return "";
                    100: }
                    101: 
                    102: /* Methods called by ChangeManager */
                    103: /* DO NOT call directly */
                    104: 
                    105: - saveBeforeChange
                    106: /*
                    107:  * To be overridden 
                    108:  */
                    109: {
                    110:     return self;
                    111: }
                    112: 
                    113: - saveAfterChange
                    114: /*
                    115:  * To be overridden 
                    116:  */
                    117: {
                    118:     return self;
                    119: }
                    120: 
                    121: - undoChange
                    122: /*
                    123:  * To be overridden. End with:
                    124:  * return [super undoChange];
                    125:  */
                    126: {
                    127:     _changeFlags.hasBeenDone = NO;
                    128:     return self;
                    129: }
                    130: 
                    131: - redoChange
                    132: /*
                    133:  * To be overridden. End with:
                    134:  * return [super redoChange];
                    135:  */
                    136: {
                    137:     _changeFlags.hasBeenDone = YES;
                    138:     return self;
                    139: }
                    140: 
                    141: - (BOOL)subsumeChange:change
                    142: /*
                    143:  * To be overridden 
                    144:  */
                    145: {
                    146:     return NO;
                    147: }
                    148: 
                    149: - (BOOL)incorporateChange:change
                    150: /*
                    151:  * To be overridden 
                    152:  */
                    153: {
                    154:     return NO;
                    155: }
                    156: 
                    157: - finishChange
                    158: /*
                    159:  * To be overridden 
                    160:  */
                    161: {
                    162:     return self;
                    163: }
                    164: 
                    165: /* Private Methods */
                    166: 
                    167: - calcTargetForAction:(SEL)theAction in:aView
                    168: /*
                    169:  * This method is intended to behave exactly like the Application
                    170:  * method calcTargetForAction:, except that that method always returns
                    171:  * nil if the application is not active, where we do our best to come
                    172:  * up with a target anyway.
                    173:  */
                    174: {
                    175:     id responder, nextResponder;
                    176: 
                    177:     responder = [[aView window] firstResponder];
                    178:     while (![responder respondsTo:theAction]) {
                    179:         nextResponder = nil;
                    180:         if ([responder respondsTo:@selector(nextResponder)])
                    181:             nextResponder = [responder nextResponder];
                    182:        if (nextResponder == nil && [responder isKindOf:[Window class]])
                    183:            nextResponder = [responder delegate];
                    184:        if (nextResponder == nil)
                    185:            nextResponder = NXApp;
                    186:        if (nextResponder == nil && responder == NXApp)
                    187:            nextResponder = [responder delegate];
                    188:        responder = nextResponder;
                    189:     }
                    190:     return responder;
                    191: }
                    192: 
                    193: @end

unix.superglobalmegacorp.com

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