home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Examples / AppKit / Draw / undo.subproj / MultipleChange.m < prev    next >
Text File  |  1995-08-04  |  2KB  |  100 lines

  1. #import "undochange.h"
  2.  
  3. @implementation MultipleChange
  4.  
  5. - (void)_setName:(NSString *) newString {
  6.     if (!newString || ![name isEqual:newString]) {
  7.         [name autorelease];
  8.     name = [newString copyWithZone:(NSZone *)[self zone]];
  9.     }
  10. }
  11.  
  12. - (id)init
  13. {
  14.     [super init];
  15.     lastChange = nil;
  16.     changes = [[NSMutableArray alloc] init];
  17.     name = nil;
  18.  
  19.     return self;
  20. }
  21.  
  22. - initChangeName:(NSString *)changeName
  23. {
  24.     [self init];
  25.     [self _setName:changeName];
  26.     return self;
  27. }
  28.  
  29. - (void)dealloc
  30. {
  31.     [changes removeAllObjects];
  32.     [changes release];
  33.     [self _setName:nil];
  34.     
  35.     [super dealloc];
  36. }
  37.  
  38. - (NSString *)changeName
  39. {
  40.     if (name)
  41.         return name;
  42.  
  43.     if (lastChange != nil)
  44.     return [lastChange changeName];
  45.  
  46.     return(@"");
  47. }
  48.  
  49. - (void)undoChange
  50. {
  51.     int i;
  52.  
  53.     for (i = [changes count] - 1; i >= 0; i--) {
  54.     [[changes objectAtIndex:i] undoChange];
  55.     }
  56.  
  57.     [super undoChange]; 
  58. }
  59.  
  60. - (void)redoChange
  61. {
  62.     int i, count;
  63.  
  64.     count = [changes count];
  65.     for (i = 0; i < count; i++) {
  66.     [[changes objectAtIndex:i] redoChange];
  67.     }
  68.  
  69.     [super redoChange]; 
  70. }
  71.  
  72. - (BOOL)subsumeChange:change
  73. {
  74.     if (lastChange != nil) {
  75.     return [lastChange subsumeChange:change];
  76.     } else {
  77.     return NO;
  78.     }
  79. }
  80.  
  81. - (BOOL)incorporateChange:change
  82. {
  83.     if (lastChange != nil && [lastChange incorporateChange:change]) {
  84.     return YES;
  85.     }
  86.  
  87.     [changes addObject:change];
  88.     lastChange = change;
  89.     return YES;
  90. }
  91.  
  92. - (void)finishChange
  93. {
  94.     if (lastChange != nil) {
  95.     [lastChange finishChange];
  96.     } 
  97. }
  98.  
  99. @end
  100.