This is AttributesInspector.m in view mode; [Download] [Up]
#import "AttributesInspector.h" #import "Tree.h" @implementation AttributesInspector - init { [super init]; view = nil; return self; } - (BOOL)wantsButtons { return NO; } - (BOOL)doesHandleSelection { char buf[MAXPATHLEN + 1]; id bundle; if([self selectionCount] == 1 && [[self selection] isMemberOf:[Tree class]]){ if(!view){ bundle = [NXBundle mainBundle]; [bundle getPath:buf forResource:"AttributesInspector" ofType:"nib"]; [NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]]; } return YES; } return NO; } - ok:sender { return [super ok:sender]; } - revert:sender { [super revert:sender]; [clearAttachment setEnabled:[[self selection] attached]]; [clearSound setEnabled:[[self selection] hasSound]]; [soundView setSound:[[self selection] attachedSound]]; return self; } - changeAttachment:sender { const char *localDirectory; const char *const *localFiles; char buffer[MAXPATHLEN]; id openpanel = [OpenPanel new]; const char *const *fileTypes = {NULL}; if([openpanel runModalForTypes:fileTypes]){ localDirectory = [openpanel directory]; localFiles = [openpanel filenames]; strcpy(buffer,localDirectory); strcat(buffer,"/"); strcat(buffer,*localFiles); [clearAttachment setEnabled:YES]; [[self selection] attachFile:buffer]; } return self; } - clearAttachment:sender { [[self selection] breakAttachment]; [clearAttachment setEnabled:NO]; return self; } - changeSound:sender { const char *localDirectory; const char *const *localFiles; char buffer[MAXPATHLEN]; id openpanel = [OpenPanel new]; const char *const fileTypes[2] = {"snd",NULL}; if([openpanel runModalForTypes:fileTypes]){ localDirectory = [openpanel directory]; localFiles = [openpanel filenames]; strcpy(buffer,localDirectory); strcat(buffer,"/"); strcat(buffer,*localFiles); [clearSound setEnabled:YES]; [[self selection] attachSound:buffer]; [soundView setSound:[[self selection] attachedSound]]; } return self; } - clearSound:sender { [[self selection] breakSound]; [clearSound setEnabled:NO]; return self; } - erase:sender { return self; } - pause:sender { if([pauseButton state]){ [playButton setEnabled:NO]; [recordButton setEnabled:NO]; [stopButton setEnabled:NO]; [soundView pause:self]; } else { [playButton setEnabled:YES]; [recordButton setEnabled:YES]; [stopButton setEnabled:YES]; [soundView resume:self]; } return self; } - play:sender { [playButton setEnabled:NO]; [recordButton setEnabled:NO]; [stopButton setEnabled:YES]; [pauseButton setState:0]; [soundView play:self]; return self; } - record:sender { [recordButton setEnabled:NO]; [playButton setEnabled:NO]; [stopButton setEnabled:YES]; [soundView record:self]; return self; } - stop:sender { [soundView stop:self]; return self; } - scale:sender { [soundView setReductionFactor:[sender floatValue]]; return self; } // SoundView delegate methods - didPlay:sender { [soundMeter stop:self]; [playButton setState:0]; [playButton setEnabled:YES]; [recordButton setState:0]; [recordButton setEnabled:YES]; [pauseButton setState:0]; return self; } - willPlay:sender { [soundMeter setSound:[sender soundBeingProcessed]]; [soundMeter run:self]; return self; } - willRecord:sender { [soundMeter setSound:[sender soundBeingProcessed]]; [soundMeter run:self]; return self; } - didRecord:sender { [soundMeter stop:self]; [playButton setState:0]; [playButton setEnabled:YES]; [recordButton setState:0]; [recordButton setEnabled:YES]; [pauseButton setState:0]; if(![[self selection] hasSound]){ [[self selection] setSound:[soundView sound]]; [clearSound setEnabled:YES]; } return self; } - soundDidChange:sender { if(![[self selection] hasSound]){ [[self selection] setSound:[soundView sound]]; [clearSound setEnabled:YES]; } return self; } - hadError:sender { int err = [[sender soundBeingProcessed] processingError]; if([playButton state]) NXRunAlertPanel("Play error", SNDSoundError(err), "OK", NULL,NULL); else if([recordButton state]) NXRunAlertPanel("Record error", SNDSoundError(err), "OK", NULL,NULL); return [self stop:self]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.