Sizing is now in, with appropriate UI. Still working on the last of the positioning...
authorMatthew Judy <mjudy@ithinksw.com>
Thu, 20 Nov 2003 14:42:22 +0000 (14:42 +0000)
committerMatthew Judy <mjudy@ithinksw.com>
Thu, 20 Nov 2003 14:42:22 +0000 (14:42 +0000)
English.lproj/Preferences.nib/classes.nib
English.lproj/Preferences.nib/keyedobjects.nib
MainController.m
PreferencesController.h
PreferencesController.m
StatusWindow.h
StatusWindow.m
StatusWindowController.h
StatusWindowController.m
libValidate.a

index 3dea3b8..d4c2f15 100755 (executable)
@@ -58,6 +58,7 @@
                 vanishEffectPopup = NSPopUpButton; 
                 vanishSpeedSlider = NSSlider; 
                 window = NSWindow; 
+                windowSizingPopup = NSPopUpButton; 
                 zeroConfView = NSView; 
             }; 
             SUPERCLASS = NSObject; 
index 19faba6..df26ca3 100755 (executable)
Binary files a/English.lproj/Preferences.nib/keyedobjects.nib and b/English.lproj/Preferences.nib/keyedobjects.nib differ
index bffb59c..5b85436 100755 (executable)
@@ -39,10 +39,10 @@ static MainController *sharedController;
         sharedController = self;
         
         remoteArray = [[NSMutableArray alloc] initWithCapacity:1];
+        [[PreferencesController sharedPrefs] setController:self];
         statusWindowController = [StatusWindowController sharedController];
         menuController = [[MenuController alloc] init];
         df = [[NSUserDefaults standardUserDefaults] retain];
-        [[PreferencesController sharedPrefs] setController:self];
         timerUpdating = NO;
         blinged = NO;
     }
index 1d556dd..5b01b28 100755 (executable)
@@ -60,6 +60,7 @@
     IBOutlet NSPopUpButton *vanishEffectPopup;
     IBOutlet NSSlider *vanishSpeedSlider;
     IBOutlet NSWindow *window;
+    IBOutlet NSPopUpButton *windowSizingPopup;
     IBOutlet NSView *zeroConfView;
 
     MainController *controller;
index e7421f4..a17c1b3 100755 (executable)
@@ -469,6 +469,9 @@ static PreferencesController *prefs = nil;
             [self setCustomColor:[NSColor colorWithCalibratedWhite:0.15 alpha:0.70] updateWell:YES];
         }
 
+    } else if ( [sender tag] == 2095) {
+        [sw vanish:self];
+        [df setInteger:[sender indexOfSelectedItem] forKey:@"statusWindowSizing"];
     }
     
     [df synchronize];
@@ -517,8 +520,12 @@ static PreferencesController *prefs = nil;
     [df setFloat:0.8 forKey:@"statusWindowAppearanceSpeed"];
     [df setFloat:0.8 forKey:@"statusWindowVanishSpeed"];
     [df setFloat:4.0 forKey:@"statusWindowVanishDelay"];
+    [df setInteger:(int)ITWindowPositionBottom forKey:@"statusWindowVerticalPosition"];
+    [df setInteger:(int)ITWindowPositionLeft forKey:@"statusWindowHorizontalPosition"];
     [df setBool:YES forKey:@"showSongInfoOnChange"];
-
+    
+    [df setObject:[NSArchiver archivedDataWithRootObject:[NSColor blueColor]] forKey:@"statusWindowBackgroundColor"];
+    
     [df synchronize];
     
     loginWindow = [[df persistentDomainForName:@"loginwindow"] mutableCopy];
@@ -727,6 +734,7 @@ static PreferencesController *prefs = nil;
     NSMutableArray *loginarray;
     NSEnumerator *loginEnum, *keyArrayEnum;
     NSString *serverName;
+    NSData *colorData;
     int selectedBGStyle;
     id anItem;
     
@@ -795,8 +803,17 @@ static PreferencesController *prefs = nil;
         [backgroundColorPopup setEnabled:NO];
     }
 
