This is GenericShaderInspector.m in view mode; [Download] [Up]
// Copyright 1992 Thomas A. Dilligan // All Rights Reserved // // For best results, set tabstop=4 #import "GenericShaderInspector.h" const char *shaderTypes[]={"Unknown","Point","Color","Scalar","String","Surface Shader","Light Shader", "Displacement Shader","Volume Shader","Transformation Shader","Imager Shader"}; @implementation GenericShaderInspector - browserAction:sender; { int selected; int seltype; char str[255]; NXColor color; float floatValue; RtPoint point; char *string; selected=[[browser matrixInColumn:0] selectedRow]; if(selected==[shader shaderArgCount]) { [stringValue setEnabled:NO]; [colorValue setColor:[shader color]]; [colorValue setEnabled:YES]; return self; } seltype=[shader shaderArgType:[shader shaderArgNameAt:selected]]; switch(seltype) { case SLO_TYPE_UNKNOWN: [stringValue setEnabled:NO]; [stringValue setStringValue:"Unknown"]; [colorValue setEnabled:NO]; break; case SLO_TYPE_POINT: [shader getShaderArg:[shader shaderArgNameAt:selected] pointValue:&point]; sprintf(str,"«%3.3f %3.3f %3.3f»",point[0],point[1],point[2]); [stringValue setEnabled:YES]; [stringValue setStringValue:str]; [colorValue setEnabled:NO]; break; case SLO_TYPE_COLOR: [shader getShaderArg:[shader shaderArgNameAt:selected] colorValue:&color]; [stringValue setEnabled:NO]; [colorValue setColor:color]; [colorValue setEnabled:YES]; break; case SLO_TYPE_SCALAR: [shader getShaderArg:[shader shaderArgNameAt:selected] floatValue:&floatValue]; [stringValue setEnabled:YES]; [stringValue setFloatValue:floatValue]; [colorValue setEnabled:NO]; case SLO_TYPE_STRING: [shader getShaderArg:[shader shaderArgNameAt:selected] stringValue:&string]; [stringValue setEnabled:YES]; [stringValue setStringValue:string]; [colorValue setEnabled:NO]; break; case SLO_TYPE_SURFACE: case SLO_TYPE_LIGHT: case SLO_TYPE_DISPLACEMENT: case SLO_TYPE_VOLUME: case SLO_TYPE_TRANSFORMATION: case SLO_TYPE_IMAGER: [stringValue setEnabled:NO]; [stringValue setStringValue:"Unable to Change"]; [colorValue setEnabled:NO]; break; } return self; } - buttonsAction:sender; { if(![[sender selectedCell] tag]) [shader initWithShader:[shader shader]]; [NXApp stopModal:[[sender selectedCell] tag]]; return self; } - colorValueAction:sender; { if([[browser matrixInColumn:0] selectedRow]==[shader shaderArgCount]) [shader setColor:[sender color]]; else if([shader shaderArgType:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]]]==SLO_TYPE_COLOR) [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] colorValue:[colorValue color]]; return self; } - stringValueAction:sender; { int selected; int seltype; float floatValue; RtPoint point; char *string; char *tmp; selected=[[browser matrixInColumn:0] selectedRow]; seltype=[shader shaderArgType:[shader shaderArgNameAt:selected]]; switch(seltype) { default: NXRunAlertPanel("Whoops!","Non fatal error #1\nPlease notify developer.",NULL,NULL,NULL); break; case SLO_TYPE_POINT: tmp=string=(char *)[stringValue stringValue]; for(;*tmp; tmp++) if((*tmp<'0' || *tmp>'9') && *tmp !='.') *tmp=' '; if(sscanf(string,"%f %f %f",&point[0],&point[1],&point[2])==3) [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] pointValue:point]; else NXRunAlertPanel("Whoops!","Unable to read in point.",NULL,NULL,NULL); break; case SLO_TYPE_SCALAR: if(sscanf([stringValue stringValue],"%f",&floatValue)==1) [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] floatValue:floatValue]; else NXRunAlertPanel("Whoops!","Unable to read in scalar.\n",NULL,NULL,NULL); break; case SLO_TYPE_STRING: [shader setShaderArg:[shader shaderArgNameAt:[[browser matrixInColumn:0] selectedRow]] stringValue:[stringValue stringValue]]; break; } return self; } - (int)browser:sender getNumRowsInColumn:(int)column; { return [shader shaderArgCount]+1; } - browser:sender loadCell:cell atRow:(int)row inColumn:(int)column; { char txt[256]; [cell setLeaf:YES]; [cell setTarget:self]; [cell setAction:@selector(browserAction:)]; [cell setTag:row]; if(row < [shader shaderArgCount]) { sprintf(txt,"%s (%s)",[shader shaderArgNameAt:row],shaderTypes[[shader shaderArgType:[shader shaderArgNameAt:row]]]); [cell setStringValue:txt]; } else [cell setStringValue:"shadercolor (Color)"]; return self; } - showSelfAndInspect:aShader; { shader=aShader; [browser setDelegate:self]; [browser setTarget:self]; [browser setAction:@selector(browserAction:)]; [buttons setTarget:self]; [buttons setAction:@selector(buttonsAction:)]; [colorValue setTarget:self]; [colorValue setAction:@selector(colorValueAction:)]; [stringValue setTarget:self]; [stringValue setAction:@selector(stringValueAction:)]; [stringValue setEnabled:NO]; [colorValue setEnabled:NO]; [colorValue setColor:NX_COLORWHITE]; [stringValue setStringValue:" "]; [browser loadColumnZero]; [window orderFront:self]; [NXApp runModalFor:window]; [window close]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.