This is a3DViewerView.m in view mode; [Download] [Up]
#import <appkit/Application.h>
#import <appkit/Window.h>
#import <appkit/Menu.h>
#import <appkit/MenuCell.h>
#import <appkit/Text.h>
#import <appkit/Form.h>
#import <soundkit/Sound.h>
#import <ldsyms.h>
#import <sys/loader.h>
#import <strings.h>
#import <libc.h>
#import <text/pathutil.h>
#import "a3DViewerView.h"
#import "CubeView.h"
static struct mach_header *header; // The header used for loading
static id customSubmenu; // Submenu handle for possible extension
static id inspectorPanel;
static id fileName;
static id parameterForm;
static id recordButton;
static id stopButton;
static id playButton;
static id deleteButton;
static id tmpSound;
@implementation a3DViewerView
+ setCustomComponentData:(struct mach_header *)hd customMenu:(id)subMenu
{
id box;
id mCell;
id classObj;
header = hd;
customSubmenu = subMenu;
mCell = [customSubmenu addItem:"3D Viewer"
action:@selector(showAlert)
keyEquivalent:0];
classObj = [[a3DViewerView alloc] init];
[mCell setTarget:classObj];
[customSubmenu display];
inspectorPanel = [NXApp loadNibSection:"Inspector.nib" owner:classObj
withNames:YES fromHeader:header];
box = NXGetNamedObject("3DFileBox", inspectorPanel);
fileName = NXGetNamedObject("3DFileName", box);
box = NXGetNamedObject("3DParameterBox", inspectorPanel);
parameterForm = NXGetNamedObject("3DForm", box);
[parameterForm setAction:@selector(setPhi) at:0];
[parameterForm setAction:@selector(setTheta) at:1];
[parameterForm setAction:@selector(setInvdist) at:2];
box = NXGetNamedObject("3DSoundButtonBox", inspectorPanel);
recordButton = NXGetNamedObject("3DRecordSoundButton", box);
[recordButton setAction:@selector(recordSound:)];
stopButton = NXGetNamedObject("3DStopSoundButton", box);
[stopButton setAction:@selector(stopSound:)];
playButton = NXGetNamedObject("3DPlaySoundButton", box);
[playButton setAction:@selector(playSound:)];
deleteButton = NXGetNamedObject("3DDeleteSoundButton", box);
[deleteButton setAction:@selector(deleteSound:)];
tmpSound = 0x0;
return classObj;
}
- (void) showAlert
{
NXRunAlertPanel(NULL, "Custom Menu Activated", NULL, NULL, NULL);
}
- initCustomComponent
{
self = [super init];
_3Dpanel = [NXApp loadNibSection:"3DViewer.nib" owner:self
withNames:YES fromHeader:header];
_3DcontentView = [_3Dpanel contentView];
_3DcubeView = NXGetNamedObject("3DCubeView" , _3Dpanel);
[_3DcubeView setmachHeader:header];
[_3DcubeView setController:self];
[_3Ddatasets setTarget:self];
[_3Ddatasets setAction:@selector(openData:)];
return _3DcontentView;
}
- recordSound:sender
{
if( !tmpSound ) tmpSound = [Sound new];
[tmpSound setDelegate:self];
[tmpSound record];
return self;
}
- playSound:sender
{
if( tmpSound ) [tmpSound play];
else
[playButton setState:0];
return self;
}
- didPlay:sender
{
[playButton setState:0];
return self;
}
- didRecord:sender
{
[recordButton setState:0];
[_3DcubeView setViewSound:tmpSound];
return self;
}
- stopSound:sender
{
if( tmpSound ) [tmpSound stop];
return self;
}
- deleteSound:sender
{
[_3DcubeView deleteViewSound];
return self;
}
- inspectCustomComponent
{
[inspectorPanel makeKeyAndOrderFront:self];
[self refreshInspectorPanel];
return self;
}
- (void)refreshInspectorPanel
{
int index;
if( [inspectorPanel isVisible] ) {
[recordButton setTarget:self];
[stopButton setTarget:self];
[playButton setTarget:self];
[deleteButton setTarget:self];
[inspectorPanel orderFront:self];
if( [_3DcubeView currentDataFile] )
[fileName setStringValue:basename([_3DcubeView currentDataFile])];
[parameterForm setFloatValue:[_3DcubeView readPhi] at:0];
[parameterForm setFloatValue:[_3DcubeView readTheta] at:1];
[parameterForm setFloatValue:[_3DcubeView readInvdist] at:2];
for( index=0; index<3; index++ )
[parameterForm setTarget:self at:index];
}
}
- (void)setPhi
{
if( [_3DcubeView writePhi:[parameterForm floatValueAt:0]] )
[parameterForm setFloatValue:[_3DcubeView readPhi] at:0];;
[parameterForm selectTextAt:0];
}
- (void)setTheta
{
if( [_3DcubeView writeTheta:[parameterForm floatValueAt:1]] )
[parameterForm setFloatValue:[_3DcubeView readTheta] at:1];;
[parameterForm selectTextAt:1];
}
- (void)setInvdist
{
if( [_3DcubeView writeInvdist:[parameterForm floatValueAt:2]] )
[parameterForm setFloatValue:[_3DcubeView readInvdist] at:2];;
[parameterForm selectTextAt:2];
}
- openData:sender
{
[_3DcubeView openData:sender];
[self perform:@selector(displayAndFlush:) with:self
afterDelay:1 cancelPrevious:YES];
return self;
}
- (void) displayAndFlush:sender
{
[[_3DcontentView window] disableFlushWindow];
[[_3DcontentView window] display];
[[_3DcontentView window] reenableFlushWindow];
[[_3DcontentView window] flushWindowIfNeeded];
[self resetFirstResponder:_3DcubeView];
}
- setViews:(id)cv
{
_3DcubeView = cv;
_3DcontentView = [cv superview];
return self;
}
- (void)resetFirstResponder:(id)frv
{
id vt = [_3DcontentView superview];
if ( [vt isKindOf:[Text class]] )
[vt textDidGetKeys:vt isEmpty:NO];
[[frv window] makeFirstResponder:frv];
[self refreshInspectorPanel];
}
- free
{
if( tmpSound ) [tmpSound free];
return [super free];
}
- write:(NXTypedStream *)stream
{
[super write:stream];
return self;
}
- read:(NXTypedStream *)stream
{
[super read:stream];
return self;
}
- awake
{
[super awake];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.