<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
- <string>4 276 356 240 0 0 1056 770 </string>
+ <string>343 32 356 240 0 0 1056 770 </string>
<key>IBFramework Version</key>
<string>291.0</string>
<key>IBGroupedObjects</key>
<key>IBOpenObjects</key>
<array>
<integer>6</integer>
- <integer>115</integer>
</array>
<key>IBSystem Version</key>
<string>6I32</string>
* Original Author : Kent Sutherland <ksuther@ithinksw.com>
* Responsibility : Kent Sutherland <ksuther@ithinksw.com>
*
- * Copyright (c) 2002 iThink Software.
+ * Copyright (c) 2002-2003 iThink Software.
* All Rights Reserved
*
*/
#import <ITKit/ITKit.h>
#import <ITFoundation/ITFoundation.h>
#import <ITMTRemote/ITMTRemote.h>
-
+#import <StatusWindow.h>
//@class MenuTunesView;
-@class PreferencesController, ITTransientStatusWindow;
+@class PreferencesController, StatusWindow;
@interface MenuTunes : NSObject
{
NSMenuItem *playPauseMenuItem; //Toggle between 'Play' and 'Pause'
PreferencesController *prefsController;
- ITTransientStatusWindow *statusWindow; //Shows track info and upcoming songs.
+ StatusWindow *statusWindow; //Shows track info and upcoming songs.
}
- (void)registerDefaultsIfNeeded;
#import "MenuTunes.h"
#import "PreferencesController.h"
#import "HotKeyCenter.h"
+#import "StatusWindow.h"
@interface MenuTunes(Private)
- (ITMTRemote *)loadRemote;
{
if ( ( self = [super init] ) ) {
remoteArray = [[NSMutableArray alloc] initWithCapacity:1];
- statusWindow = [ITTransientStatusWindow sharedWindow];
+ statusWindow = [StatusWindow sharedWindow];
}
return self;
}
menu = [[NSMenu alloc] initWithTitle:@""];
isAppRunning = [currentRemote isAppRunning];
- if (isAppRunning)
- {
+ if (isAppRunning) {
[self rebuildMenu];
refreshTimer = [NSTimer scheduledTimerWithTimeInterval:3.5
target:self
selector:@selector(timerUpdate)
userInfo:nil
repeats:YES];
- }
- else
- {
+ } else {
menu = [[NSMenu alloc] initWithTitle:@""];
[[menu addItemWithTitle:@"Open iTunes" action:@selector(openiTunes:) keyEquivalent:@""] setTarget:self];
[[menu addItemWithTitle:@"Preferences" action:@selector(showPreferences:) keyEquivalent:@""] setTarget:self];
keyEquivalent:@""];
[playPauseMenuItem setTarget:self];
- if (tempCombo)
- {
+ if (tempCombo) {
[self setKeyEquivalentForCode:[tempCombo keyCode]
andModifiers:[tempCombo modifiers] onItem:playPauseMenuItem];
[tempCombo release];
keyEquivalent:@""];
[nextTrack setTarget:self];
- if (tempCombo)
- {
+ if (tempCombo) {
[self setKeyEquivalentForCode:[tempCombo keyCode]
andModifiers:[tempCombo modifiers] onItem:nextTrack];
[tempCombo release];
keyEquivalent:@""];
[prevTrack setTarget:self];
- if (tempCombo)
- {
+ if (tempCombo) {
[self setKeyEquivalentForCode:[tempCombo keyCode]
andModifiers:[tempCombo modifiers] onItem:prevTrack];
[tempCombo release];
[self rebuildEQPresetsMenu];
}
- if (trackInfoIndex > -1)
- {
+ if (trackInfoIndex > -1) {
NSString *curSongName, *curAlbumName = @"", *curArtistName = @"";
curSongName = [currentRemote currentSongTitle];
NSArray *playlists = [currentRemote playlists];
int i, curPlaylist = [currentRemote currentPlaylistIndex];
- if (isPlayingRadio)
- {
+ if (isPlayingRadio) {
curPlaylist = 0;
}
if (playlistMenu && ([playlists count] == [playlistMenu numberOfItems]))
[self updateMenu];
lastSongIndex = trackPlayingIndex;
- }
- else
- {
+ } else {
if (playlist != [currentRemote currentPlaylistIndex]) {
BOOL wasPlayingRadio = isPlayingRadio;
isPlayingRadio = [[currentRemote classOfPlaylistAtIndex:playlist] isEqualToString:@"radio tuner playlist"];
if (isPlayingRadio && !wasPlayingRadio) {
int i;
- for (i = 0; i < [playlistMenu numberOfItems]; i++)
- {
+ for (i = 0; i < [playlistMenu numberOfItems]; i++) {
[[playlistMenu itemAtIndex:i] setState:NSOffState];
}
}
}
}
- [statusWindow setTrackInfo:stringToShow];
+ [statusWindow setText:stringToShow];
[NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(fadeAndCloseStatusWindow)
songs = [songs stringByAppendingString:@"\n"];
}
}
- [statusWindow setUpcomingSongs:songs];
+ [statusWindow setText:songs];
[NSTimer scheduledTimerWithTimeInterval:3.0
target:self
selector:@selector(fadeAndCloseStatusWindow)
{ shiftKey, NSShiftKeyMask },
};
- for (i = 0; i < 6; i++)
- {
- if (modifiers & carbonToCocoa[i][0])
- {
+ for (i = 0; i < 6; i++) {
+ if (modifiers & carbonToCocoa[i][0]) {
cocoaModifiers += carbonToCocoa[i][1];
}
}
--- /dev/null
+/*
+ * MenuTunes
+ * StatusWindow
+ * ITTransientStatusWindow subclass for MenuTunes
+ *
+ * Original Author : Matthew Judy <mjudy@ithinksw.com>
+ * Responsibility : Matthew Judy <mjudy@ithinksw.com>
+ *
+ * Copyright (c) 2003 iThink Software.
+ * All Rights Reserved
+ *
+ */
+
+
+#import <Cocoa/Cocoa.h>
+#import <ITKit/ITKit.h>
+
+
+#define SW_PAD 24.0
+#define SW_SPACE 24.0
+#define SW_MINW 211.0
+#define SW_BORDER 32.0
+
+
+@interface StatusWindow : ITTransientStatusWindow {
+ NSImage *image;
+ NSString *text;
+ NSImageView *imageView;
+ ITTextField *textField;
+}
+
+- (void)setImage:(NSImage *)newImage;
+- (void)setText:(NSString *)newText;
+
+
+@end
--- /dev/null
+//
+// 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)initWithContentView:(NSView *)contentView
+ exitMode:(ITTransientStatusWindowExitMode)exitMode
+ backgroundType:(ITTransientStatusWindowBackgroundType)backgroundType
+{
+ 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