From 7819210b969008514f504ae761a764c9b5615611 Mon Sep 17 00:00:00 2001 From: vspader Date: Mon, 9 Mar 2009 21:04:46 -0700 Subject: [PATCH] Added interface for shuffle albums mode. --- Cog.xcodeproj/project.pbxproj | 4 + English.lproj/InfoInspector.xib | 6 +- English.lproj/MainMenu.xib | 206 ++++++++++++++++++++++++-------- Images/shuffle_albums.png | Bin 0 -> 226 bytes Playlist/PlaylistController.h | 11 +- Playlist/PlaylistController.m | 45 +++++-- Window/ShuffleTransformers.h | 13 +- Window/ShuffleTransformers.m | 67 ++++++++++- 8 files changed, 278 insertions(+), 74 deletions(-) create mode 100644 Images/shuffle_albums.png diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index c615f2d26..9796ec074 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 17342ABF0D5FD36400E8D854 /* OpenURLPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17342ABD0D5FD36400E8D854 /* OpenURLPanel.xib */; }; 173855FF0E0CC81F00488CD4 /* FileTreeOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 173855FE0E0CC81F00488CD4 /* FileTreeOutlineView.m */; }; 173A43A10F3FD26500676A7B /* ToolTipWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 173A43A00F3FD26500676A7B /* ToolTipWindow.m */; }; + 1745CBA50F661DBB00E513F7 /* shuffle_albums.png in Resources */ = {isa = PBXBuildFile; fileRef = 1745CBA40F661DBB00E513F7 /* shuffle_albums.png */; }; 1752C36C0F59E00100F85F28 /* PlaybackButtons.m in Sources */ = {isa = PBXBuildFile; fileRef = 1752C36B0F59E00100F85F28 /* PlaybackButtons.m */; }; 1755E1F90BA0D2B600CA3560 /* PlaylistLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */; }; 1766C6930B911DF1004A7AE4 /* AudioScrobbler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1766C68F0B911DF1004A7AE4 /* AudioScrobbler.m */; }; @@ -559,6 +560,7 @@ 173855FE0E0CC81F00488CD4 /* FileTreeOutlineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileTreeOutlineView.m; path = FileTree/FileTreeOutlineView.m; sourceTree = ""; }; 173A439F0F3FD26500676A7B /* ToolTipWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ToolTipWindow.h; path = ToolTip/ToolTipWindow.h; sourceTree = ""; }; 173A43A00F3FD26500676A7B /* ToolTipWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ToolTipWindow.m; path = ToolTip/ToolTipWindow.m; sourceTree = ""; }; + 1745CBA40F661DBB00E513F7 /* shuffle_albums.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = shuffle_albums.png; path = Images/shuffle_albums.png; sourceTree = ""; }; 1752C36A0F59E00100F85F28 /* PlaybackButtons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlaybackButtons.h; path = Window/PlaybackButtons.h; sourceTree = ""; }; 1752C36B0F59E00100F85F28 /* PlaybackButtons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PlaybackButtons.m; path = Window/PlaybackButtons.m; sourceTree = ""; }; 1755E1F60BA0D2B600CA3560 /* PlaylistLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PlaylistLoader.h; sourceTree = ""; }; @@ -956,6 +958,7 @@ 1766C88C0B912FB4004A7AE4 /* info_off.png */, 1766C88D0B912FB4004A7AE4 /* info_on.png */, 1766C8900B912FB4004A7AE4 /* shuffle_off.png */, + 1745CBA40F661DBB00E513F7 /* shuffle_albums.png */, 1766C8910B912FB4004A7AE4 /* shuffle_on.png */, 177EC0350B8BC2FF0000BC8C /* next.png */, 177EC0370B8BC2FF0000BC8C /* pause.png */, @@ -1840,6 +1843,7 @@ 17D1B0D20F6320EA00694C57 /* InfoInspector.xib in Resources */, 17D1B1DC0F6330D400694C57 /* Feedback.xib in Resources */, 1778D3B00F645A190037E7A0 /* missingArt.png in Resources */, + 1745CBA50F661DBB00E513F7 /* shuffle_albums.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/English.lproj/InfoInspector.xib b/English.lproj/InfoInspector.xib index 89b3db356..606b29923 100644 --- a/English.lproj/InfoInspector.xib +++ b/English.lproj/InfoInspector.xib @@ -468,7 +468,7 @@ YES - 67239424 + 604110336 33685504 0 @@ -1260,9 +1260,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilderKit com.apple.InterfaceBuilderKit - {{395, 420}, {351, 498}} + {{548, 275}, {351, 498}} com.apple.InterfaceBuilder.CocoaPlugin - {{395, 420}, {351, 498}} + {{548, 275}, {351, 498}} diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 8b71bdfe3..591917272 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -8,10 +8,10 @@ 353.00 YES - - + + YES @@ -2559,7 +2559,7 @@ OQA YES - Repeat All + All r 1572864 2147483647 @@ -2568,7 +2568,7 @@ OQA - Repeat Album + Album 1048576 2147483647 @@ -2577,7 +2577,7 @@ OQA - Repeat One + One 1048576 2147483647 @@ -2597,7 +2597,7 @@ OQA - Repeat None + None 1048576 2147483647 @@ -2607,14 +2607,45 @@ OQA - + Shuffle - s - 1572864 + 2147483647 + submenuAction: + + Shuffle + + YES + + + All + s + 1572864 + 2147483647 + + + + + + Albums + + 2147483647 + + + + + + Off + + 2147483647 + + + + + @@ -5724,35 +5755,6 @@ OQA 2412 - - - value: shuffle - - - - - - value: shuffle - value - shuffle - - YES - - YES - NSAllowsEditingMultipleValuesSelection - NSConditionallySetsEnabled - - - YES - - - - - 2 - - - 2415 - toggleSideView: @@ -5825,6 +5827,66 @@ OQA 2437 + + + value: shuffle + + + + + + value: shuffle + value + shuffle + + NSValueTransformerName + ShuffleAllTransformer + + 2 + + + 2445 + + + + value: shuffle + + + + + + value: shuffle + value + shuffle + + NSValueTransformerName + ShuffleAlbumsTransformer + + 2 + + + 2448 + + + + value: shuffle + + + + + + value: shuffle + value + shuffle + + NSValueTransformerName + ShuffleOffTransformer + + 2 + + + 2451 + @@ -6312,7 +6374,6 @@ OQA YES - @@ -6327,6 +6388,7 @@ OQA + @@ -6340,11 +6402,6 @@ OQA - - 1120 - - - 1132 @@ -7552,6 +7609,41 @@ OQA + + 2438 + + + YES + + + + + + 2439 + + + YES + + + + + + + + 2440 + + + + + 2442 + + + + + 2443 + + + @@ -7582,8 +7674,6 @@ OQA 111.ImportedFromIB2 1116.IBPluginDependency 1116.ImportedFromIB2 - 1120.IBPluginDependency - 1120.ImportedFromIB2 1132.IBPluginDependency 1132.ImportedFromIB2 1135.IBPluginDependency @@ -7942,6 +8032,12 @@ OQA 2431.IBPluginDependency 2431.ImportedFromIB2 2434.IBPluginDependency + 2438.IBPluginDependency + 2439.IBEditorWindowLastContentRect + 2439.IBPluginDependency + 2440.IBPluginDependency + 2442.IBPluginDependency + 2443.IBPluginDependency 29.IBEditorWindowLastContentRect 29.IBPluginDependency 29.ImportedFromIB2 @@ -8077,8 +8173,6 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{853, 964}, {64, 6}} com.apple.InterfaceBuilder.CocoaPlugin @@ -8271,7 +8365,7 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{744, 442}, {186, 93}} + {{823, 599}, {136, 93}} com.apple.InterfaceBuilder.CocoaPlugin {{675, 786}, {186, 93}} com.apple.InterfaceBuilder.CocoaPlugin @@ -8421,7 +8515,13 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{596, 892}, {462, 20}} + com.apple.InterfaceBuilder.CocoaPlugin + {{823, 609}, {142, 63}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{260, 892}, {462, 20}} com.apple.InterfaceBuilder.CocoaPlugin {{112, 736}, {462, 20}} @@ -8433,7 +8533,7 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin - {{771, 554}, {222, 293}} + {{791, 599}, {222, 293}} com.apple.InterfaceBuilder.CocoaPlugin {{307, 443}, {222, 293}} @@ -8507,7 +8607,7 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin - {{840, 554}, {299, 293}} + {{524, 599}, {299, 293}} com.apple.InterfaceBuilder.CocoaPlugin {{376, 543}, {299, 293}} @@ -8535,7 +8635,7 @@ OQA - 2437 + 2451 diff --git a/Images/shuffle_albums.png b/Images/shuffle_albums.png new file mode 100644 index 0000000000000000000000000000000000000000..d26644d48303d848d2c0f232d22ea178fdfc5846 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XT0C7GLn>}1{rUgjo>{e_v(d@m1DnBu) z8nRZjOMPpQ$lu_Q$-H81Uk2MTXXdF1Cf}F~8O2_H_gMFQcg7h literal 0 HcmV?d00001 diff --git a/Playlist/PlaylistController.h b/Playlist/PlaylistController.h index 8153cfb64..f3a8d688f 100644 --- a/Playlist/PlaylistController.h +++ b/Playlist/PlaylistController.h @@ -23,6 +23,13 @@ typedef enum { RepeatAll } RepeatMode; +typedef enum { + ShuffleOff = 0, + ShuffleAlbums, + ShuffleAll +} ShuffleMode; + + typedef enum { URLOriginInternal = 0, URLOriginExternal, @@ -52,8 +59,8 @@ typedef enum { //PUBLIC METHODS -- (void)setShuffle:(BOOL)s; -- (BOOL)shuffle; +- (void)setShuffle:(ShuffleMode)s; +- (ShuffleMode)shuffle; - (void)setRepeat:(RepeatMode)r; - (RepeatMode)repeat; - (NSArray *)filterPlaylistOnAlbum:(NSString *)album; diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index 7fc9f3162..1e0fe5f3e 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -47,10 +47,25 @@ [NSValueTransformer setValueTransformer:repeatModeImageTransformer forName:@"RepeatModeImageTransformer"]; + + NSValueTransformer *shuffleOffTransformer = [[[ShuffleModeTransformer alloc] initWithMode:ShuffleOff] autorelease]; + [NSValueTransformer setValueTransformer:shuffleOffTransformer + forName:@"ShuffleOffTransformer"]; + + NSValueTransformer *shuffleAlbumsTransformer = [[[ShuffleModeTransformer alloc] initWithMode:ShuffleAlbums] autorelease]; + [NSValueTransformer setValueTransformer:shuffleAlbumsTransformer + forName:@"ShuffleAlbumsTransformer"]; + + NSValueTransformer *shuffleAllTransformer = [[[ShuffleModeTransformer alloc] initWithMode:ShuffleAll] autorelease]; + [NSValueTransformer setValueTransformer:shuffleAllTransformer + forName:@"ShuffleAllTransformer"]; + NSValueTransformer *shuffleImageTransformer = [[[ShuffleImageTransformer alloc] init] autorelease]; [NSValueTransformer setValueTransformer:shuffleImageTransformer forName:@"ShuffleImageTransformer"]; + + NSValueTransformer *statusImageTransformer = [[[StatusImageTransformer alloc] init] autorelease]; [NSValueTransformer setValueTransformer:statusImageTransformer forName:@"StatusImageTransformer"]; @@ -64,8 +79,8 @@ - (void)initDefaults { NSDictionary *defaultsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:RepeatNone], @"repeatMode", - [NSNumber numberWithBool:NO], @"shuffle", + [NSNumber numberWithInteger:RepeatNone], @"repeat", + [NSNumber numberWithInteger:ShuffleOff], @"shuffle", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDictionary]; @@ -360,7 +375,17 @@ - (IBAction)toggleShuffle:(id)sender { - [self setShuffle: ![self shuffle]]; + ShuffleMode shuffle = [self shuffle]; + + if (shuffle == ShuffleOff) { + [self setShuffle: ShuffleAlbums]; + } + else if (shuffle == ShuffleAlbums) { + [self setShuffle: ShuffleAll]; + } + else if (shuffle == ShuffleAll) { + [self setShuffle: ShuffleOff]; + } } - (IBAction)toggleRepeat:(id)sender @@ -626,26 +651,26 @@ currentEntry = pe; } -- (void)setShuffle:(BOOL)s +- (void)setShuffle:(ShuffleMode)s { - [[NSUserDefaults standardUserDefaults] setBool:s forKey:@"shuffle"]; - if (s == YES) + [[NSUserDefaults standardUserDefaults] setInteger:s forKey:@"shuffle"]; + if (s != ShuffleOff) [self resetShuffleList]; [playbackController playlistDidChange:self]; } -- (BOOL)shuffle +- (ShuffleMode)shuffle { - return [[NSUserDefaults standardUserDefaults] boolForKey:@"shuffle"]; + return [[NSUserDefaults standardUserDefaults] integerForKey:@"shuffle"]; } - (void)setRepeat:(RepeatMode)r { - [[NSUserDefaults standardUserDefaults] setInteger:r forKey:@"repeatMode"]; + [[NSUserDefaults standardUserDefaults] setInteger:r forKey:@"repeat"]; [playbackController playlistDidChange:self]; } - (RepeatMode)repeat { - return [[NSUserDefaults standardUserDefaults] integerForKey:@"repeatMode"]; + return [[NSUserDefaults standardUserDefaults] integerForKey:@"repeat"]; } - (IBAction)clear:(id)sender diff --git a/Window/ShuffleTransformers.h b/Window/ShuffleTransformers.h index 50ce99689..b958ebadd 100644 --- a/Window/ShuffleTransformers.h +++ b/Window/ShuffleTransformers.h @@ -7,8 +7,19 @@ // #import - +#import "PlaylistController.h" @interface ShuffleImageTransformer : NSValueTransformer {} @end +@interface ShuffleModeTransformer : NSValueTransformer { + ShuffleMode shuffleMode; +} + +- (id)initWithMode:(ShuffleMode)s; + +@end + + + + diff --git a/Window/ShuffleTransformers.m b/Window/ShuffleTransformers.m index 1c7de68b7..d3a8d64a7 100644 --- a/Window/ShuffleTransformers.m +++ b/Window/ShuffleTransformers.m @@ -7,8 +7,6 @@ // #import "ShuffleTransformers.h" - - @implementation ShuffleImageTransformer + (Class)transformedValueClass { return [NSImage class]; } @@ -16,14 +14,73 @@ // Convert from string to RepeatMode - (id)transformedValue:(id)value { + NSLog(@"Transforming value: %@", value); + if (value == nil) return nil; - BOOL shuffleEnabled = [value boolValue]; + ShuffleMode mode = [value integerValue]; - if (shuffleEnabled == YES) { + if (mode == ShuffleOff) { + return [NSImage imageNamed:@"shuffle_off"]; + } + else if (mode == ShuffleAlbums) { + return [NSImage imageNamed:@"shuffle_albums"]; + } + else if (mode == ShuffleAll) { return [NSImage imageNamed:@"shuffle_on"]; } - return [NSImage imageNamed:@"shuffle_off"]; + + return nil; } @end + + +@implementation ShuffleModeTransformer + ++ (Class)transformedValueClass { return [NSNumber class]; } ++ (BOOL)allowsReverseTransformation { return YES; } + +- (id)initWithMode:(ShuffleMode)s +{ + self = [super init]; + if (self) + { + shuffleMode = s; + } + + return self; +} + +// Convert from RepeatMode to BOOL +- (id)transformedValue:(id)value { + NSLog(@"Transforming value: %@", value); + + if (value == nil) return nil; + + ShuffleMode mode = [value integerValue]; + + if (shuffleMode == mode) { + return [NSNumber numberWithBool:YES]; + } + + + return [NSNumber numberWithBool:NO]; +} + +- (id)reverseTransformedValue:(id)value { + if (value == nil) return nil; + + BOOL enabled = [value boolValue]; + if (enabled) { + return [NSNumber numberWithInt:shuffleMode]; + } + else if(shuffleMode == ShuffleOff) { + return [NSNumber numberWithInt:ShuffleAll]; + } + else { + return [NSNumber numberWithInt:ShuffleOff]; + } +} + +@end \ No newline at end of file