-    [backgroundColorWell setColor:(NSColor *)[NSUnarchiver unarchiveObjectWithData:[df dataForKey:@"statusWindowBackgroundColor"]]];
+    colorData = [df dataForKey:@"statusWindowBackgroundColor"];
+
+    if ( colorData ) {
+        [backgroundColorWell setColor:(NSColor *)[NSUnarchiver unarchiveObjectWithData:colorData]];
+    } else {
+        [backgroundColorWell setColor:[NSColor blueColor]];
+    }
+    
     [showOnChangeCheckbox setState:([df boolForKey:@"showSongInfoOnChange"] ? NSOnState : NSOffState)];
+    
+    [windowSizingPopup selectItem:[windowSizingPopup itemAtIndex:[windowSizingPopup indexOfItemWithTag:[df integerForKey:@"statusWindowSizing"]]]];
 
     // Setup the sharing controls
     if ([df boolForKey:@"enableSharing"]) {
index 8432e05..c956be7 100755 (executable)
 #import <ITKit/ITKit.h>
 
 
-#define SW_PAD            24.00
-#define SW_SPACE          24.00
-#define SW_MINW          211.00
-#define SW_BORDER         32.00
-#define SW_METER_PAD       4.00
-#define SW_BUTTON_PAD_R   30.00
-#define SW_BUTTON_PAD_B   24.00
-#define SW_BUTTON_DIV     12.00
-#define SW_BUTTON_EXTRA_W  8.00
-#define SW_SHADOW_SAT      1.25
+typedef enum _StatusWindowSizing {
+    StatusWindowRegular,
+    StatusWindowSmall,
+    StatusWindowMini
+} StatusWindowSizing;
+
 
 @interface StatusWindow : ITTransientStatusWindow {
-    NSImage  *_image;
-    BOOL      _locked;
+    NSImage            *_image;
+    BOOL                _locked;
+    StatusWindowSizing  _sizing;
 }
 
 - (void)setImage:(NSImage *)newImage;
 - (void)setLocked:(BOOL)flag;
+- (void)setSizing:(StatusWindowSizing)newSizing;
 
 - (void)buildTextWindowWithString:(NSString *)text;
 - (void)buildMeterWindowWithCharacter:(NSString *)character
@@ -45,6 +43,6 @@
                      alternateButton:(NSString *)title
                               target:(id)target
                        defaultAction:(SEL)okAction
-                     alternateAction:(SEL)alternateAction;           
+                     alternateAction:(SEL)alternateAction;
                          
 @end
index ca229ee..01c6ef4 100755 (executable)
@@ -9,6 +9,19 @@
 #import "StatusWindow.h"
 
 
+#define SW_PAD            24.00
+#define SW_SPACE          24.00
+#define SW_MINW          211.00
+#define SW_BORDER         32.00
+#define SW_METER_PAD       4.00
+#define SW_BUTTON_PAD_R   30.00
+#define SW_BUTTON_PAD_B   24.00
+#define SW_BUTTON_DIV     12.00
+#define SW_BUTTON_EXTRA_W  8.00
+#define SW_SHADOW_SAT      1.25
+#define SMALL_DIVISOR      1.33333
+#define MINI_DIVISOR       1.66667
+
 @interface StatusWindow (Private)
 - (NSRect)setupWindowWithDataSize:(NSSize)dataSize;
 @end
@@ -30,8 +43,9 @@
                                exitMode:exitMode
                          backgroundType:backgroundType] ) ) {
      // Set default values.
-        _image       = [[NSImage imageNamed:@"NSApplicationIcon"] retain];
-        _locked      = NO;
+        _image  = [[NSImage imageNamed:@"NSApplicationIcon"] retain];
+        _locked = NO;
+        _sizing = StatusWindowRegular;
     }
     
     return self;
     [self setExitMode:(flag ? ITTransientStatusWindowExitOnCommand : ITTransientStatusWindowExitAfterDelay)];
 }
 
