home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / AppKit / Draw / Inspector.m < prev    next >
Text File  |  1992-05-29  |  7KB  |  267 lines

  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, [graphicRVl]);
  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.     iRVNXApp 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
  267.