X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/93f1f93114865d18b5870f04763c921ff33b8e59..7eff668a73d0965a793c7956d9553f539ca30f65:/StatusWindow.m diff --git a/StatusWindow.m b/StatusWindow.m index 946e544..a2a223a 100755 --- a/StatusWindow.m +++ b/StatusWindow.m @@ -1,18 +1,122 @@ +// +// StatusWindow.m +// MenuTunes +// +// Created by Matt L. Judy on Sat Feb 22 2003. +// Copyright (c) 2003 NibFile.com. All rights reserved. +// + #import "StatusWindow.h" + +@interface StatusWindow (Private) +- (void)buildStatusWindow; +@end + + @implementation StatusWindow -- (id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)type defer:(BOOL)flag +- (id)initWithContentView:(NSView *)contentView + exitMode:(ITTransientStatusWindowExitMode)exitMode + backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType { - if ( (self = [super initWithContentRect:rect styleMask:NSBorderlessWindowMask backing:type defer:flag]) ) - { - [self setHasShadow:NO]; - [self setOpaque:NO]; - [self setLevel:NSStatusWindowLevel]; - [self setIgnoresMouseEvents:YES]; - [self setBackgroundColor:[NSColor colorWithCalibratedRed:0.5 green:0.5 blue:0.5 alpha:0.6]]; + if ( ( self = [super initWithContentView:contentView + exitMode:exitMode + backgroundType:backgroundType]) ) { + // Default images and text. + image = [NSImage imageNamed:@"NSApplicationIcon"]; + text = @"No string set yet."; + [self buildStatusWindow]; } return self; } +- (void)buildStatusWindow +{ + NSRect imageRect; + NSRect textRect; + float imageWidth = 0.0; + float imageHeight = 0.0; + float textWidth = 0.0; + float textHeight = 0.0; + float contentHeight = 0.0; + float windowWidth = 0.0; + float windowHeight = 0.0; + NSArray *lines = [text componentsSeparatedByString:@"\n"]; + id oneLine = nil; + NSEnumerator *lineEnum = [lines objectEnumerator]; + NSFont *font = [NSFont fontWithName:@"Lucida Grande Bold" size:18]; + NSDictionary *attr = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; + + // Get image width and height. + imageWidth = [image size].width; + imageHeight = [image size].height; + + // Iterate over each line to get text width and height + 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 ); + // Add the height of this line to the total text height + textHeight += [oneLine sizeWithAttributes:attr].height; + // If this line wider than the last one, set it as the text width. + textWidth = ( ( textWidth > oneLineWidth ) ? textWidth : oneLineWidth ); + } + + // 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 ); + + // Setup the Window, and remove all its contentview's subviews. + windowWidth = ( SW_PAD + imageWidth + SW_SPACE + textWidth + 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)]; + + // Setup, position, fill, and add the image view to the content view. + imageRect = NSMakeRect( SW_PAD, + (SW_PAD + ((contentHeight - imageHeight) / 2)), + imageWidth, + imageHeight ); + imageView = [[[NSImageView alloc] initWithFrame:imageRect] autorelease]; + [imageView setImage:image]; + [[self contentView] addSubview:imageView]; + + // 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]; + + [[self contentView] setNeedsDisplay:YES]; + +} + +- (void)setImage:(NSImage *)newImage +{ + [image autorelease]; + image = [newImage copy]; + [self buildStatusWindow]; +} + +- (void)setText:(NSString *)newText +{ + [text autorelease]; + text = [newText copy]; + [self buildStatusWindow]; +} + + + @end