This is UpDownView.m in view mode; [Download] [Up]
#import "UpDownView.h"
#import <appkit/appkit.h>
static id font;
@interface UpDownView (PRIVATE)
- (void) _recalcUpTime;
@end
@implementation UpDownView
- initFrame:(NXRect *)r
{
[super initFrame: r];
[self setIsUp: NO];
[self resetUpTime];
font = [Font systemFontOfSize: 12 matrix: NX_IDENTITYMATRIX];
return self;
}
- (BOOL) isUp
{
return isUp;
}
- (void) setIsUp: (BOOL) aValue since: (time_t) aTime
{
if(aValue == isUp)
return;
isUp = aValue;
if(isUp)
{
[self resetUpTime];
mark = aTime;
}
else
[self _recalcUpTime];
}
- (void) setIsUp: (BOOL) aValue
{
[self setIsUp: aValue since: time((time_t *)0)];
}
- (void) resetUpTime
{
mark = upTime = 0;
}
- (time_t) upTime
{
return upTime;
}
- drawSelf:(NXRect *)r :(int)count
{
char buf[15];
if(!up)
{
up = [NXImage findImageNamed: "up"];
down = [NXImage findImageNamed: "down"];
}
PSsetgray(NX_LTGRAY);
NXRectFill(&bounds);
[([self isUp]? up : down) composite: NX_SOVER toPoint: &(bounds.origin)];
if([self isUp])
[self _recalcUpTime];
sprintf(buf,"%d:%02d:%02d", upTime / 3600 , (upTime % 3600) / 60, upTime % 60);
PSsetgray(NX_BLACK);
[font set];
PSmoveto(2,2);
PSshow(buf);
return self;
}
- windowWillResize:sender toSize:(NXSize *)aSize
{
static BOOL gotSize=NO;
static NXSize minSize={ 0, 0};
if( !gotSize)
{
NXRect r;
[sender getFrame:&r];
minSize=r.size;
gotSize=YES;
}
aSize->width=MAX( aSize->width, minSize.width);
aSize->height=MAX( aSize->height, minSize.height);
return self;
}
@end
@implementation UpDownView (PRIVATE)
- (void) _recalcUpTime
{
time_t delta, newMark;
delta = (newMark = time((time_t *)0)) - mark;
mark = newMark;
upTime += delta;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.