From: Matthew Judy Date: Thu, 20 Nov 2003 14:42:22 +0000 (+0000) Subject: Sizing is now in, with appropriate UI. Still working on the last of the positioning... X-Git-Tag: v1.2~30 X-Git-Url: http://git.ithinksw.org/MenuTunes.git/commitdiff_plain/d8546c318b2dc71d68753ca0c0abe89f07c166b3 Sizing is now in, with appropriate UI. Still working on the last of the positioning stuff. We're almost there, but the computer needs a reboot. It's dying here, and so am I, so I'm gonna get some rest and come back to this fresh. Tomorrow is Last Day, Leo, 25. Proceeding to Carousel. --- diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib index 3dea3b8..d4c2f15 100755 --- a/English.lproj/Preferences.nib/classes.nib +++ b/English.lproj/Preferences.nib/classes.nib @@ -58,6 +58,7 @@ vanishEffectPopup = NSPopUpButton; vanishSpeedSlider = NSSlider; window = NSWindow; + windowSizingPopup = NSPopUpButton; zeroConfView = NSView; }; SUPERCLASS = NSObject; diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index 19faba6..df26ca3 100755 Binary files a/English.lproj/Preferences.nib/keyedobjects.nib and b/English.lproj/Preferences.nib/keyedobjects.nib differ diff --git a/MainController.m b/MainController.m index bffb59c..5b85436 100755 --- a/MainController.m +++ b/MainController.m @@ -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; } diff --git a/PreferencesController.h b/PreferencesController.h index 1d556dd..5b01b28 100755 --- a/PreferencesController.h +++ b/PreferencesController.h @@ -60,6 +60,7 @@ IBOutlet NSPopUpButton *vanishEffectPopup; IBOutlet NSSlider *vanishSpeedSlider; IBOutlet NSWindow *window; + IBOutlet NSPopUpButton *windowSizingPopup; IBOutlet NSView *zeroConfView; MainController *controller; diff --git a/PreferencesController.m b/PreferencesController.m index e7421f4..a17c1b3 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -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"]) { diff --git a/StatusWindow.h b/StatusWindow.h index 8432e05..c956be7 100755 --- a/StatusWindow.h +++ b/StatusWindow.h @@ -16,24 +16,22 @@ #import -#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 diff --git a/StatusWindow.m b/StatusWindow.m index ca229ee..01c6ef4 100755 --- a/StatusWindow.m +++ b/StatusWindow.m @@ -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; @@ -61,6 +75,11 @@ [self setExitMode:(flag ? ITTransientStatusWindowExitOnCommand : ITTransientStatusWindowExitAfterDelay)]; } +- (void)setSizing:(StatusWindowSizing)newSizing +{ + _sizing = newSizing; +} + /*************************************************************************/ #pragma mark - @@ -83,6 +102,7 @@ - (NSRect)setupWindowWithDataSize:(NSSize)dataSize { + float divisor = 1.0; NSRect imageRect; float imageWidth = 0.0; float imageHeight = 0.0; @@ -91,35 +111,41 @@ 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); } @@ -128,15 +154,26 @@ { 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]) ) { @@ -179,24 +216,40 @@ { 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)]; diff --git a/StatusWindowController.h b/StatusWindowController.h index 11d7fe8..a57c128 100755 --- a/StatusWindowController.h +++ b/StatusWindowController.h @@ -14,9 +14,7 @@ #import #import "ITMTRemote.h" - - -@class StatusWindow; +#import "StatusWindow.h" typedef enum { diff --git a/StatusWindowController.m b/StatusWindowController.m index 9e8ffff..2ee7342 100755 --- a/StatusWindowController.m +++ b/StatusWindowController.m @@ -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 diff --git a/libValidate.a b/libValidate.a index 4b1a4b8..94c5394 100755 Binary files a/libValidate.a and b/libValidate.a differ