|
|
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.