This is ClockApp.m in view mode; [Download] [Up]
// My stuff. #import "Animator.h" #import "ClockApp.h" #import "ClockView.h" // appkit stuff #import <defaults/defaults.h> // To get the dang things. #import <appkit/Control.h> // To handle initing of dialSize slider. #import <appkit/Matrix.h> // To handle initing of type matrix. #import <appkit/Window.h> // to blast the window around. // unix stuff. #import <stdlib.h> // atof(). @implementation ClockApp + new // create the new application, and make us its delegate. { self = [super new]; [self setDelegate:self]; return self; } - setClockView:anObject { clockView=anObject; return self; } // This is a gross, gross c function. Positive side - it works! const char *ftoa( float f) { static char num[ 100]; sprintf( num, "%f", f); return num; } - terminate:sender // store the position and size. { NXRect r; // This is stupid. Need the _window's_ position in screen coordinates, // and the _clockView's_ size (no coordinates) to be able to correctly // place the window when re-run. Didn't want to use placeWindow, as // sizes and stuff didn't seem to work. [[clockView window] getFrame:&r]; NXWriteDefault( [self appName], "WindowX", ftoa( r.origin.x)); NXWriteDefault( [self appName], "WindowY", ftoa( r.origin.y)); [clockView getBounds:&r]; NXWriteDefault( [self appName], "WindowSize", ftoa( r.size.width)); NXWriteDefault( [self appName], "DialSize", ftoa( [clockView dialSize])); NXWriteDefault( [self appName], "ClockType", ftoa( [clockView clockType])); return [super terminate:sender]; } - appPowerOffIn:(int)ms andSave:(int)aFlag // catch Workspace logout. { return [self terminate:self]; } - setDialSizeSlider:anObject { dialSizeSlider=anObject; return self; } - setTypeMatrix:anObject { typeMatrix=anObject; return self; } static NXDefaultsVector def= { { "WindowX", "250"}, { "WindowY", "400"}, { "WindowSize", "350"}, { "DialSize", ".05"}, { "ClockType", "3"}, {NULL}, }; - appDidInit:sender // get info such as window positioning. { NXRegisterDefaults( [self appName], def); [clockView setDialSize:atof( NXGetDefaultValue( [self appName], "DialSize"))]; [dialSizeSlider setFloatValue:[clockView dialSize]]; [clockView setClockType:atoi( NXGetDefaultValue( [self appName], "ClockType"))]; [typeMatrix selectCellWithTag:[clockView clockType]]; [[clockView window] moveTo:atof( NXGetDefaultValue( [self appName], "WindowX")) :atof( NXGetDefaultValue( [self appName], "WindowY"))]; [[clockView window] sizeWindow:atof( NXGetDefaultValue( [self appName], "WindowSize")) :atof( NXGetDefaultValue( [self appName], "WindowSize"))]; [[clockView window] display]; // Let's redraw some stuff. [[clockView window] orderFront:self]; // and then display it. [[clockView animator] start:self]; // start the fun! return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.