Catakig/Source/Misc/IndicatorLight.m

61 lines
1.6 KiB
Objective-C

/* class IndicatorLight
A view, descended from NSImageView, that displays an "indicator
light". The light's visible state is a sub-rectangle of a
larger image containing all possible light states. We use
NSImageView alignment values to shift among the states.
*/
#import "IndicatorLight.h"
@implementation IndicatorLight
//---------------------------------------------------------------------------
- (void)awakeFromNib
{
// Give these attributes sensible values, regardless of how they're
// set in the NIB file.
[self setEditable:NO];
[self setEnabled:NO];
[self setAlignment:NSImageAlignTopLeft];
[self setImageFrameStyle:NSImageFrameNone];
[self setImageScaling:NSScaleNone];
}
//---------------------------------------------------------------------------
- (int)intValue
{/*
Returns this light's current state as a value from 0 to 8.
For my (CK) reference, NSImageAlign and their state values:
2 1 3 0 4 1
4 0 8 5 6 7
6 5 7 2 8 3
*/
return "\6\4\0\1\5\x8\2\3\7"[[self imageAlignment]];
}
//---------------------------------------------------------------------------
- (void)setIntValue:(int)state
{/*
Sets this light's state to a value from 0 to 8.
*/
[self setImageAlignment:(int)("\2\3\6\7\1\4\0\x8\5"[state % 9])];
// [self setNeedsDisplay];
}
//---------------------------------------------------------------------------
- (void)ToggleState
{/*
Toggles this light between on and off (assuming the low bit of the
state value reflects this property).
*/
[self setIntValue:[self intValue] ^ 1];
}
//---------------------------------------------------------------------------
@end