X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/6f6c21caaebee598943084dd66a15f21a7f65cb5..0948b4b6166bbee8caefca1278b6551d264068a8:/StatusWindowController.m?ds=inline diff --git a/StatusWindowController.m b/StatusWindowController.m index e28bf71..633c31c 100755 --- a/StatusWindowController.m +++ b/StatusWindowController.m @@ -3,6 +3,7 @@ #import "PreferencesController.h" #import "MainController.h" +#import #import #import #import @@ -10,10 +11,8 @@ #import #import - static StatusWindowController *sharedController; - @implementation StatusWindowController @@ -30,58 +29,73 @@ static StatusWindowController *sharedController; - (id)init { if ( ( self = [super init] ) ) { - + float exitDelay; - int entryTag; - int exitTag; + NSString *entryClass; + NSString *exitClass; + NSArray *classList = [ITWindowEffect effectClasses]; float entrySpeed; float exitSpeed; + NSArray *screens = [NSScreen screens]; + int screenIndex; + + 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"]; + entryClass = [df stringForKey:@"statusWindowAppearanceEffect"]; + exitClass = [df stringForKey:@"statusWindowVanishEffect"]; entrySpeed = [df floatForKey:@"statusWindowAppearanceSpeed"]; exitSpeed = [df floatForKey:@"statusWindowVanishSpeed"]; - + + screenIndex = [df integerForKey:@"statusWindowScreenIndex"]; + if (screenIndex >= [screens count]) { + screenIndex = 0; + } + [_window setScreen:[screens objectAtIndex:screenIndex]]; + [_window setExitMode:ITTransientStatusWindowExitAfterDelay]; [_window setExitDelay:(exitDelay ? exitDelay : 4.0)]; - - if ( entryTag == 2101 ) { - entryEffect = [[[ITDissolveWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( entryTag == 2102 ) { - entryEffect = [[[ITSlideVerticallyWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( entryTag == 2103 ) { - entryEffect = [[[ITSlideHorizontallyWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( entryTag == 2104 ) { - entryEffect = [[[ITPivotWindowEffect alloc] initWithWindow:_window] autorelease]; + + [_window setHorizontalPosition:[df integerForKey:@"statusWindowHorizontalPosition"]]; + [_window setVerticalPosition:[df integerForKey:@"statusWindowVerticalPosition"]]; + + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; + + if ( [classList containsObject:NSClassFromString(entryClass)] ) { + entryEffect = [[[NSClassFromString(entryClass) alloc] initWithWindow:_window] autorelease]; } else { entryEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease]; } - - [_window setEntryEffect:entryEffect]; - - if ( exitTag == 2100 ) { - exitEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( exitTag == 2102 ) { - exitEffect = [[[ITSlideVerticallyWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( exitTag == 2103 ) { - exitEffect = [[[ITSlideHorizontallyWindowEffect alloc] initWithWindow:_window] autorelease]; - } else if ( exitTag == 2104 ) { - exitEffect = [[[ITPivotWindowEffect alloc] initWithWindow:_window] autorelease]; + + if ( [classList containsObject:NSClassFromString(exitClass)] ) { + exitEffect = [[[NSClassFromString(exitClass) alloc] initWithWindow:_window] autorelease]; } else { exitEffect = [[[ITDissolveWindowEffect alloc] initWithWindow:_window] autorelease]; } - + + [_window setEntryEffect:entryEffect]; [_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"]]; + + colorData = [df dataForKey:@"statusWindowBackgroundColor"]; + + if ( colorData ) { + [(ITTSWBackgroundView *)[_window contentView] setBackgroundColor: + (NSColor *)[NSUnarchiver unarchiveObjectWithData:colorData]]; + } else { + [(ITTSWBackgroundView *)[_window contentView] setBackgroundColor:[NSColor blueColor]]; + } } return self; @@ -93,26 +107,23 @@ static StatusWindowController *sharedController; [super dealloc]; } -- (void)readDefaults -{ - ITHorizontalWindowPosition horizontalPosition = [[NSUserDefaults standardUserDefaults] integerForKey:@"statusWindowHorizontalPosition"]; - ITVerticalWindowPosition verticalPosition = [[NSUserDefaults standardUserDefaults] integerForKey:@"statusWindowVerticalPosition"]; - [_window setHorizontalPosition:horizontalPosition]; - [_window setVerticalPosition:verticalPosition]; -} - - (void)showSongInfoWindowWithSource:(ITMTRemotePlayerSource)source title: (NSString *)title album: (NSString *)album artist: (NSString *)artist + composer: (NSString *)composer time: (NSString *)time // FLOW: Should probably be NSDate or something. track: (NSString *)track rating: (int)rating + playCount: (int)playCount + image: (NSImage *)art { NSImage *image = nil; NSString *text = title; - if ( source == ITMTRemoteLibrarySource ) { + if ( art != nil ) { + image = art; + } else if ( source == ITMTRemoteLibrarySource ) { image = [NSImage imageNamed:@"Library"]; } else if ( source == ITMTRemoteCDSource ) { image = [NSImage imageNamed:@"CD"]; @@ -125,21 +136,27 @@ static StatusWindowController *sharedController; } else if ( source == ITMTRemoteSharedLibrarySource ) { image = [NSImage imageNamed:@"Library"]; } - + [_window setImage:image]; - + if ( album ) { text = [text stringByAppendingString:[@"\n" stringByAppendingString:album]]; } if ( artist ) { text = [text stringByAppendingString:[@"\n" stringByAppendingString:artist]]; } + if ( composer ) { + text = [text stringByAppendingString:[@"\n" stringByAppendingString:composer]]; + } if ( time ) { text = [text stringByAppendingString:[@"\n" stringByAppendingString:time]]; } if ( track ) { text = [text stringByAppendingString:[@"\n" stringByAppendingString:track]]; } + if (playCount > -1) { + text = [text stringByAppendingString:[NSString stringWithFormat:@"\n%@: %i", NSLocalizedString(@"playCount", @"Play Count"), playCount]]; + } if ( rating > -1 ) { NSString *ratingString = [NSString string]; @@ -159,6 +176,7 @@ static StatusWindowController *sharedController; text = [text stringByAppendingString:[@"\n" stringByAppendingString:ratingString]]; } + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildTextWindowWithString:text]; [_window appear:self]; } @@ -169,6 +187,7 @@ static StatusWindowController *sharedController; NSString *bull = [NSString stringWithUTF8String:"♪ "]; NSString *end = [@"\n" stringByAppendingString:bull]; [_window setImage:[NSImage imageNamed:@"Upcoming"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildTextWindowWithString:[bull stringByAppendingString:[titleStrings componentsJoinedByString:end]]]; [_window appear:self]; } @@ -176,6 +195,7 @@ static StatusWindowController *sharedController; - (void)showVolumeWindowWithLevel:(float)level { [_window setImage:[NSImage imageNamed:@"Volume"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"▊"] size:18 count:10 @@ -186,6 +206,7 @@ static StatusWindowController *sharedController; - (void)showRatingWindowWithRating:(float)rating { [_window setImage:[NSImage imageNamed:@"Rating"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"★"] size:48 count:5 @@ -196,7 +217,8 @@ static StatusWindowController *sharedController; - (void)showShuffleWindow:(BOOL)shuffle { [_window setImage:[NSImage imageNamed:@"Shuffle"]]; - [_window buildTextWindowWithString:( shuffle ? @"Shuffle On" : @"Shuffle Off")]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; + [_window buildTextWindowWithString:( shuffle ? NSLocalizedString(@"shuffleOn", @"Shuffle On") : NSLocalizedString(@"shuffleOff", @"Shuffle Off"))]; [_window appear:self]; } @@ -205,26 +227,28 @@ static StatusWindowController *sharedController; NSString *string = nil; if ( mode == StatusWindowRepeatNone ) { - string = @"Repeat Off"; + string = NSLocalizedString(@"repeatOff", @"Repeat Off"); } else if ( mode == StatusWindowRepeatGroup ) { - string = @"Repeat Playlist"; + string = NSLocalizedString(@"repeatPlaylist", @"Repeat Playlist"); } else if ( mode == StatusWindowRepeatTrack ) { - string = @"Repeat One Track"; + string = NSLocalizedString(@"repeatOneTrack", @"Repeat One Track");; } [_window setImage:[NSImage imageNamed:@"Repeat"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildTextWindowWithString:string]; [_window appear:self]; } - (void)showSetupQueryWindow { - NSString *message = @"Would you like MenuTunes to launch\nautomatically at startup?"; + NSString *message = NSLocalizedString(@"autolaunch_msg", @"Would you like MenuTunes to launch\nautomatically at startup?"); [_window setImage:[NSImage imageNamed:@"Setup"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildDialogWindowWithMessage:message - defaultButton:@"Launch at Startup" - alternateButton:@"Launch Manually" + defaultButton:NSLocalizedString(@"launch_at_startup", @"Launch at Startup") + alternateButton:NSLocalizedString(@"launch_manually", @"Launch Manually") target:[PreferencesController sharedPrefs] defaultAction:@selector(autoLaunchOK) alternateAction:@selector(autoLaunchCancel)]; @@ -236,12 +260,13 @@ static StatusWindowController *sharedController; - (void)showRegistrationQueryWindow { - NSString *message = @"Your 7-day unlimited trial period has elapsed.\nYou must register to continue using MenuTunes."; + NSString *message = NSLocalizedString(@"trialexpired_msg", @"Your 7-day unlimited trial period has elapsed.\nYou must register to continue using MenuTunes."); [_window setImage:[NSImage imageNamed:@"Register"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildDialogWindowWithMessage:message - defaultButton:@"Register Now" - alternateButton:@"Quit MenuTunes" + defaultButton:NSLocalizedString(@"registernow", @"Register Now") + alternateButton:NSLocalizedString(@"quitmenutunes", @"Quit MenuTunes") target:[MainController sharedController] defaultAction:@selector(registerNowOK) alternateAction:@selector(registerNowCancel)]; @@ -252,12 +277,13 @@ static StatusWindowController *sharedController; - (void)showReconnectQueryWindow { - NSString *message = @"The selected shared player is available again.\nWould you like to reconnect to it?."; - - [_window setImage:[NSImage imageNamed:@"Register"]]; + NSString *message = NSLocalizedString(@"sharedplayeravailable_msg", @"The selected shared player is available again.\nWould you like to reconnect to it?"); + [_window setLocked:NO]; + [_window setImage:[NSImage imageNamed:@"Setup"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; [_window buildDialogWindowWithMessage:message - defaultButton:@"Reconnect" - alternateButton:@"Ignore" + defaultButton:NSLocalizedString(@"reconnect", @"Reconnect") + alternateButton:NSLocalizedString(@"ignore", @"Ignore") target:[MainController sharedController] defaultAction:@selector(reconnect) alternateAction:@selector(cancelReconnect)]; @@ -266,4 +292,38 @@ static StatusWindowController *sharedController; [_window setLocked:YES]; } +- (void)showNetworkErrorQueryWindow +{ + NSString *message = NSLocalizedString(@"sharedplayerunreachable_msg", @"The remote MenuTunes server is unreachable.\nMenuTunes will revert back to the local player."); + + [_window setImage:[NSImage imageNamed:@"Setup"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; + [_window buildDialogWindowWithMessage:message + defaultButton:@" OK " + alternateButton:nil + target:[MainController sharedController] + defaultAction:@selector(cancelReconnect) + alternateAction:nil]; + + [_window appear:self]; + [_window setLocked:YES]; +} + +- (void)showPreferencesUpdateWindow +{ + NSString *message = NSLocalizedString(@"reconfigureprefs_msg", @"The new features in this version of MenuTunes\nrequire you to reconfigure your preferences."); + + [_window setImage:[NSImage imageNamed:@"Setup"]]; + [_window setSizing:(ITTransientStatusWindowSizing)[df integerForKey:@"statusWindowSizing"]]; + [_window buildDialogWindowWithMessage:message + defaultButton:NSLocalizedString(@"showpreferences", @"Show Preferences") + alternateButton:@"OK" + target:[MainController sharedController] + defaultAction:@selector(showPreferencesAndClose) + alternateAction:@selector(cancelReconnect)]; + + [_window appear:self]; + [_window setLocked:YES]; +} + @end \ No newline at end of file