This is GraphicsChange.m in view mode; [Download] [Up]
#import "drawundo.h" /* * Please refer to external documentation about Draw * with Undo for information about what GraphicsChange * is and where it fits in. */ @interface GraphicsChange(PrivateMethods) - undoDetails; - redoDetails; @end @implementation GraphicsChange - initGraphicView:aGraphicView { [super init]; graphicView = aGraphicView; graphics = nil; changeDetails = nil; return self; } - free { [graphics free]; if (changeDetails != nil) { [changeDetails freeObjects]; [changeDetails free]; } return [super free]; } - saveBeforeChange { List *selectedGraphics; int i, count; id changeDetailClass, changeDetail; BOOL changeExpected = NO; selectedGraphics = [graphicView selectedGraphics]; count = [selectedGraphics count]; if (count == 0) { [self disable]; } else { changeDetailClass = [self changeDetailClass]; if (changeDetailClass != nil) changeDetails = [[List alloc] init]; else changeExpected = YES; graphics = [[List alloc] init]; for (i = 0; i < count; i++) { [graphics addObject:[selectedGraphics objectAt:i]]; if (changeDetailClass != nil) { changeDetail = [[changeDetailClass alloc] initGraphic:[selectedGraphics objectAt:i] change:self]; changeExpected = changeExpected || [changeDetail changeExpected]; [changeDetails addObject:changeDetail]; } } } if (!changeExpected) [self disable]; return self; } - undoChange { [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(undoDetails)]; [[graphicView window] flushWindow]; [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; return [super undoChange]; } - redoChange { [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(redoDetails)]; [[graphicView window] flushWindow]; [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; return [super redoChange]; } - changeDetailClass /* * To be overridden */ { return [ChangeDetail class]; } - undoDetails /* * To be overridden */ { return self; } - redoDetails /* * To be overridden */ { return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.