|
|
1.1 ! root 1: #import "draw.h" ! 2: ! 3: @interface Inspector(PrivateMethods) ! 4: ! 5: - reloadGraphic:(Graphic *)graphic; ! 6: - loadOrReloadGraphic:(Graphic *)graphic; ! 7: ! 8: @end ! 9: ! 10: @implementation Inspector ! 11: ! 12: static void setTitle(Button *button, int row) ! 13: { ! 14: [button setTitle:[[[[button target] itemList] cellAt:row :0] title]]; ! 15: [[[button target] itemList] selectCellAt:row :0]; ! 16: } ! 17: ! 18: - reloadGraphic:(Graphic *)graphic ! 19: /* ! 20: * Loads up the size fields if they have changed since last time ! 21: * we loaded up the panel with this graphic. This is used since we ! 22: * know that none of the things controlled by the InspectorPanel ! 23: * except the size or the fill color can change from event to event ! 24: * (we should probably not make that assumption, but it makes the ! 25: * updating of this panel go much faster and since it has to happen ! 26: * on every event, it seems a worthwhile optimization). ! 27: */ ! 28: { ! 29: NXRect bounds; ! 30: ! 31: if (!graphic) return self; ! 32: [graphic getBounds:&bounds]; ! 33: if (lastSize.width != bounds.size.width) { ! 34: [width setFloatValue:bounds.size.width]; ! 35: lastSize.width = bounds.size.width; ! 36: } ! 37: if (lastSize.height != bounds.size.height) { ! 38: [height setFloatValue:bounds.size.height]; ! 39: lastSize.height = bounds.size.height; ! 40: } ! 41: if ([graphic fill] != [[[filled target] itemList] selectedRow]) setTitle(filled, [graphic fill]); ! 42: if (graphic && !NXEqualColor([fillColor color], [graphic fillColor])) [fillColor setColor:[graphic fillColor]]; ! 43: ! 44: return self; ! 45: } ! 46: ! 47: - loadOrReloadGraphic:(Graphic *)graphic ! 48: { ! 49: if (selectedGraphic == graphic) ! 50: return [self reloadGraphic:graphic]; ! 51: else ! 52: return [self loadGraphic:graphic]; ! 53: } ! 54: ! 55: - loadGraphic:(Graphic *)graphic ! 56: /* ! 57: * Loads up the InspectorPanel with a new graphic's attributes. ! 58: */ ! 59: { ! 60: NXRect bounds; ! 61: ! 62: selectedGraphic = graphic; ! 63: if (!selectedGraphic) return self; ! 64: ! 65: [lineWidthField setFloatValue:[graphic lineWidth]]; ! 66: [lineWidthSlider setFloatValue:[graphic lineWidth]]; ! 67: [lineColor setColor:[graphic lineColor]]; ! 68: [fillColor setColor:[graphic fillColor]]; ! 69: [graphic getBounds:&bounds]; ! 70: [width setFloatValue:bounds.size.width]; ! 71: [height setFloatValue:bounds.size.height]; ! 72: lastSize = bounds.size; ! 73: setTitle(filled, [graphic fill]); ! 74: setTitle(lineCap, [graphic lineCap]); ! 75: setTitle(arrows, [graphic lineArrow]); ! 76: setTitle(lineJoin, [graphic lineJoin]); ! 77: [formEntry setIntValue:[graphic isFormEntry]]; ! 78: ! 79: return self; ! 80: } ! 81: ! 82: - load:(GraphicView *)view ! 83: /* ! 84: * If the view has only one selected graphic, then the panel is loaded with it. ! 85: */ ! 86: { ! 87: graphicView = view; ! 88: [self loadOrReloadGraphic:[view selectedGraphic]]; ! 89: return self; ! 90: } ! 91: ! 92: - initializeGraphic:(Graphic *)graphic ! 93: /* ! 94: * Goes the opposite way of loadGraphic. Gives the Graphic the attributes ! 95: * which are in the InspectorPanel. ! 96: */ ! 97: { ! 98: float value; ! 99: const char *s; ! 100: NXColor color; ! 101: ! 102: s = [lineWidthField stringValue]; ! 103: if (s && s[0] && (value = atof(s))) [graphic setLineWidth:&value]; ! 104: color = [lineColor color]; ! 105: [graphic setLineColor:&color]; ! 106: color = [fillColor color]; ! 107: [graphic setFillColor:&color]; ! 108: [graphic setFill:[[[filled target] itemList] selectedRow]]; ! 109: [graphic setLineCap:[[[lineCap target] itemList] selectedRow]]; ! 110: [graphic setLineArrow:[[[arrows target] itemList] selectedRow]]; ! 111: [graphic setLineJoin:[[[lineJoin target] itemList] selectedRow]]; ! 112: ! 113: return self; ! 114: } ! 115: ! 116: - preset ! 117: { ! 118: [fillColor setColor:NX_COLORWHITE]; ! 119: [lineColor setColor:NX_COLORBLACK]; ! 120: return self; ! 121: } ! 122: ! 123: /* Overridden from superclass */ ! 124: ! 125: - windowDidUpdate:(Window *)sender ! 126: /* ! 127: * Called each time an event occurs. Loads up the panel. ! 128: */ ! 129: { ! 130: [self load:[[NXApp currentDocument] view]]; ! 131: return self; ! 132: } ! 133: ! 134: - changeContinuous:sender ! 135: { ! 136: [[NXColorPanel sharedInstance:NO] setContinuous:([sender intValue] ? YES : NO)]; ! 137: return self; ! 138: } ! 139: ! 140: /* Target/Action methods */ ! 141: ! 142: - changeFormEntry:sender ! 143: { ! 144: [graphicView takeFormEntryStatusFrom:formEntry]; ! 145: return self; ! 146: } ! 147: ! 148: - changeFilled:sender ! 149: { ! 150: [graphicView takeFillValueFrom:[[filled target] itemList]]; ! 151: return self; ! 152: } ! 153: ! 154: - changeLineCap:sender ! 155: { ! 156: [graphicView takeLineCapFrom:[[lineCap target] itemList]]; ! 157: return self; ! 158: } ! 159: ! 160: - changeArrows:sender ! 161: { ! 162: [graphicView takeLineArrowFrom:[[arrows target] itemList]]; ! 163: return self; ! 164: } ! 165: ! 166: - changeLineJoin:sender ! 167: { ! 168: [graphicView takeLineJoinFrom:[[lineJoin target] itemList]]; ! 169: [[graphicView window] makeKeyWindow]; ! 170: return self; ! 171: } ! 172: ! 173: - changeLineWidth:sender ! 174: { ! 175: float linewidth; ! 176: ! 177: linewidth = [sender floatValue]; ! 178: if (sender == lineWidthSlider) { ! 179: if ([NXApp currentEvent]->type == NX_MOUSEDRAGGED) { ! 180: [[graphicView selectedGraphics] makeObjectsPerform:@selector(deselect)]; ! 181: } else { ! 182: [[graphicView selectedGraphics] makeObjectsPerform:@selector(select)]; ! 183: } ! 184: [lineWidthField setFloatValue:linewidth]; ! 185: } else { ! 186: if ([lineWidthSlider maxValue] < linewidth) { ! 187: [lineWidthSlider setMaxValue:linewidth]; ! 188: } ! 189: [lineWidthSlider setFloatValue:linewidth]; ! 190: [[graphicView window] makeKeyWindow]; ! 191: } ! 192: [graphicView takeLineWidthFrom:lineWidthField]; ! 193: return self; ! 194: } ! 195: ! 196: - changeLineColor:sender ! 197: { ! 198: [graphicView takeLineColorFrom:sender]; ! 199: return self; ! 200: } ! 201: ! 202: - changeFillColor:sender ! 203: { ! 204: [graphicView takeFillColorFrom:sender]; ! 205: if ([[[filled target] itemList] selectedRow] == 0) ! 206: setTitle(filled, 2); ! 207: return self; ! 208: } ! 209: ! 210: - changeDimensions:sender ! 211: { ! 212: NXSize size; ! 213: id change; ! 214: ! 215: size.width = [width floatValue]; ! 216: size.height = [height floatValue]; ! 217: change = [[DimensionsGraphicsChange alloc] initGraphicView:graphicView]; ! 218: [change startChange]; ! 219: [graphicView graphicsPerform:@selector(sizeTo:) with:&size]; ! 220: [[[graphicView window] flushWindow] makeKeyWindow]; ! 221: [change endChange]; ! 222: ! 223: return self; ! 224: } ! 225: ! 226: - setFilled:anObject ! 227: { ! 228: Matrix *matrix = [[anObject target] itemList]; ! 229: [matrix setTarget:self]; ! 230: [matrix setAction:@selector(changeFilled:)]; ! 231: [matrix selectCellAt:0 :0]; ! 232: filled = anObject; ! 233: return self; ! 234: } ! 235: ! 236: - setLineJoin:anObject ! 237: { ! 238: Matrix *matrix = [[anObject target] itemList]; ! 239: [matrix setTarget:self]; ! 240: [matrix setAction:@selector(changeLineJoin:)]; ! 241: [matrix selectCellAt:0 :0]; ! 242: lineJoin = anObject; ! 243: return self; ! 244: } ! 245: ! 246: - setLineCap:anObject ! 247: { ! 248: Matrix *matrix = [[anObject target] itemList]; ! 249: [matrix setTarget:self]; ! 250: [matrix setAction:@selector(changeLineCap:)]; ! 251: [matrix selectCellAt:0 :0]; ! 252: lineCap = anObject; ! 253: return self; ! 254: } ! 255: ! 256: - setArrows:anObject ! 257: { ! 258: Matrix *matrix = [[anObject target] itemList]; ! 259: [matrix setTarget:self]; ! 260: [matrix setAction:@selector(changeArrows:)]; ! 261: [matrix selectCellAt:0 :0]; ! 262: arrows = anObject; ! 263: return self; ! 264: } ! 265: ! 266: @end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.