|
|
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.