home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / AppKit / Draw / graphicsUndo.subproj / GraphicsChange.m < prev    next >
Encoding:
Text File  |  1992-02-10  |  2.2 KB  |  116 lines

  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. - free
  29. {
  30.     [graphics free];
  31.     if (changeDetails != nil) {
  32.     [changeDetails freeObjects];
  33.     [changeDetails free];
  34.     }
  35.  
  36.     return [super free];
  37. }
  38.  
  39. - saveBeforeChange
  40. {
  41.     List *selectedGraphics;
  42.     int i, count;
  43.     id changeDetailClass, changeDetail;
  44.     BOOL changeExpected = NO;
  45.  
  46.     selectedGraphics = [graphicView selectedGraphics];
  47.     count = [selectedGraphics count];
  48.     if (count == 0) {
  49.         [self disable];
  50.     } else {
  51.     changeDetailClass = [self changeDetailClass];
  52.     if (changeDetailClass != nil)
  53.         changeDetails = [[List alloc] init];
  54.     else
  55.         changeExpected = YES;
  56.     graphics = [[List alloc] init];
  57.     for (i = 0; i < count; i++) {
  58.         [graphics addObject:[selectedGraphics objectAt:i]];
  59.         if (changeDetailClass != nil) {
  60.         changeDetail = [[changeDetailClass alloc] initGraphic:[selectedGraphics objectAt:i] change:self];
  61.         changeExpected = changeExpected || [changeDetail changeExpected];
  62.         [changeDetails addObject:changeDetail];
  63.         }
  64.     }
  65.     }
  66.     
  67.     if (!changeExpected)
  68.         [self disable];
  69.     
  70.     return self;
  71. }
  72.  
  73. - undoChange
  74. {
  75.     $phicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(undoDetails)];
  76.     [[graphicView window] flushWindow];
  77.     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
  78.  
  79.     return [super undoChange];
  80. }
  81.  
  82. - redoChange
  83. {
  84.     [graphicView redrawGraphics:graphics afterChangeAgent:self performs:@selector(redoDetails)];
  85.     [[graphicView window] flushWindow];
  86.     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
  87.  
  88.     return [super redoChange];
  89. }
  90.  
  91. - changeDetailClass
  92. /*
  93.  * To be overridden 
  94.  */
  95. {
  96.     return [ChangeDetail class];
  97. }
  98.  
  99. - undoDetails
  100. /*
  101.  * To be overridden 
  102.  */
  103. {
  104.     return self;
  105. }
  106.  
  107. - redoDetails
  108. /*
  109.  * To be overridden 
  110.  */
  111. {
  112.     return self;
  113. }
  114.  
  115. @end
  116.