+- (void)setSizing:(StatusWindowSizing)newSizing
+{
+    _sizing = newSizing;
+}
+
 
 /*************************************************************************/
 #pragma mark -
 
 - (NSRect)setupWindowWithDataSize:(NSSize)dataSize
 {
+    float        divisor       = 1.0;
     NSRect       imageRect;
     float        imageWidth    = 0.0;
     float        imageHeight   = 0.0;
     float        contentHeight = 0.0;
     float        windowWidth   = 0.0;
     float        windowHeight  = 0.0;
-    NSImageView *imageView;
+    ITImageView *imageView;
 
-//  Get image width and height.
-    imageWidth  = [_image size].width;
-    imageHeight = [_image size].height;
+    if ( _sizing == StatusWindowSmall ) {
+        divisor = SMALL_DIVISOR;
+    } else if ( _sizing == StatusWindowMini ) {
+        divisor = MINI_DIVISOR;
+    }
+
+    //  Get image width and height.
+    imageWidth  = ( [_image size].width  / divisor );
+    imageHeight = ( [_image size].height / divisor );
     
 //  Set the content height to the greater of the text and image heights.
     contentHeight = ( ( imageHeight > dataHeight ) ? imageHeight : dataHeight );
 
 //  Setup the Window, and remove all its contentview's subviews.
-    windowWidth  = ( SW_PAD + imageWidth + SW_SPACE + dataWidth + SW_PAD );
-    windowHeight = ( SW_PAD + contentHeight + SW_PAD );
+    windowWidth  = ( (SW_PAD / divisor) + imageWidth + (SW_SPACE / divisor) + dataWidth + (SW_PAD / divisor) );
+    windowHeight = ( (SW_PAD / divisor) + contentHeight + (SW_PAD / divisor) );
     [self setFrame:NSMakeRect( (SW_BORDER + [[self screen] visibleFrame].origin.x),
                                (SW_BORDER + [[self screen] visibleFrame].origin.y),
                                windowWidth,
-                               windowHeight) display:YES];
+                               windowHeight) display:YES animate: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)),
+    imageRect = NSMakeRect( (SW_PAD / divisor),
+                            ((SW_PAD / divisor) + ((contentHeight - imageHeight) / 2)),
                             imageWidth,
                             imageHeight );
     imageView = [[[NSImageView alloc] initWithFrame:imageRect] autorelease];
     [imageView setImage:_image];
     [[self contentView] addSubview:imageView];
 
