diff --git a/Application/PlaybackController.h b/Application/PlaybackController.h index f2f8f6432..88c52d842 100644 --- a/Application/PlaybackController.h +++ b/Application/PlaybackController.h @@ -21,8 +21,6 @@ IBOutlet NSSlider *volumeSlider; - IBOutlet NSSegmentedControl *playbackButtons; - IBOutlet NSArrayController *outputDevices; NSTimer *positionTimer; @@ -33,8 +31,6 @@ double position; BOOL seekable; - BOOL showTimeRemaining; - AudioScrobbler *scrobbler; } @@ -49,7 +45,6 @@ - (IBAction)pauseResume:(id)sender; - (IBAction)skipToNextAlbum:(id)sender; - (IBAction)skipToPreviousAlbum:(id)sender; -- (IBAction)playbackButtonClick:(id)sender; - (IBAction)play:(id)sender; - (IBAction)pause:(id)sender; diff --git a/Application/PlaybackController.m b/Application/PlaybackController.m index 4ad1cb545..385ab8f4a 100644 --- a/Application/PlaybackController.m +++ b/Application/PlaybackController.m @@ -27,9 +27,7 @@ audioPlayer = [[AudioPlayer alloc] init]; [audioPlayer setDelegate:self]; - playbackStatus = kCogStatusStopped; - - showTimeRemaining = NO; + [self setPlaybackStatus: kCogStatusStopped]; scrobbler = [[AudioScrobbler alloc] init]; [GrowlApplicationBridge setGrowlDelegate:self]; @@ -94,7 +92,7 @@ - (IBAction)pause:(id)sender { [audioPlayer pause]; - playbackStatus = kCogStatusPaused; + [self setPlaybackStatus: kCogStatusPaused]; if([[NSUserDefaults standardUserDefaults] boolForKey:@"enableAudioScrobbler"]) { [scrobbler pause]; @@ -130,24 +128,6 @@ } -- (IBAction)playbackButtonClick:(id)sender -{ - int clickedSegment = [sender selectedSegment]; - if (clickedSegment == 0) //Previous - { - [self prev:sender]; - } - else if (clickedSegment == 1) //Play - { - [self playPauseResume:sender]; - } - else if (clickedSegment == 2) //Next - { - [self next:sender]; - } -} - - - (IBAction)play:(id)sender { if ([playlistView selectedRow] == -1) @@ -252,7 +232,8 @@ [self setPosition:seekTo]; } -- (void)changePlayButtonImage:(NSString *)name +/* + - (void)changePlayButtonImage:(NSString *)name { NSImage *img = [NSImage imageNamed:name]; // [img retain]; @@ -264,7 +245,7 @@ [playbackButtons setImage:img forSegment:1]; } - +*/ - (IBAction)changeVolume:(id)sender { NSLog(@"VOLUME: %lf, %lf", [sender doubleValue], linearToLogarithmic([sender doubleValue])); @@ -295,7 +276,7 @@ [audioPlayer setVolume:originalVolume]; [volumeSlider setDoubleValue: logarithmicToLinear(originalVolume)]; [audioTimer invalidate]; - playbackStatus = kCogStatusPaused; + [self setPlaybackStatus: kCogStatusPaused]; } } @@ -319,7 +300,7 @@ { [volumeSlider setDoubleValue: logarithmicToLinear(originalVolume)]; [audioTimer invalidate]; - playbackStatus = kCogStatusPlaying; + [self setPlaybackStatus: kCogStatusPlaying]; } } @@ -355,7 +336,7 @@ [self pauseResume:self]; } - playbackStatus = kCogStatusFading; + [self setPlaybackStatus: kCogStatusFading]; } @@ -521,9 +502,6 @@ [self setPosition:0]; [self setSeekable:NO]; // the player stopped, disable the slider } - - //Show play image - [self changePlayButtonImage:@"play"]; } else if (status == kCogStatusPlaying) { @@ -531,9 +509,6 @@ positionTimer = [NSTimer timerWithTimeInterval:1.00 target:self selector:@selector(updatePosition:) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:positionTimer forMode:NSRunLoopCommonModes]; } - - //Show pause - [self changePlayButtonImage:@"pause"]; } if (status == kCogStatusStopped) { @@ -546,7 +521,7 @@ [self setSeekable:YES]; } - playbackStatus = status; + [self setPlaybackStatus:status]; } - (void)playlistDidChange:(PlaylistController *)p diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index e89c7b2ca..a70d8244e 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -28,6 +28,7 @@ 1738589B0E0D92DD00488CD4 /* SideBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 173858950E0D92DD00488CD4 /* SideBarController.m */; }; 1738589D0E0D92DD00488CD4 /* SideWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 173858990E0D92DD00488CD4 /* SideWindowController.m */; }; 173A43A10F3FD26500676A7B /* ToolTipWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 173A43A00F3FD26500676A7B /* ToolTipWindow.m */; }; + 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 */; }; 1766C6950B911DF1004A7AE4 /* AudioScrobblerClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 1766C6910B911DF1004A7AE4 /* AudioScrobblerClient.m */; }; @@ -537,6 +538,8 @@ 173858990E0D92DD00488CD4 /* SideWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SideWindowController.m; path = SideView/SideWindowController.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 = ""; }; + 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 = ""; }; 1755E1F70BA0D2B600CA3560 /* PlaylistLoader.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PlaylistLoader.m; sourceTree = ""; }; 1766C68E0B911DF1004A7AE4 /* AudioScrobbler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AudioScrobbler.h; sourceTree = ""; }; @@ -1133,6 +1136,8 @@ 17E0D5D20F520E75005B6FED /* Window */ = { isa = PBXGroup; children = ( + 1752C36A0F59E00100F85F28 /* PlaybackButtons.h */, + 1752C36B0F59E00100F85F28 /* PlaybackButtons.m */, 172A123A0F5912AE0078EF0C /* ShuffleTransformers.h */, 172A123B0F5912AE0078EF0C /* ShuffleTransformers.m */, 172A12310F5911D20078EF0C /* RepeatTransformers.h */, @@ -1848,6 +1853,7 @@ 172A12330F5911D20078EF0C /* RepeatTransformers.m in Sources */, 172A123C0F5912AE0078EF0C /* ShuffleTransformers.m in Sources */, 172A12A90F59AF8A0078EF0C /* NSString+CogSort.m in Sources */, + 1752C36C0F59E00100F85F28 /* PlaybackButtons.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 812e235ba..ce7e18538 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -8,9 +8,9 @@ 353.00 YES - + YES @@ -5046,22 +5046,6 @@ OQA 1597 - - - playbackButtons - - - - 1603 - - - - playbackButtonClick: - - - - 1604 - changeVolume: @@ -6784,14 +6768,6 @@ OQA 2388 - - - playbackButtonClick: - - - - 2389 - image: shuffle @@ -6876,6 +6852,22 @@ OQA 2400 + + + playbackController + + + + 2401 + + + + playbackController + + + + 2402 + @@ -9375,6 +9367,7 @@ OQA 1532.ImportedFromIB2 1533.IBPluginDependency 1533.ImportedFromIB2 + 1537.CustomClassName 1537.IBPluginDependency 1537.ImportedFromIB2 1538.IBPluginDependency @@ -9637,6 +9630,7 @@ OQA 2294.CustomClassName 2294.IBPluginDependency 2294.ImportedFromIB2 + 2295.CustomClassName 2295.IBPluginDependency 2295.ImportedFromIB2 2296.IBPluginDependency @@ -9994,6 +9988,7 @@ OQA com.apple.InterfaceBuilder.CocoaPlugin + PlaybackButtons com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -10256,6 +10251,7 @@ OQA TrackingCell com.apple.InterfaceBuilder.CocoaPlugin + PlaybackButtons com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -10451,7 +10447,7 @@ OQA - 2400 + 2402 @@ -10747,6 +10743,18 @@ OQA FileTree/PathWatcher.h + + PlaybackButtons + NSSegmentedControl + + playbackController + PlaybackController + + + IBProjectSource + Window/PlaybackButtons.h + + PlaybackController NSObject @@ -10763,14 +10771,12 @@ OQA pauseResume: play: playPauseResume: - playbackButtonClick: prev: resume: seek: skipToNextAlbum: skipToPreviousAlbum: stop: - toggleShowTimeRemaining: volumeDown: volumeUp: @@ -10793,8 +10799,6 @@ OQA id id id - id - id @@ -10802,7 +10806,6 @@ OQA YES outputDevices - playbackButtons playlistController playlistView volumeSlider @@ -10810,7 +10813,6 @@ OQA YES NSArrayController - NSSegmentedControl PlaylistController PlaylistView NSSlider diff --git a/Window/PlaybackButtons.h b/Window/PlaybackButtons.h new file mode 100644 index 000000000..92d60e866 --- /dev/null +++ b/Window/PlaybackButtons.h @@ -0,0 +1,20 @@ +// +// PlaybackButtons.h +// Cog +// +// Created by Vincent Spader on 2/28/09. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import + +@class PlaybackController; + +@interface PlaybackButtons : NSSegmentedControl { + IBOutlet PlaybackController *playbackController; +} + +- (void)startObserving; +- (void)stopObserving; + +@end diff --git a/Window/PlaybackButtons.m b/Window/PlaybackButtons.m new file mode 100644 index 000000000..e9ecfe258 --- /dev/null +++ b/Window/PlaybackButtons.m @@ -0,0 +1,89 @@ +// +// PlaybackButtons.m +// Cog +// +// Created by Vincent Spader on 2/28/09. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import "PlaybackButtons.h" +#import "PlaybackController.h" + +#import + +@implementation PlaybackButtons + +static NSString *PlaybackButtonsPlaybackStatusObservationContext = @"PlaybackButtonsPlaybackStatusObservationContext"; + +- (void)dealloc +{ + [self stopObserving]; + + [super dealloc]; +} + +- (void)awakeFromNib +{ + [self startObserving]; +} + +- (void)startObserving +{ + [playbackController addObserver:self forKeyPath:@"playbackStatus" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:PlaybackButtonsPlaybackStatusObservationContext]; +} + +- (void)stopObserving +{ + [playbackController removeObserver:self forKeyPath:@"playbackStatus"]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if ([PlaybackButtonsPlaybackStatusObservationContext isEqual:context]) + { + NSInteger playbackStatus = [[change objectForKey:NSKeyValueChangeNewKey] integerValue]; + + NSImage *image = nil; + + if (playbackStatus == kCogStatusPlaying || playbackStatus == kCogStatusFading) { + image = [NSImage imageNamed:@"pause"]; + } + else { + image = [NSImage imageNamed:@"play"]; + } + + [self setImage:image forSegment:1]; + } + else + { + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; + } +} + +- (BOOL)sendAction:(SEL)theAction to:(id)theTarget +{ + NSLog(@"Mouse down!"); + + int clickedSegment = [self selectedSegment]; + if (clickedSegment == 0) //Previous + { + [playbackController prev:self]; + } + else if (clickedSegment == 1) //Play + { + [playbackController playPauseResume:self]; + } + else if (clickedSegment == 2) //Next + { + [playbackController next:self]; + } + else { + return NO; + } + + return YES; + +} + + +@end