if ( ( self = [super initWithContentView:contentView
exitMode:exitMode
backgroundType:backgroundType]) ) {
- // Default images and text.
- image = [NSImage imageNamed:@"NSApplicationIcon"];
- text = @"No string set yet.";
+ // Set default values.
+ windowMode = StatusWindowTextMode;
+ image = [NSImage imageNamed:@"NSApplicationIcon"];
+ text = @"No string set yet.";
+ volumeLevel = 0.0;
+
[self buildStatusWindow];
}
+
return self;
}
- (void)buildStatusWindow
{
NSRect imageRect;
- NSRect textRect;
+ NSRect dataRect;
float imageWidth = 0.0;
float imageHeight = 0.0;
- float textWidth = 0.0;
- float textHeight = 0.0;
+ float dataWidth = 0.0;
+ float dataHeight = 0.0;
float contentHeight = 0.0;
float windowWidth = 0.0;
float windowHeight = 0.0;
// Get image width and height.
imageWidth = [image size].width;
imageHeight = [image size].height;
-
+
+ if ( windowMode == StatusWindowTextMode ) {
// Iterate over each line to get text width and height
- while ( oneLine = [lineEnum nextObject] ) {
+ while ( (oneLine = [lineEnum nextObject]) ) {
// Get the width of one line, adding 8.0 because Apple sucks donkey rectum.
- float oneLineWidth = ( [oneLine sizeWithAttributes:attr].width + 8.0 );
+ float oneLineWidth = ( [oneLine sizeWithAttributes:attr].width + 8.0 );
// Add the height of this line to the total text height
- textHeight += [oneLine sizeWithAttributes:attr].height;
+ dataHeight += [oneLine sizeWithAttributes:attr].height;
// If this line wider than the last one, set it as the text width.
- textWidth = ( ( textWidth > oneLineWidth ) ? textWidth : oneLineWidth );
+ dataWidth = ( ( dataWidth > oneLineWidth ) ? dataWidth : oneLineWidth );
+ }
+
+ // Add 4.0 to the final dataHeight to accomodate the shadow.
+ dataHeight += 4.0;
+ } else {
+ dataHeight = 24.0;
+ dataWidth = 200.0;
}
- // Add 4.0 to the final textHeight to accomodate the shadow.
- textHeight += 4.0;
-
// Set the content height to the greater of the text and image heights.
- contentHeight = ( ( imageHeight > textHeight ) ? imageHeight : textHeight );
+ contentHeight = ( ( imageHeight > dataHeight ) ? imageHeight : dataHeight );
// Setup the Window, and remove all its contentview's subviews.
- windowWidth = ( SW_PAD + imageWidth + SW_SPACE + textWidth + SW_PAD );
+ windowWidth = ( SW_PAD + imageWidth + SW_SPACE + dataWidth + SW_PAD );
windowHeight = ( SW_PAD + contentHeight + SW_PAD );
[self setFrame:NSMakeRect(SW_BORDER, SW_BORDER, windowWidth, windowHeight) display:YES];
[[[self contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
imageView = [[[NSImageView alloc] initWithFrame:imageRect] autorelease];
[imageView setImage:image];
[[self contentView] addSubview:imageView];
+
+ dataRect = NSMakeRect( (SW_PAD + imageWidth + SW_SPACE),
+ (SW_PAD + ((contentHeight - dataHeight) / 2)),
+ dataWidth,
+ dataHeight);
+
+ if ( windowMode == StatusWindowTextMode ) {
// Setup, position, fill, and add the text view to the content view.
- textRect = NSMakeRect( (SW_PAD + imageWidth + SW_SPACE),
- (SW_PAD + ((contentHeight - textHeight) / 2)),
- textWidth,
- textHeight);
- textField = [[[ITTextField alloc] initWithFrame:textRect] autorelease];
- [textField setEditable:NO];
- [textField setSelectable:NO];
- [textField setBordered:NO];
- [textField setDrawsBackground:NO];
- [textField setFont:[NSFont fontWithName:@"Lucida Grande Bold" size:18]];
- [textField setTextColor:[NSColor whiteColor]];
- [textField setCastsShadow:YES];
- [textField setStringValue:text];
- [[self contentView] addSubview:textField];
+ textField = [[[ITTextField alloc] initWithFrame:dataRect] autorelease];
+ [textField setEditable:NO];
+ [textField setSelectable:NO];
+ [textField setBordered:NO];
+ [textField setDrawsBackground:NO];
+ [textField setFont:[NSFont fontWithName:@"Lucida Grande Bold" size:18]];
+ [textField setTextColor:[NSColor whiteColor]];
+ [textField setCastsShadow:YES];
+ [textField setStringValue:text];
+ [[self contentView] addSubview:textField];
+
+ } else if ( windowMode == StatusWindowVolumeMode ) {
+
+ NSEnumerator *cellEnum;
+ id aCell;
+ int lights = ( ceil(volumeLevel * 100) / 10 );
+ int lightCount = 0;
+
+ volMatrix = [[[NSMatrix alloc] initWithFrame:dataRect
+ mode:NSHighlightModeMatrix
+ cellClass:NSClassFromString(@"ITTextFieldCell")
+ numberOfRows:1
+ numberOfColumns:10] autorelease];
+
+ [volMatrix setCellSize:NSMakeSize(20, 24)];
+ [volMatrix setIntercellSpacing:NSMakeSize(0, 0)];
+
+ cellEnum = [[volMatrix cells] objectEnumerator];
+
+ while ( (aCell = [cellEnum nextObject]) ) {
+ [aCell setEditable:NO];
+ [aCell setSelectable:NO];
+ [aCell setBordered:NO];
+ [aCell setDrawsBackground:NO];
+ [aCell setFont:[NSFont fontWithName:@"Lucida Grande Bold" size:18]];
+ [aCell setStringValue:[NSString stringWithUTF8String:"▊"]];
+
+ lightCount ++;
+
+ NSLog(@"%f, %i, %i", volumeLevel, lights, lightCount);
+
+ if ( lights >= lightCount ) {
+ [aCell setCastsShadow:YES];
+ [aCell setTextColor:[NSColor whiteColor]];
+ } else {
+ [aCell setCastsShadow:NO];
+ [aCell setTextColor:[NSColor darkGrayColor]];
+ }
+
+ }
+
+ [[self contentView] addSubview:volMatrix];
+ }
[[self contentView] setNeedsDisplay:YES];
-
}
- (void)setImage:(NSImage *)newImage
{
[text autorelease];
text = [newText copy];
+ windowMode = StatusWindowTextMode;
[self buildStatusWindow];
}
-
+- (void)setVolume:(float)level
+{
+ volumeLevel = level;
+ windowMode = StatusWindowVolumeMode;
+ [self buildStatusWindow];
+}
@end