Annotation of Examples/AppKit/Draw/GridView.m, revision 1.1

1.1     ! root        1: #import "draw.h"
        !             2: 
        !             3: @implementation GridView
        !             4: /*
        !             5:  * This class is the heart of the Grid Inspector modal panel.
        !             6:  * It implements the draggable grid.  It also provides the external
        !             7:  * interface (i.e. the runModalForGraphicView: method) to running
        !             8:  * the panel.  It is a good example of a modal panel.
        !             9:  * See the Interface Builder file for a better understanding of
        !            10:  * the outlets and actions sent by controls in the window containing
        !            11:  * the GridView.
        !            12:  */
        !            13: 
        !            14: - runModalForGraphicView:(GraphicView *)view
        !            15: {
        !            16:     int gridSpacing;
        !            17:     float gridGray;
        !            18: 
        !            19:     if (graphicView != view) {
        !            20:        graphicView = view;
        !            21:        gridSpacing = [view gridSpacing];
        !            22:        [spacing setIntValue:(gridSpacing >= 4 ? gridSpacing : 10)];
        !            23:        gridGray = [view gridGray];
        !            24:        [grayField setFloatValue:gridGray];
        !            25:        [graySlider setFloatValue:gridGray];
        !            26:        [self display];
        !            27:     }
        !            28: 
        !            29:     [NXApp runModalFor:window];
        !            30:     [window orderOut:self];
        !            31: 
        !            32:     return self;
        !            33: }
        !            34: 
        !            35: - drawGrid:(int)grid
        !            36: {
        !            37:     NXCoord x, y, max, increment;
        !            38: 
        !            39:     increment = (NXCoord)grid;
        !            40:     max = bounds.origin.y + bounds.size.height;
        !            41:     for (y = bounds.origin.y; y < max; y += increment) {
        !            42:        PSmoveto(0.0, y);
        !            43:        PSlineto(bounds.size.width, y);
        !            44:     }
        !            45:     max = bounds.origin.x + bounds.size.width;
        !            46:     for (x = bounds.origin.x; x < max; x += increment) {
        !            47:        PSmoveto(x, 0.0);
        !            48:        PSlineto(x, bounds.size.height);
        !            49:     }
        !            50:     PSstroke();
        !            51: 
        !            52:     return self;
        !            53: }
        !            54: 
        !            55: - drawSelf:(const NXRect *)rects :(int)rectCount
        !            56: {
        !            57:     int grid;
        !            58:     float gray;
        !            59: 
        !            60:     grid = [spacing intValue];
        !            61:     grid = MAX(grid, 0.0);
        !            62:     PSsetgray(NX_WHITE);
        !            63:     NXRectFillList(rects, rectCount);
        !            64:     if (grid >= 4) {
        !            65:        gray = [grayField floatValue];
        !            66:        gray = MIN(gray, 1.0);
        !            67:        gray = MAX(gray, 0.0);
        !            68:        PSsetgray(gray);
        !            69:        PSsetlinewidth(0.0);
        !            70:        [self drawGrid:grid];
        !            71:     }
        !            72:     PSsetgray(NX_BLACK);
        !            73:     NXFrameRect(&bounds);
        !            74: 
        !            75:     return self;
        !            76: }
        !            77: 
        !            78: - mouseDown:(NXEvent *)event
        !            79: {
        !            80:     NXPoint p, start;
        !            81:     int grid, gridCount;
        !            82: 
        !            83:     start = event->location;
        !            84:     [self convertPoint:&start fromView:nil];
        !            85:     grid = MAX([spacing intValue], 1.0);
        !            86:     gridCount = (int)MAX(start.x, start.y) / grid;
        !            87:     gridCount = MAX(gridCount, 1.0);
        !            88: 
        !            89:     [window addToEventMask:NX_MOUSEDRAGGEDMASK|NX_MOUSEUPMASK];
        !            90: 
        !            91:     event = [NXApp getNextEvent:NX_MOUSEDRAGGEDMASK|NX_MOUSEUPMASK];
        !            92:     while (event->type != NX_MOUSEUP) {
        !            93:        p = event->location;
        !            94:        [self convertPoint:&p fromView:nil];
        !            95:        grid = (int)MAX(p.x, p.y) / gridCount;
        !            96:        grid = MAX(grid, 1.0);
        !            97:        if (grid != [spacing intValue]) {
        !            98:            [form abortEditing];
        !            99:            [spacing setIntValue:grid];
        !           100:            [self display];
        !           101:        }
        !           102:        event = [NXApp getNextEvent:NX_MOUSEDRAGGEDMASK|NX_MOUSEUPMASK];
        !           103:     }
        !           104: 
        !           105:     return self;
        !           106: }
        !           107: 
        !           108: /* Target/Action methods */
        !           109: 
        !           110: - show:sender
        !           111: {
        !           112:     [NXApp stopModal];
        !           113:     [graphicView setGridSpacing:[spacing intValue] andGray:[grayField floatValue]];
        !           114:     [graphicView setGridVisible:YES];
        !           115:     return self; 
        !           116: }
        !           117: 
        !           118: - off:sender
        !           119: {
        !           120:     [NXApp stopModal];
        !           121:     [graphicView setGridSpacing:1];
        !           122:     return self;
        !           123: }
        !           124: 
        !           125: - cancel:sender
        !           126: {
        !           127:     [NXApp stopModal];
        !           128:     return self;
        !           129: }
        !           130: 
        !           131: - changeSpacing:sender
        !           132: {
        !           133:     return [self display];
        !           134: }
        !           135: 
        !           136: - changeGray:sender
        !           137: {
        !           138:     if (sender == graySlider) {
        !           139:        [form abortEditing];
        !           140:        [grayField setFloatValue:[sender floatValue]];
        !           141:     } else {
        !           142:        [graySlider setFloatValue:[sender floatValue]];
        !           143:     }
        !           144:     return [self display];
        !           145: }
        !           146: 
        !           147: /* IB outlet-setting methods */
        !           148: 
        !           149: - setAppIconButton:anObject
        !           150: {
        !           151:     [anObject setIcon:"appIcon"];
        !           152:     return self;
        !           153: }
        !           154: 
        !           155: @end

unix.superglobalmegacorp.com

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