vanishEffectPopup = NSPopUpButton;
vanishSpeedSlider = NSSlider;
window = NSWindow;
+ windowSizingPopup = NSPopUpButton;
zeroConfView = NSView;
};
SUPERCLASS = NSObject;
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;
}
IBOutlet NSPopUpButton *vanishEffectPopup;
IBOutlet NSSlider *vanishSpeedSlider;
IBOutlet NSWindow *window;
+ IBOutlet NSPopUpButton *windowSizingPopup;
IBOutlet NSView *zeroConfView;
MainController *controller;
[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];
[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];
NSMutableArray *loginarray;
NSEnumerator *loginEnum, *keyArrayEnum;
NSString *serverName;
+ NSData *colorData;
int selectedBGStyle;
id anItem;
[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"]) {
#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
alternateButton:(NSString *)title
target:(id)target
defaultAction:(SEL)okAction
- alternateAction:(SEL)alternateAction;
+ alternateAction:(SEL)alternateAction;
@end
#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
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)];
#import <Cocoa/Cocoa.h>
#import "ITMTRemote.h"
-
-
-@class StatusWindow;
+#import "StatusWindow.h"
typedef enum {
- (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 ) {
} else {
entryEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease];
}
-
+
[_window setEntryEffect:entryEffect];
-
+
if ( exitTag == 2100 ) {
exitEffect = [[[ITCutWindowEffect alloc] initWithWindow:_window] autorelease];
} else if ( exitTag == 2102 ) {
} 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;
text = [text stringByAppendingString:[@"\n" stringByAppendingString:ratingString]];
}
+
+ [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
[_window buildTextWindowWithString:text];
[_window appear:self];
}
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];
}
- (void)showVolumeWindowWithLevel:(float)level
{
[_window setImage:[NSImage imageNamed:@"Volume"]];
+ [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
[_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"▊"]
size:18
count:10
- (void)showRatingWindowWithRating:(float)rating
{
[_window setImage:[NSImage imageNamed:@"Rating"]];
+ [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
[_window buildMeterWindowWithCharacter:[NSString stringWithUTF8String:"★"]
size:48
count:5
- (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];
}
}
[_window setImage:[NSImage imageNamed:@"Repeat"]];
+ [_window setSizing:(StatusWindowSizing)[df integerForKey:@"statusWindowSizing"]];
[_window buildTextWindowWithString:string];
[_window appear:self];
}
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"
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"
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"
[_window setLocked:YES];
}
+
@end
\ No newline at end of file