|
|
1.1 ! root 1: #import "drawundo.h" ! 2: ! 3: /* ! 4: * Please refer to external documentation about Draw ! 5: * with Undo for information about what GraphicsChange ! 6: * is and where it fits in. ! 7: */ ! 8: ! 9: @interface GraphicsChange(PrivateMethods) ! 10: ! 11: - undoDetails; ! 12: - redoDetails; ! 13: ! 14: @end ! 15: ! 16: @implementation GraphicsChange ! 17: ! 18: - initGraphicView:aGraphicView ! 19: { ! 20: [super init]; ! 21: graphicView = aGraphicView; ! 22: graphics = nil; ! 23: changeDetails = nil; ! 24: ! 25: return self; ! 26: } ! 27: ! 28: - initGraphicView:aGraphicView forChangeToGraphic:aGraphic ! 29: { ! 30: [self initGraphicView:aGraphicView]; ! 31: graphicsToChange = [[List alloc] initCount:1]; ! 32: [graphicsToChange addObject:aGraphic]; ! 33: return self; ! 34: } ! 35: ! 36: - free ! 37: { ! 38: [graphics free]; ! 39: [graphicsToChange free]; ! 40: if (changeDetails != nil) { ! 41: [changeDetails freeObjects]; ! 42: [changeDetails free]; ! 43: } ! 44: ! 45: return [super free]; ! 46: } ! 47: ! 48: - saveBeforeChange ! 49: { ! 50: List *selectedGraphics; ! 51: int i, count; ! 52: id changeDetailClass, changeDetail; ! 53: BOOL changeExpected = NO; ! 54: ! 55: if (!graphicsToChange) { ! 56: selectedGraphics = [graphicView selectedGraphics]; ! 57: } else { ! 58: selectedGraphics = graphicsToChange; ! 59: } ! 60: count = [selectedGraphics count]; ! 61: if (count == 0) { ! 62: [self disable]; ! 63: } else { ! 64: changeDetailClass = [self changeDetailClass]; ! 65: if (changeDetailClass != nil) ! 66: changeDetails = [[List alloc] init]; ! 67: else ! 68: changeExpected = YES; ! 69: graphics = [[List alloc] init]; ! 70: for (i = 0; i < count; i++) { ! 71: [graphics addObject:[selectedGraphics objectAt:i]]; ! 72: if (changeDetailClass != nil) { ! 73: changeDetail = [[changeDetailClass alloc] initGraphic:[selectedGraphics objectAt:i] change:self]; ! 74: changeExpected = changeExpected || [changeDetail changeExpected]; ! 75: [changeDetails addObject:changeDetail]; ! 76: } ! 77: } ! 78: } ! 79: ! 80: if (!changeExpected) ! 81: [self disable]; ! 82: ! 83: return self; ! 84: } ! 85: ! 86: - undoChange ! 87: { ! 88: [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(undoDetails)]; ! 89: [[graphicView window] flushWindow]; ! 90: [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; ! 91: ! 92: return [super undoChange]; ! 93: } ! 94: ! 95: - redoChange ! 96: { ! 97: [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(redoDetails)]; ! 98: [[graphicView window] flushWindow]; ! 99: [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; ! 100: ! 101: return [super redoChange]; ! 102: } ! 103: ! 104: - changeDetailClass ! 105: /* ! 106: * To be overridden ! 107: */ ! 108: { ! 109: return [ChangeDetail class]; ! 110: } ! 111: ! 112: - undoDetails ! 113: /* ! 114: * To be overridden ! 115: */ ! 116: { ! 117: return self; ! 118: } ! 119: ! 120: - redoDetails ! 121: /* ! 122: * To be overridden ! 123: */ ! 124: { ! 125: return self; ! 126: } ! 127: ! 128: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.