This is InspectFunc.m in view mode; [Download] [Up]
/* InspectFunc.h by Paul Kunz May 1992 * Controls list of user added functions. * * Copyright (C) 1991 The Board of Trustees of * The Leland Stanford Junior University. All Rights Reserved. */ #import "HGraphicView.h" #import "InspectFunc.h" const char InspectFunc_h_rcsid[] = INSPECTFUNC_H_ID; const char InspectFunc_m_rcsid[] = "$Id: InspectFunc.m,v 2.25 1993/08/16 16:35:55 pfkeb Exp $"; #import "HAddColFunction.h" #import "HDrawApp.h" #import "HTuple.h" #import "InspectTuple.h" #import "NewInspector.h" #import "Plot.h" @interface InspectFunc(PrivateMethods) - showMessagesFrom:(HAddColFunction *)funcObj; /* * Displays the messages from the compiling, linking or other messages * from the function funcObj. */ - removeFunc:funcObj; /* * Removes the function funcObj from the function list. */ - updateFuncList; /* * Updates function browser and selected current tuple * in tuple browser. */ - updatePlots:(ntuple) ntuple; /* * Marks as dirty and plots that used the current n-tuple */ - updateTupleList; /* * Updates tupleBrowser if needed. */ @end @implementation InspectFunc - initInspFor:aDraw { NXBundle *bundle; char buffer[MAXPATHLEN+1]; [super initInspFor:aDraw]; bundle = [NXBundle bundleForClass:[self class]]; if ( [bundle getPath:buffer forResource:"InspectFunc" ofType:"nib"] ) { [NXApp loadNibFile:buffer owner:self withNames:NO fromZone:[self zone]]; } [theInspector addView:[contentBox contentView] withName:"Tuple Functions" withSupervisor:self]; [statusText setStringValue:""]; [statusText display]; NXPing(); return self; } - newFunction:sender { HAddColFunction *funcObj; Matrix *browserMatrix; const char *name; int irc, row; List *currentList = [[hDraw inspectTuple] tupleList]; browserMatrix = [tupleBrowser matrixInColumn:0]; row = [browserMatrix selectedRow]; hTuple = [currentList objectAt:row]; if ( !hTuple ) { return self; } [funcNamePanel makeKeyAndOrderFront:self]; [funcNameForm selectTextAt:0]; irc = [NXApp runModalFor:funcNamePanel]; [funcNamePanel orderOut:self]; if ( irc ) { return self; } name = [funcNameForm stringValueAt:0]; funcObj = [[HAddColFunction allocFromZone:[hTuple zone]] initSource:ANSI_C for:hTuple withName:name]; irc = [funcObj saveToTmpFile]; if ( irc != 0 ) { NXRunAlertPanel("Error", "Unable to save template function" " to /tmp", "OK", NULL, NULL ); [funcObj free]; return self; } [statusText setStringValue:"Editing"]; [statusText display]; NXPing(); [[Application workspace] openFile:[funcObj filename]]; funcList = [hTuple functionList]; [funcList addObject:funcObj]; [funcBrowser reloadColumn:0]; irc = [funcList indexOf:funcObj]; [[funcBrowser matrixInColumn:0] selectCellAt:irc :0]; return self; } - newColumnFunction:sender { id inspectTuple; id funcObj; const char *name; int irc; inspectTuple = [hDraw inspectTuple]; hTuple = [inspectTuple currentHTuple]; if ( !hTuple ) { return self; } //hTuple = sender; [funcNamePanel makeKeyAndOrderFront:self]; irc = [NXApp runModalFor:funcNamePanel]; [funcNamePanel orderOut:self]; if ( irc ) { return self; } name = [funcNameForm stringValueAt:0]; funcObj = [[HAddColFunction allocFromZone:[self zone]] initSource:ANSI_C for:hTuple withName:name]; irc = [funcObj saveToTmpFile]; if ( irc != 0 ) { NXRunAlertPanel("Error", "Unable to save template function" " to /tmp", "OK", NULL, NULL ); [funcObj free]; return self; } [statusText setStringValue:"Editing"]; [statusText display]; NXPing(); [[Application workspace] openFile:[funcObj filename]]; funcList = [hTuple functionList]; [funcList addObject:funcObj]; [funcBrowser reloadColumn:0]; return self; } - funcNameOK:sender { List *flist; id funcObj; const char *name; int irc; int i; if (!hTuple) return self; name = [funcNameForm stringValueAt:0]; flist = [hTuple functionList]; if (!flist) return self; i = [flist count]; while (i--) { funcObj = [flist objectAt:i]; if ( !strcmp( name, [funcObj functionName] ) ) { irc = NXRunAlertPanel("Warning", "Function name already in use. " "Reuse same name?", "OK", "Cancel", NULL); if ( irc != NX_ALERTDEFAULT ) { [NXApp stopModal:1]; return self; } } } [NXApp stopModal:0]; return self; } - funcNameCancel:sender { [NXApp stopModal:1]; return self; } - performCompile:sender { List *tupleList; id inspectTuple; id matrix; int row; int irc; matrix = [funcBrowser matrixInColumn:0]; row = [matrix selectedRow]; if ( row < 0 ) { return self; } curFuncObj = [funcList objectAt:row]; matrix = [tupleBrowser matrixInColumn:0]; row = [matrix selectedRow]; inspectTuple = [hDraw inspectTuple]; tupleList = [inspectTuple tupleList]; hTuple = [tupleList objectAt:row]; if ( hTuple != [curFuncObj hTuple] ) { irc = NXRunAlertPanel("Warning", "Function was compiled with different n-tuple", "Proceed", "Cancel", NULL); if ( irc != NX_ALERTDEFAULT ) { return self; } } if ( [self performFunction:curFuncObj with:[hTuple ntuple]] ) { return self; } [self updatePlots:[hTuple ntuple]]; [[hDraw inspectTuple] updateColBrowser]; return self; } - performEdit:sender { Matrix *matrix; int row; matrix = [funcBrowser matrixInColumn:0]; row = [matrix selectedRow]; if ( row < 0 ) { return self; } curFuncObj = [funcList objectAt:row]; [[Application workspace] openFile:[curFuncObj filename]]; return self; } - (int) performFunction:(HAddColFunction *)funcObj with:(ntuple)nt { [statusText setStringValue:"Compiling"]; [statusText display]; NXPing(); if ( [funcObj compile] ) { [self showMessagesFrom:funcObj]; return (-1); } [statusText setStringValue:"Linking"]; [statusText display]; NXPing(); if ( [funcObj link] ) { [self showMessagesFrom:funcObj]; [self removeFunc:funcObj]; return (-1); } [statusText setStringValue:"Executing"]; [statusText display]; NXPing(); if ( [funcObj executeWith:nt] ) { NXRunAlertPanel("Error", "Error executing tuple function", "OK", NULL, NULL ); [self removeFunc:funcObj]; return (-1); } if ( [funcObj unload] ) { [self showMessagesFrom:funcObj]; } [statusText setStringValue:""]; [statusText display]; NXPing(); return 0; } - closeMessageWindow:sender { if ( [[sender selectedCell] tag] == 1 ) { [[Application workspace] openFile:[curFuncObj filename]]; } else { [self removeFunc:curFuncObj]; } NXClose(msgStream); return self; } - tupleBrowserSelected:sender { id browserMatrix; int row; List *currentList = [[hDraw inspectTuple] tupleList]; [graphicView deselectAll:self]; browserMatrix = [tupleBrowser matrixInColumn:0]; row = [browserMatrix selectedRow]; hTuple = [currentList objectAt:row]; [self updateFuncList]; return self; } /* Methods for updating Inspector */ - updateView { [self updateTupleList]; hTuple = [firstPlot hTuple]; [self updateFuncList]; return self; } - updateEmptySelection { [self updateTupleList]; [self updateFuncList]; return self; } /* Delegate Method for NXBrowsers */ - (int) browser: sender fillMatrix: matrix inColumn: (int) column { id inspectTuple; id funcObj, aCell; const char *name; int i, count = 0; if ( sender == tupleBrowser ) { inspectTuple = [hDraw inspectTuple]; count = [inspectTuple fillTupleMatrix:matrix]; } else if (funcList) { count = [funcList count]; for (i = 0; i < count; i++) { [matrix insertRowAt:i]; aCell = [matrix cellAt:i :0]; funcObj = [funcList objectAt:i]; name = [funcObj functionName]; if (name && strcmp(name, "")) { [aCell setStringValue:name]; } else { [aCell setStringValue:"<none>"]; } [aCell setLeaf:YES]; [aCell setLoaded:YES]; } } [matrix setEmptySelectionEnabled:NO]; return count; } @end @implementation InspectFunc(PrivateMetods) - showMessagesFrom:(HAddColFunction *)funcObj { msgStream = [funcObj openMessages]; [[msgScrollView docView] readText:msgStream]; [msgWindow makeKeyAndOrderFront:self]; return self; } - removeFunc:funcObj { [funcList removeObject:funcObj]; [funcBrowser reloadColumn:0]; return self; } - updateFuncList { Matrix *browserMatrix; int i; List *currentList = [[hDraw inspectTuple] tupleList]; i = [currentList indexOf:hTuple]; if (i >= 0) { browserMatrix = [tupleBrowser matrixInColumn:0]; [browserMatrix selectCellAt:i :0]; if (funcList != [hTuple functionList]) { funcList = [hTuple functionList]; } } else { hTuple = nil; funcList = nil; } [funcBrowser reloadColumn:0]; return self; } - updatePlots:(ntuple) nt { List *plist; Plot *plot; display disp; int i, index; index = [curFuncObj colIndex]; plist = [graphicView plotList]; i = [plist count]; while ( i-- ) { plot = [plist objectAt:i]; if ( [plot ntuple] == nt ) { disp = [plot histDisplay]; h_setDirty(disp); [graphicView graphicsPerformNOP:plot]; } } [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - updateTupleList { List *currentList = [[hDraw inspectTuple] tupleList]; int count = [currentList count]; if (count != numTuples) { [tupleBrowser reloadColumn:0]; } numTuples = count; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.