Annotation of Examples/AppKit/Draw/graphicsUndo.subproj/CreateGraphicsChange.m, revision 1.1

1.1     ! root        1: #import "drawundo.h"
        !             2: 
        !             3: @interface CreateGraphicsChange(PrivateMethods)
        !             4: 
        !             5: @end
        !             6: 
        !             7: @implementation CreateGraphicsChange
        !             8: 
        !             9: - initGraphicView:aGraphicView graphic:aGraphic
        !            10: {
        !            11:     [super init];
        !            12:     graphicView = aGraphicView;
        !            13:     graphic = aGraphic;
        !            14:     startEditingChange = nil;
        !            15: 
        !            16:     return self;
        !            17: }
        !            18: 
        !            19: - free
        !            20: {
        !            21:     if (![self hasBeenDone])
        !            22:         [graphic free];
        !            23:     if (startEditingChange)
        !            24:         [startEditingChange free];
        !            25:     return [super free];
        !            26: }
        !            27: 
        !            28: #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.")
        !            29: 
        !            30: - (const char *)changeName
        !            31: {
        !            32:     char buffer[256];
        !            33:     sprintf(buffer, NEW_STRING, [graphic title]);
        !            34:     return NXUniqueString(buffer);
        !            35: }
        !            36: 
        !            37: - undoChange
        !            38: {
        !            39:     if (startEditingChange)
        !            40:         [startEditingChange undoChange];
        !            41:     [graphicView removeGraphic:graphic];
        !            42:     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
        !            43:     return [super undoChange];
        !            44: }
        !            45: 
        !            46: - redoChange
        !            47: {
        !            48:     [graphicView insertGraphic:graphic];
        !            49:     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]];
        !            50:     if (startEditingChange)
        !            51:         [startEditingChange redoChange];
        !            52:     return [super redoChange];
        !            53: }
        !            54: 
        !            55: - (BOOL)incorporateChange:change
        !            56: /*
        !            57:  * ChangeManager will call incorporateChange: if another change
        !            58:  * is started while we are still in progress (after we've 
        !            59:  * been sent startChange but before we've been sent endChange). 
        !            60:  * We override incorporateChange: because we want to
        !            61:  * incorporate a StartEditingGraphicsChange if it happens.
        !            62:  * Rather than know how to undo and redo the start-editing stuff,
        !            63:  * we'll simply keep a pointer to the StartEditingGraphicsChange
        !            64:  * and ask it to undo and redo whenever we undo or redo.
        !            65:  */
        !            66: {
        !            67:     if ([change isKindOf:[StartEditingGraphicsChange class]]) {
        !            68:         startEditingChange = change;
        !            69:         return YES;
        !            70:     } else {
        !            71:         return NO;
        !            72:     }
        !            73: }
        !            74: 
        !            75: @end

unix.superglobalmegacorp.com

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