+ if ( album ) {
+ text = [text stringByAppendingString:[@"\n" stringByAppendingString:album]];
+ }
+ if ( artist ) {
+ text = [text stringByAppendingString:[@"\n" stringByAppendingString:artist]];
+ }
+ if ( time ) {
+ text = [text stringByAppendingString:[@"\n" stringByAppendingString:time]];
+ }
+ if ( track ) {
+ text = [text stringByAppendingString:[@"\n" stringByAppendingString:track]];
+ }
+ if ( rating > -1 ) {
+
+ NSString *ratingString = [NSString string];
+ NSString *emptyChar = [NSString stringWithUTF8String:"☆"];
+ NSString *fullChar = [NSString stringWithUTF8String:"★"];
+ int i;
+
+ for ( i = 1; i < 6; i++ ) {
+
+ if ( rating >= i ) {
+ ratingString = [ratingString stringByAppendingString:fullChar];
+ } else {
+ ratingString = [ratingString stringByAppendingString:emptyChar];
+ }
+ }
+
+ text = [text stringByAppendingString:[@"\n" stringByAppendingString:ratingString]];
+ }
+
+ [_window buildTextWindowWithString:text];
+ [_window appear:self];
+}
+
+- (void)showUpcomingSongsWindowWithTitles:(NSArray *)titleStrings
+{
+// NSString *bull = [NSString stringWithUTF8String:"‣ "];
+ NSString *bull = [NSString stringWithUTF8String:"♪ "];
+ NSString *end = [@"\n" stringByAppendingString:bull];
+ [_window setImage:[NSImage imageNamed:@"Upcoming"]];
+ [_window buildTextWindowWithString:[bull stringByAppendingString:[titleStrings componentsJoinedByString:end]]];
+ [_window appear:self];
+}
+
+- (void)showVolumeWindowWithLevel:(float)level
+{
+ [_window setImage:[NSImage imageNamed:@"Volume"]];
+ [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"▊"]
+ size:18
+ count:10
+ active:( ceil(level * 100) / 10 )];
+ [_window appear:self];
+}
+
+- (void)showRatingWindowWithRating:(float)rating
+{
+ [_window setImage:[NSImage imageNamed:@"Rating"]];
+ [_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"★"]
+ size:48
+ count:5
+ active:( ceil(rating * 100) / 20 )];
+ [_window appear:self];