Annotation of Examples/AppKit/Draw/graphicsUndo.subproj/UngroupGraphicsChange.m, revision 1.1.1.1

1.1       root        1: #import "drawundo.h"
                      2: 
                      3: @interface UngroupGraphicsChange(PrivateMethods)
                      4: 
                      5: @end
                      6: 
                      7: @implementation UngroupGraphicsChange
                      8: 
                      9: - initGraphicView:aGraphicView
                     10: {
                     11:     [super init];
                     12:     graphicView = aGraphicView;
                     13:     changeDetails = nil;
                     14:     groups = nil;
                     15: 
                     16:     return self;
                     17: }
                     18: 
                     19: - free
                     20: {
                     21:     int i, count;
                     22:     id group;
                     23: 
                     24:     if ([self hasBeenDone]) {
                     25:        count = [groups count];
                     26:        for (i = 0; i < count; i++) {
                     27:            group = [groups objectAt:i];
                     28:            [[group subGraphics] empty];
                     29:            [group free];
                     30:        }
                     31:     }
                     32:     [groups free];
                     33:     if (changeDetails != nil) {
                     34:        [changeDetails freeObjects];
                     35:        [changeDetails free];
                     36:     }
                     37:     return [super free];
                     38: }
                     39: 
                     40: - (const char *)changeName
                     41: {
                     42:     return NXLocalStringFromTable("Operations", "Ungroup", NULL, "The operation of ungroup a bunch of graphical entities that are grouped together into a single graphical entity.");
                     43: }
                     44: 
                     45: - saveBeforeChange
                     46: {
                     47:     List *selectedGraphics;
                     48:     int i, count;
                     49:     id g;
                     50:     id changeDetailClass;
                     51: 
                     52:     groups = [[List alloc] init];
                     53:     changeDetailClass = [self changeDetailClass];
                     54:     changeDetails = [[List alloc] init];
                     55: 
                     56:     selectedGraphics = [graphicView selectedGraphics];
                     57:     count = [selectedGraphics count];
                     58:     for (i = 0; i < count; i++) {
                     59:        g = [selectedGraphics objectAt:i];
                     60:        if ([g isKindOf:[Group class]]) {
                     61:            [groups addObject:g];
                     62:            [changeDetails addObject:[[changeDetailClass alloc] initGraphic:g change:self]];
                     63:        }
                     64:     }
                     65:     [changeDetails makeObjectsPerform:@selector(recordGraphicPositionIn:) with:[graphicView graphics]];
                     66: 
                     67:     count = [groups count];
                     68:     if (count == 0)
                     69:         [self disable];
                     70:        
                     71:     return self;
                     72: }
                     73: 
                     74: - undoChange
                     75: {
                     76:     List *allGraphics, *graphics;
                     77:     int i, j, count, graphicCount;
                     78:     NXRect affectedBounds;
                     79:     id group, graphic, detail;
                     80: 
                     81:     allGraphics = [graphicView graphics];
                     82:     count = [changeDetails count];
                     83:     for (i = 0; i < count; i++) {
                     84:         detail = [changeDetails objectAt:i];
                     85:        group = [detail graphic];
                     86:        graphics = [group subGraphics];
                     87:        graphicCount = [graphics count];
                     88:        for (j = 0; j < graphicCount; j++) {
                     89:            graphic = [graphics objectAt:j];
                     90:            [graphic setCacheable:NO];
                     91:            [allGraphics removeObject:graphic];
                     92:        }
                     93:        [allGraphics insertObject:group at:[detail graphicPosition]];
                     94:     }
                     95:     
                     96:     [graphicView getSelection];
                     97:     [graphicView setGroupInSlist:YES];
                     98:     [graphicView getBBox:&affectedBounds of:groups];
                     99:     [graphicView cache:&affectedBounds];
                    100:     [[graphicView window] flushWindow];
                    101:     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
                    102: 
                    103:     return [super undoChange];
                    104: }
                    105: 
                    106: - redoChange
                    107: {
                    108:     List *allGraphics;
                    109:     int k;
                    110:     int i, count;
                    111:     NXRect affectedBounds;
                    112:     id group;
                    113: 
                    114:     [graphicView getBBox:&affectedBounds of:groups];
                    115: 
                    116:     allGraphics = [graphicView graphics];
                    117:     count = [groups count];
                    118:     for (i = 0; i < count; i++) {
                    119:         group = [groups objectAt:i];
                    120:        k = [allGraphics indexOf:group];
                    121:        [allGraphics removeObjectAt:k];
                    122:        [group transferSubGraphicsTo:allGraphics at:k];
                    123:     }
                    124: 
                    125:     [graphicView getSelection];
                    126:     [graphicView resetGroupInSlist];
                    127:     [graphicView cache:&affectedBounds];
                    128:     [[graphicView window] flushWindow];
                    129:     [[[NXApp inspectorPanel] delegate] loadGraphic:[graphicView selectedGraphic]]; 
                    130: 
                    131: 
                    132:     return [super redoChange];
                    133: }
                    134: 
                    135: - changeDetailClass
                    136: {
                    137:     return [OrderChangeDetail class];
                    138: }
                    139: 
                    140: @end

unix.superglobalmegacorp.com

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