From c92930f48a560adbc8f80ef106a3128cf9c176bf Mon Sep 17 00:00:00 2001 From: Matthew Judy Date: Sun, 14 Sep 2003 07:07:36 +0000 Subject: [PATCH] Volume Window s3x. Auto-displayed song info is disabled right now. Will thread to eliminate problems soon. I've noted, however, that I can press keys rapidly to adjust the volume without crashing. --- English.lproj/Preferences.nib/info.nib | 3 +- .../Preferences.nib/keyedobjects.nib | Bin 40280 -> 40482 bytes MainController.m | 36 +++-- StatusWindow.h | 17 ++- StatusWindow.m | 124 +++++++++++++----- StatusWindowController.h | 2 +- StatusWindowController.m | 6 +- 7 files changed, 134 insertions(+), 54 deletions(-) diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib index 2aff2c8..7718757 100755 --- a/English.lproj/Preferences.nib/info.nib +++ b/English.lproj/Preferences.nib/info.nib @@ -3,7 +3,7 @@ IBDocumentLocation - 4 4 356 240 0 0 1056 770 + 1 3 356 240 0 0 1056 770 IBFramework Version 286.0 IBGroupedObjects @@ -23,7 +23,6 @@ IBOpenObjects 6 - 115 IBSystem Version 6L60 diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index 62f97d5fa739eb67dafa71510f19556b05264553..f99cf5d0bb820fbdfebbaea52353e49123311a90 100755 GIT binary patch literal 40482 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 H*q#3c%J?|V literal 40280 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 1.0) { - volume = 1.0; + volume = 1.0; + dispVol = 1.0; } + [currentRemote setVolume:volume]; - - //Show volume status window - [statusWindowController showVolumeWindowWithLevel:volume]; + + // Show volume status window + [statusWindowController showVolumeWindowWithLevel:dispVol]; } - (void)decrementVolume { - float volume = [currentRemote volume]; - volume -= 0.2; + float volume = [currentRemote volume]; + float dispVol = volume; + + volume -= 0.090; + dispVol -= 0.100; + if (volume < 0.0) { - volume = 0.0; + volume = 0.0; + dispVol = 0.0; } + [currentRemote setVolume:volume]; //Show volume status window - [statusWindowController showVolumeWindowWithLevel:volume]; + [statusWindowController showVolumeWindowWithLevel:dispVol]; } - (void)incrementRating diff --git a/StatusWindow.h b/StatusWindow.h index 3fbc7be..b72ca71 100755 --- a/StatusWindow.h +++ b/StatusWindow.h @@ -21,16 +21,23 @@ #define SW_MINW 211.0 #define SW_BORDER 32.0 +typedef enum { + StatusWindowTextMode, + StatusWindowVolumeMode +} StatusWindowMode; @interface StatusWindow : ITTransientStatusWindow { - NSImage *image; - NSString *text; - NSImageView *imageView; - ITTextField *textField; + NSImage *image; + NSString *text; + NSImageView *imageView; + ITTextField *textField; + NSMatrix *volMatrix; + StatusWindowMode windowMode; + float volumeLevel; } - (void)setImage:(NSImage *)newImage; - (void)setText:(NSString *)newText; - +- (void)setVolume:(float)level; @end diff --git a/StatusWindow.m b/StatusWindow.m index a2a223a..6fb6ca4 100755 --- a/StatusWindow.m +++ b/StatusWindow.m @@ -23,22 +23,26 @@ 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; @@ -51,25 +55,30 @@ // 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)]; @@ -82,25 +91,70 @@ 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 @@ -114,9 +168,15 @@ { [text autorelease]; text = [newText copy]; + windowMode = StatusWindowTextMode; [self buildStatusWindow]; } - +- (void)setVolume:(float)level +{ + volumeLevel = level; + windowMode = StatusWindowVolumeMode; + [self buildStatusWindow]; +} @end diff --git a/StatusWindowController.h b/StatusWindowController.h index 804c090..913432b 100755 --- a/StatusWindowController.h +++ b/StatusWindowController.h @@ -47,7 +47,7 @@ typedef enum { - (void)showUpcomingSongsWithTitles:(NSArray *)titleStrings; -- (void)showVolumeWindowWithLevel:(int)level; +- (void)showVolumeWindowWithLevel:(float)level; - (void)showRatingWindowWithLevel:(int)level; - (void)showShuffleWindowWithMode:(MTStatusWindowShuffleMode)mode; - (void)showLoopWindowWithMode:(MTStatusWindowLoopMode)mode; diff --git a/StatusWindowController.m b/StatusWindowController.m index 146c1a8..43fdd46 100755 --- a/StatusWindowController.m +++ b/StatusWindowController.m @@ -104,9 +104,11 @@ } -- (void)showVolumeWindowWithLevel:(int)level +- (void)showVolumeWindowWithLevel:(float)level { - + [_window setImage:[NSImage imageNamed:@"Volume"]]; + [_window setVolume:level]; + [_window appear:self]; } - (void)showRatingWindowWithLevel:(int)level -- 2.20.1