Adding the new StatusWindow in rudimentary fashion. It builds with no warnings,...
authorMatthew Judy <mjudy@ithinksw.com>
Mon, 24 Feb 2003 09:08:40 +0000 (09:08 +0000)
committerMatthew Judy <mjudy@ithinksw.com>
Mon, 24 Feb 2003 09:08:40 +0000 (09:08 +0000)
CD.tiff [new file with mode: 0755]
English.lproj/Preferences.nib/info.nib
English.lproj/Preferences.nib/keyedobjects.nib
Library.tiff [new file with mode: 0755]
MenuTunes.h
MenuTunes.m
Radio.tiff [new file with mode: 0755]
StatusWindow.h [new file with mode: 0755]
StatusWindow.m [new file with mode: 0755]
iPod.tif [new file with mode: 0755]
submenu.tiff

diff --git a/CD.tiff b/CD.tiff
new file mode 100755 (executable)
index 0000000..fae345e
Binary files /dev/null and b/CD.tiff differ
index 727bff0..ec63d35 100755 (executable)
@@ -3,7 +3,7 @@
 <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>
@@ -23,7 +23,6 @@
        <key>IBOpenObjects</key>
        <array>
                <integer>6</integer>
-               <integer>115</integer>
        </array>
        <key>IBSystem Version</key>
        <string>6I32</string>
index a1ceaea..bb6016c 100755 (executable)
Binary files a/English.lproj/Preferences.nib/keyedobjects.nib and b/English.lproj/Preferences.nib/keyedobjects.nib differ
diff --git a/Library.tiff b/Library.tiff
new file mode 100755 (executable)
index 0000000..e858cbd
Binary files /dev/null and b/Library.tiff differ
index 6e66299..dd79366 100755 (executable)
@@ -6,7 +6,7 @@
  *  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
 {
@@ -52,7 +52,7 @@
     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;
index 532e17d..d03da70 100755 (executable)
@@ -10,6 +10,7 @@ Things to do:
 #import "MenuTunes.h"
 #import "PreferencesController.h"
 #import "HotKeyCenter.h"
+#import "StatusWindow.h"
 
 @interface MenuTunes(Private)
 - (ITMTRemote *)loadRemote;
@@ -35,7 +36,7 @@ Things to do:
 {
     if ( ( self = [super init] ) ) {
         remoteArray = [[NSMutableArray alloc] initWithCapacity:1];
-        statusWindow = [ITTransientStatusWindow sharedWindow];
+        statusWindow = [StatusWindow sharedWindow];
     }
     return self;
 }
@@ -53,17 +54,14 @@ Things to do:
     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];
@@ -236,8 +234,7 @@ Things to do:
                                     keyEquivalent:@""];
             [playPauseMenuItem setTarget:self];
             
-            if (tempCombo)
-            {
+            if (tempCombo) {
                 [self setKeyEquivalentForCode:[tempCombo keyCode]
                     andModifiers:[tempCombo modifiers] onItem:playPauseMenuItem];
                 [tempCombo release];
@@ -249,8 +246,7 @@ Things to do:
                                         keyEquivalent:@""];
             
             [nextTrack setTarget:self];
-            if (tempCombo)
-            {
+            if (tempCombo) {
                 [self setKeyEquivalentForCode:[tempCombo keyCode]
                     andModifiers:[tempCombo modifiers] onItem:nextTrack];
                 [tempCombo release];
@@ -262,8 +258,7 @@ Things to do:
                                         keyEquivalent:@""];
             
             [prevTrack setTarget:self];
-            if (tempCombo)
-            {
+            if (tempCombo) {
                 [self setKeyEquivalentForCode:[tempCombo keyCode]
                     andModifiers:[tempCombo modifiers] onItem:prevTrack];
                 [tempCombo release];
@@ -334,8 +329,7 @@ Things to do:
         [self rebuildEQPresetsMenu];
     }
     
-    if (trackInfoIndex > -1)
-    {
+    if (trackInfoIndex > -1) {
         NSString *curSongName, *curAlbumName = @"", *curArtistName = @"";
         curSongName = [currentRemote currentSongTitle];
         
@@ -480,8 +474,7 @@ Things to do:
     NSArray *playlists = [currentRemote playlists];
     int i, curPlaylist = [currentRemote currentPlaylistIndex];
     
-    if (isPlayingRadio)
-    {
+    if (isPlayingRadio) {
         curPlaylist = 0;
     }
     if (playlistMenu && ([playlists count] == [playlistMenu numberOfItems]))
@@ -604,16 +597,13 @@ Things to do:
             
             [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];
                     }
                 }
@@ -819,7 +809,7 @@ Things to do:
             }
         }
         
-        [statusWindow setTrackInfo:stringToShow];
+        [statusWindow setText:stringToShow];
         [NSTimer scheduledTimerWithTimeInterval:3.0
                                     target:self
                                     selector:@selector(fadeAndCloseStatusWindow)
@@ -848,7 +838,7 @@ Things to do:
                     songs = [songs stringByAppendingString:@"\n"];
                 }
             }
-            [statusWindow setUpcomingSongs:songs];
+            [statusWindow setText:songs];
             [NSTimer scheduledTimerWithTimeInterval:3.0
                         target:self
                         selector:@selector(fadeAndCloseStatusWindow)
@@ -877,10 +867,8 @@ Things to do:
         { 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];
         }
     }
diff --git a/Radio.tiff b/Radio.tiff
new file mode 100755 (executable)
index 0000000..45f7f9a
Binary files /dev/null and b/Radio.tiff differ
diff --git a/StatusWindow.h b/StatusWindow.h
new file mode 100755 (executable)
index 0000000..3fbc7be
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ *     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
diff --git a/StatusWindow.m b/StatusWindow.m
new file mode 100755 (executable)
index 0000000..ca12378
--- /dev/null
@@ -0,0 +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)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
diff --git a/iPod.tif b/iPod.tif
new file mode 100755 (executable)
index 0000000..d9b5f75
Binary files /dev/null and b/iPod.tif differ
index b35f0f2..b6a16ff 100755 (executable)
Binary files a/submenu.tiff and b/submenu.tiff differ