Annotation of Examples/AppKit/Draw/graphicsUndo.subproj/UngroupGraphicsChange.m, revision 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.