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.