-    return NSMakeRect( (SW_PAD + imageWidth + SW_SPACE),
-                       (SW_PAD + ((contentHeight - dataHeight) / 2)),
+    return NSMakeRect( ((SW_PAD / divisor) + imageWidth + (SW_SPACE / divisor)),
+                       ((SW_PAD / divisor) + ((contentHeight - dataHeight) / 2)),
                        dataWidth,
                        dataHeight);
 }
 {
     if ( ! _locked ) {
 
+        float         divisor       = 1.0;
         float         dataWidth     = 0.0;
         float         dataHeight    = 0.0;
         NSRect        dataRect;
         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];
+        float         baseFontSize  = 18.0;
         ITTextField  *textField;
+        NSFont       *font;
+        NSDictionary *attr;
+
+        if ( _sizing == StatusWindowSmall ) {
+            divisor = SMALL_DIVISOR;
+        } else if ( _sizing == StatusWindowMini ) {
+            divisor = MINI_DIVISOR;
+        }
+
+        font = [NSFont fontWithName:@"Lucida Grande Bold" size:(baseFontSize / divisor)];
+        attr = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
         
 //      Iterate over each line to get text width and height
         while ( (oneLine = [lineEnum nextObject]) ) {
 {
     if ( ! _locked ) {
 
-        NSFont       *font        = [NSFont fontWithName:@"Lucida Grande Bold" size:size];
-        NSDictionary *attr        = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
-        NSSize        charSize    = [character sizeWithAttributes:attr];
-        float         cellHeight  = ( charSize.height + 4.0 );                 // Add 4.0 for shadow
-        float         cellWidth   = ( (charSize.width) + SW_METER_PAD ); // Add 8.0 for Apple suck
-        float         dataWidth   = ( cellWidth * count );
-        NSRect        dataRect    = [self setupWindowWithDataSize:NSMakeSize(dataWidth, cellHeight)];
+        float         divisor     = 1.0;
+        NSFont       *font;
+        NSDictionary *attr;
+        NSSize        charSize;
+        float         cellHeight;
+        float         cellWidth;
+        float         dataWidth;
+        NSRect        dataRect;
         NSEnumerator *cellEnum    = nil;
         id            aCell       = nil;
         int           activeCount = 0;
         NSColor      *onColor     = [NSColor whiteColor];
         NSColor      *offColor    = [NSColor colorWithCalibratedWhite:0.15 alpha:0.50];
-        NSMatrix     *volMatrix   = [[[NSMatrix alloc] initWithFrame:dataRect
-                                                                mode:NSHighlightModeMatrix
-                                                           cellClass:NSClassFromString(@"ITTextFieldCell")
-                                                        numberOfRows:1
-                                                     numberOfColumns:count] autorelease];
-
+        NSMatrix     *volMatrix;
+        
+        if ( _sizing == StatusWindowSmall ) {
+            divisor = SMALL_DIVISOR;
+        } else if ( _sizing == StatusWindowMini ) {
+            divisor = MINI_DIVISOR;
+        }
+        
+        font        = [NSFont fontWithName:@"Lucida Grande Bold" size:( size / divisor )];
+        attr        = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
+        charSize    = [character sizeWithAttributes:attr];
+        cellHeight  = ( charSize.height + 4.0 );  // Add 4.0 for shadow
+        cellWidth   = ( (charSize.width) + (SW_METER_PAD / divisor) );
+        dataWidth   = ( cellWidth * count );
+        dataRect    = [self setupWindowWithDataSize:NSMakeSize(dataWidth, cellHeight)];
+        volMatrix   = [[[NSMatrix alloc] initWithFrame:dataRect
+                                                  mode:NSHighlightModeMatrix
+                                             cellClass:NSClassFromString(@"ITTextFieldCell")
+                                          numberOfRows:1
+                                       numberOfColumns:count] autorelease];
+        
         [volMatrix setCellSize:NSMakeSize(cellWidth, cellHeight)];
         [volMatrix setIntercellSpacing:NSMakeSize(0, 0)];
 
index 11d7fe8..a57c128 100755 (executable)
@@ -14,9 +14,7 @@
 
 #import <Cocoa/Cocoa.h>
 #import "ITMTRemote.h"
-
-
-@class StatusWindow;
+#import "StatusWindow.h"
 
 
 typedef enum {
index 9e8ffff..2ee7342 100755 (executable)
@@ -31,31 +31,35 @@ static StatusWindowController *sharedController;
 - (id)init
 {
     if ( ( self = [super init] ) ) {
-    
+        
         float exitDelay;
         int entryTag;
         int exitTag;
         float entrySpeed;
         float exitSpeed;
         
+        NSData *colorData;
+        
         ITWindowEffect *entryEffect;
         ITWindowEffect *exitEffect;
-
+        
         _window = [[StatusWindow sharedWindow] retain];
         df = [[NSUserDefaults standardUserDefaults] retain];
-
+        
         exitDelay  = [df floatForKey:@"statusWindowVanishDelay"];
         entryTag   = [df integerForKey:@"statusWindowAppearanceEffect"];
         exitTag    = [df integerForKey:@"statusWindowVanishEffect"];
         entrySpeed = [df floatForKey:@"statusWindowAppearanceSpeed"];
         exitSpeed  = [df floatForKey:@"statusWindowVanishSpeed"];
-
+        
         [_window setExitMode:ITTransientStatusWindowExitAfterDelay];
         [_window setExitDelay:(exitDelay ? exitDelay : 4.0)];
-
+        
         [_window setHorizontalPosition:[df integerForKey:@"statusWindowHorizontalPosition"]];
         [_window setVerticalPosition:[df integerForKey:@"statusWindowVerticalPosition"]];
-
+        
+        [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
+        
         if ( entryTag == 2101 ) {
             entryEffect = [[[ITDissolveWindowEffect alloc] initWithWindow:_window] autorelease];
         } else if ( entryTag == 2102 ) {
@@ -67,9 +71,9 @@ static StatusWindowController *sharedController;
         } else {
             entryEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease];
         }
-
+        
         [_window setEntryEffect:entryEffect];
-
+        
         if ( exitTag == 2100 ) {
             exitEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease];
         } else if ( exitTag == 2102 ) {
@@ -81,17 +85,23 @@ static StatusWindowController *sharedController;
         } else {
             exitEffect = [[[ITDissolveWindowEffect alloc] initWithWindow:_window] autorelease];
         }
-
+        
         [_window setExitEffect:exitEffect];
-
+        
         [[_window entryEffect] setEffectTime:(entrySpeed ? entrySpeed : 0.8)];
         [[_window exitEffect]  setEffectTime:(exitSpeed  ? exitSpeed  : 0.8)];
         
         [(ITTSWBackgroundView *)[_window contentView]setBackgroundMode:
             (ITTSWBackgroundMode)[df integerForKey:@"statusWindowBackgroundMode"]];
-            
-        [(ITTSWBackgroundView *)[_window contentView]setBackgroundColor:
-            (NSColor *)[NSUnarchiver unarchiveObjectWithData:[df dataForKey:@"statusWindowBackgroundColor"]]];
+        
+        colorData = [df dataForKey:@"statusWindowBackgroundColor"];
+        
+        if ( colorData ) {
+            [(ITTSWBackgroundView *)[_window contentView] setBackgroundColor:
+                (NSColor *)[NSUnarchiver unarchiveObjectWithData:colorData]];
+        } else {
+            [(ITTSWBackgroundView *)[_window contentView] setBackgroundColor:[NSColor blueColor]];
+        }
     }
     
     return self;
@@ -161,6 +171,8 @@ static StatusWindowController *sharedController;
         text = [text stringByAppendingString:[@"\n" stringByAppendingString:ratingString]];
     }
     
+    
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildTextWindowWithString:text];
     [_window appear:self];
 }
@@ -171,6 +183,7 @@ static StatusWindowController *sharedController;
     NSString *bull = [NSString stringWithUTF8String:"♪ "];
     NSString *end  = [@"\n" stringByAppendingString:bull];
     [_window setImage:[NSImage imageNamed:@"Upcoming"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildTextWindowWithString:[bull stringByAppendingString:[titleStrings componentsJoinedByString:end]]];
     [_window appear:self];
 }
@@ -178,6 +191,7 @@ static StatusWindowController *sharedController;
 - (void)showVolumeWindowWithLevel:(float)level
 {
     [_window setImage:[NSImage imageNamed:@"Volume"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"▊"]
                                       size:18
                                      count:10
@@ -188,6 +202,7 @@ static StatusWindowController *sharedController;
 - (void)showRatingWindowWithRating:(float)rating
 {
     [_window setImage:[NSImage imageNamed:@"Rating"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"★"]
                                       size:48
                                      count:5
@@ -198,6 +213,7 @@ static StatusWindowController *sharedController;
 - (void)showShuffleWindow:(BOOL)shuffle
 {
     [_window setImage:[NSImage imageNamed:@"Shuffle"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildTextWindowWithString:( shuffle ? @"Shuffle On" : @"Shuffle Off")];
     [_window appear:self];
 }
@@ -215,6 +231,7 @@ static StatusWindowController *sharedController;
     }
     
     [_window setImage:[NSImage imageNamed:@"Repeat"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildTextWindowWithString:string];
     [_window appear:self];
 }
@@ -224,6 +241,7 @@ static StatusWindowController *sharedController;
     NSString *message = @"Would you like MenuTunes to launch\nautomatically at startup?";
 
     [_window setImage:[NSImage imageNamed:@"Setup"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildDialogWindowWithMessage:message
                             defaultButton:@"Launch at Startup"
                           alternateButton:@"Launch Manually"
@@ -241,6 +259,7 @@ static StatusWindowController *sharedController;
     NSString *message = @"Your 7-day unlimited trial period has elapsed.\nYou must register to continue using MenuTunes.";
 
     [_window setImage:[NSImage imageNamed:@"Register"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildDialogWindowWithMessage:message
                             defaultButton:@"Register Now"
                           alternateButton:@"Quit MenuTunes"
@@ -257,6 +276,7 @@ static StatusWindowController *sharedController;
     NSString *message = @"The selected shared player is available again.\nWould you like to reconnect to it?.";
 
     [_window setImage:[NSImage imageNamed:@"Register"]];
+    [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
     [_window buildDialogWindowWithMessage:message
                             defaultButton:@"Reconnect"
                           alternateButton:@"Ignore"
@@ -268,4 +288,5 @@ static StatusWindowController *sharedController;
     [_window setLocked:YES];
 }
 
+
 @end
\ No newline at end of file
index 4b1a4b8..94c5394 100755 (executable)
Binary files a/libValidate.a and b/libValidate.a differ