home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / 2D_3D / ShaderInspector / Source / GenericShaderInspector.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  5.1 KB  |  179 lines

  1. //    Copyright 1992  Thomas A. Dilligan
  2. //        All Rights Reserved
  3. //
  4. // For best results, set tabstop=4
  5.  
  6. #import "GenericShaderInspector.h"
  7.  
  8. const char *shaderTypes[]={"Unknown","Point","Color","Scalar","String","Surface Shader","Light Shader",
  9.                    "Displacement Shader","Volume Shader","Transformation Shader","Imager Shader"};
  10.  
  11. @implementation GenericShaderInspector
  12.  
  13. - browserAction:sender;
  14. {
  15.     int selected;
  16.     int seltype;
  17.     char str[255];
  18.     NXColor color;
  19.     float floatValue;
  20.     RtPoint point;
  21.     char *string;
  22.     selected=[[browser matrixInColumn:0] selectedRow];
  23.     if(selected==[shader shaderArgCount])
  24.     {
  25.             [stringValue setEnabled:NO];
  26.             [colorValue setColor:[shader color]];
  27.             [colorValue setEnabled:YES];
  28.             return self;
  29.     }
  30.     
  31.     seltype=[shader shaderArgType:[shader shaderArgNameAt:selected]];
  32.     switch(seltype)
  33.     {
  34.         case SLO_TYPE_UNKNOWN:
  35.             [stringValue setEnabled:NO];
  36.             [stringValue setStringValue:"Unknown"];
  37.             [colorValue setEnabled:NO];
  38.         break;
  39.         case SLO_TYPE_POINT:
  40.             [shader getShaderArg:[shader shaderArgNameAt:selected] pointValue:&point];
  41.             sprintf(str,"«%3.3f %3.3f %3.3f»",point[0],point[1],point[2]);
  42.             [stringValue setEnabled:YES];
  43.             [stringValue setStringValue:str];
  44.             [colorValue setEnabled:NO];
  45.         break;
  46.         case SLO_TYPE_COLOR:
  47.             [shader getShaderArg:[shader shaderArgNameAt:selected] colorValue:&color];
  48.             [stringValue setEnabled:NO];
  49.             [colorValue setColor:color];
  50.             [colorValue setEnabled:YES];
  51.         break;
  52.         case SLO_TYPE_SCALAR:
  53.             [shader getShaderArg:[shader shaderArgNameAt:selected] floatValue:&floatValue];
  54.             [stringValue setEnabled:YES];
  55.             [stringValue setFloatValue:floatValue];
  56.             [colorValue setEnabled:NO];
  57.         case SLO_TYPE_STRING:
  58.             [shader getShaderArg:[shader shaderArgNameAt:selected] stringValue:&string];
  59.             [stringValue setEnabled:YES];
  60.             [stringValue setStringValue:string];
  61.             [colorValue setEnabled:NO];
  62.         break;
  63.         case SLO_TYPE_SURFACE:
  64.         case SLO_TYPE_LIGHT:
  65.         case SLO_TYPE_DISPLACEMENT:
  66.         case SLO_TYPE_VOLUME:
  67.         case SLO_TYPE_TRANSFORMATION:
  68.         case SLO_TYPE_IMAGER:
  69.             [stringValue setEnabled:NO];
  70.             [stringValue setStringValue:"Unable to Change"];
  71.             [colorValue setEnabled:NO];
  72.         break;
  73.     }
  74.     return self;
  75. }
  76.  
  77. - buttonsAction:sender;
  78. {
  79.     if(![[sender selectedCell] tag])
  80.         [shader initWithShader:[shader shader]];
  81.     [NXApp stopModal:[[sender selectedCell] tag]];
  82.     return self;
  83. }
  84.  
  85. - colorValueAction:sender;
  86. {
  87.     if([[browser matrixInColumn:0] selectedRow]==[shader shaderArgCount])
  88.         [shader setColor:[sender color]];
  89.     else
  90.         if([shader shaderArgType:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]]]==SLO_TYPE_COLOR)
  91.             [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] colorValue:[colorValue color]];
  92.     return self;
  93. }
  94.  
  95. - stringValueAction:sender;
  96. {
  97.     int selected;
  98.     int seltype;
  99.     float floatValue;
  100.     RtPoint point;
  101.     char *string;
  102.     char *tmp;
  103.     selected=[[browser matrixInColumn:0] selectedRow];
  104.     seltype=[shader shaderArgType:[shader shaderArgNameAt:selected]];
  105.     switch(seltype)
  106.     {
  107.         default:
  108.             NXRunAlertPanel("Whoops!","Non fatal error #1\nPlease notify developer.",NULL,NULL,NULL);
  109.         break;
  110.         case SLO_TYPE_POINT:
  111.             tmp=string=(char *)[stringValue stringValue];
  112.             for(;*tmp; tmp++)
  113.                 if((*tmp<'0' || *tmp>'9') && *tmp !='.')
  114.                     *tmp=' ';
  115.             if(sscanf(string,"%f %f %f",&point[0],&point[1],&point[2])==3)
  116.                 [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] pointValue:point];            
  117.             else
  118.                 NXRunAlertPanel("Whoops!","Unable to read in point.",NULL,NULL,NULL);
  119.         break;
  120.         case SLO_TYPE_SCALAR:
  121.             if(sscanf([stringValue stringValue],"%f",&floatValue)==1)
  122.                 [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] floatValue:floatValue];            
  123.             else
  124.                 NXRunAlertPanel("Whoops!","Unable to read in scalar.\n",NULL,NULL,NULL);
  125.         break;
  126.         case SLO_TYPE_STRING:
  127.                 [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] stringValue:[stringValue stringValue]];            
  128.         break;
  129.     }
  130.     return self;
  131. }
  132.  
  133. - (int)browser:sender getNumRowsInColumn:(int)column;
  134. {
  135.         return [shader shaderArgCount]+1;
  136. }
  137.  
  138. - browser:sender loadCell:cell atRow:(int)row inColumn:(int)column;
  139. {
  140.     char txt[256];
  141.     [cell setLeaf:YES];
  142.     [cell setTarget:self];
  143.     [cell setAction:@selector(browserAction:)];
  144.     [cell setTag:row];
  145.     if(row < [shader shaderArgCount])
  146.     {
  147.         sprintf(txt,"%s (%s)",[shader shaderArgNameAt:row],shaderTypes[[shader shaderArgType:[shader shaderArgNameAt:row]]]);
  148.         [cell setStringValue:txt];
  149.     }
  150.     else
  151.         [cell setStringValue:"shadercolor (Color)"];
  152.     return self;
  153. }
  154.  
  155. - showSelfAndInspect:aShader;
  156. {
  157.     shader=aShader;
  158.  
  159.     [browser setDelegate:self];
  160.     [browser setTarget:self];
  161.     [browser setAction:@selector(browserAction:)];
  162.     [buttons setTarget:self];
  163.     [buttons setAction:@selector(buttonsAction:)];
  164.     [colorValue setTarget:self];
  165.     [colorValue setAction:@selector(colorValueAction:)];
  166.     [stringValue setTarget:self];
  167.     [stringValue setAction:@selector(stringValueAction:)];
  168.     [stringValue setEnabled:NO];
  169.     [colorValue setEnabled:NO];
  170.     [colorValue setColor:NX_COLORWHITE];
  171.     [stringValue setStringValue:" "];
  172.     [browser loadColumnZero];
  173.     [window orderFront:self];
  174.     [NXApp runModalFor:window];
  175.     [window close];
  176.     return self;
  177. }
  178. @end
  179.