This is CreateGraphicsChange.m in view mode; [Download] [Up]
#import "drawundo.h" @interface CreateGraphicsChange(PrivateMethods) @end @implementation CreateGraphicsChange - initGraphicView:aGraphicView graphic:aGraphic { [super init]; graphicView = aGraphicView; graphic = aGraphic; startEditingChange = nil; return self; } - free { if (![self hasBeenDone]) [graphic free]; if (startEditingChange) [startEditingChange free]; return [super free]; } #define NEW_STRING NXLocalStringFromTable("Operations", "New %s", NULL, "The operation of creating a new graphical entity by dragging the mouse. The %s is one of Rectangle, Circle, etc.") - (const char *)changeName { char buffer[256]; sprintf(buffer, NEW_STRING, [graphic title]); return NXUniqueString(buffer); } - undoChange { if (startEditingChange) [startEditingChange undoChange]; [graphicView removeGraphic:graphic]; [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; return [super undoChange]; } - redoChange { [graphicView insertGraphic:graphic]; [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; if (startEditingChange) [startEditingChange redoChange]; return [super redoChange]; } - (BOOL)incorporateChange:change /* * ChangeManager will call incorporateChange: if another change * is started while we are still in progress (after we've * been sent startChange but before we've been sent endChange). * We override incorporateChange: because we want to * incorporate a StartEditingGraphicsChange if it happens. * Rather than know how to undo and redo the start-editing stuff, * we'll simply keep a pointer to the StartEditingGraphicsChange * and ask it to undo and redo whenever we undo or redo. */ { if ([change isKindOf:[StartEditingGraphicsChange class]]) { startEditingChange = change; return YES; } else { return NO; } } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.