diff --git a/AppController.h b/AppController.h index 50a01b6c8..8a7ffc397 100644 --- a/AppController.h +++ b/AppController.h @@ -10,6 +10,7 @@ #import "NDHotKeyEvent.h" +#import "AppleRemote.h" @interface AppController : NSObject { @@ -45,6 +46,9 @@ NDHotKeyEvent *playHotKey; NDHotKeyEvent *prevHotKey; NDHotKeyEvent *nextHotKey; + + AppleRemote *remote; + BOOL remoteButtonHeld; /* true as long as the user holds the left,right,plus or minus on the remote control */ } - (IBAction)openFiles:(id)sender; diff --git a/AppController.m b/AppController.m index 0162bbc53..c20259a49 100644 --- a/AppController.m +++ b/AppController.m @@ -14,11 +14,99 @@ * table and outline views. */ [[KFTypeSelectTableView class] poseAsClass:[NSTableView class]]; + + remote = [[AppleRemote alloc] init]; + [remote setDelegate: self]; } return self; } +// Listen to the remote in exclusive mode, only when Cog is the active application +- (void)applicationDidBecomeActive:(NSNotification *)notification +{ + [remote startListening: self]; +} +- (void)applicationDidResignActive:(NSNotification *)motification +{ + [remote stopListening: self]; +} + +/* Helper method for the remote control interface in order to trigger forward/backward and volume +increase/decrease as long as the user holds the left/right, plus/minus button */ +- (void) executeHoldActionForRemoteButton: (NSNumber*) buttonIdentifierNumber +{ + if (remoteButtonHeld) + { + switch([buttonIdentifierNumber intValue]) + { + case kRemoteButtonRight_Hold: + //Seek forward? + break; + case kRemoteButtonLeft_Hold: + //Seek back + break; + case kRemoteButtonVolume_Plus_Hold: + //Volume Up + break; + case kRemoteButtonVolume_Minus_Hold: + //Volume Down + break; + } + if (remoteButtonHeld) + { + /* trigger event */ + [self performSelector:@selector(executeHoldActionForRemoteButton:) + withObject:buttonIdentifierNumber + afterDelay:0.25]; + } + } +} + +/* Apple Remote callback */ +- (void) appleRemoteButton: (AppleRemoteEventIdentifier)buttonIdentifier + pressedDown: (BOOL) pressedDown + clickCount: (unsigned int) count +{ + switch( buttonIdentifier ) + { + case kRemoteButtonPlay: + [self clickPlay: self]; + + break; + case kRemoteButtonVolume_Plus: + break; + case kRemoteButtonVolume_Minus: + break; + case kRemoteButtonRight: + [self clickNext: self]; + break; + case kRemoteButtonLeft: + [self clickPrev: self]; + break; + case kRemoteButtonRight_Hold: + case kRemoteButtonLeft_Hold: + case kRemoteButtonVolume_Plus_Hold: + case kRemoteButtonVolume_Minus_Hold: + /* simulate an event as long as the user holds the button */ + remoteButtonHeld = pressedDown; + if( pressedDown ) + { + NSNumber* buttonIdentifierNumber = [NSNumber numberWithInt: buttonIdentifier]; + [self performSelector:@selector(executeHoldActionForRemoteButton:) + withObject:buttonIdentifierNumber]; + } + break; + case kRemoteButtonMenu: + break; + default: + /* Add here whatever you want other buttons to do */ + break; + } +} + + + - (IBAction)openFiles:(id)sender { NSOpenPanel *p; diff --git a/Cog.xcodeproj/project.pbxproj b/Cog.xcodeproj/project.pbxproj index d96de0252..b1db19b63 100644 --- a/Cog.xcodeproj/project.pbxproj +++ b/Cog.xcodeproj/project.pbxproj @@ -29,6 +29,8 @@ 8E4CAB5B0A32251B00214C1D /* ShnFile.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8E4CAB5A0A32251B00214C1D /* ShnFile.mm */; }; 8E4E7C1A0AA1ED4500D11405 /* file_blue.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E4E7C180AA1ED4500D11405 /* file_blue.png */; }; 8E4E7C1B0AA1ED4500D11405 /* file_gray.png in Resources */ = {isa = PBXBuildFile; fileRef = 8E4E7C190AA1ED4500D11405 /* file_gray.png */; }; + 8E513F410B890FB90012904D /* AppleRemote.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E513F3F0B890FB90012904D /* AppleRemote.h */; }; + 8E513F420B890FB90012904D /* AppleRemote.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E513F400B890FB90012904D /* AppleRemote.m */; }; 8E53E8610A44C11B007E5BCE /* ID3Tag.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */; }; 8E53E8690A44C121007E5BCE /* ID3Tag.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */; }; 8E57824B0B88B7AC00C97376 /* KFTypeSelectTableView.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8E5782490B88B7AC00C97376 /* KFTypeSelectTableView.h */; }; @@ -195,6 +197,7 @@ 8E76ED760B877C0700494D51 /* AMRemovableColumnsTableView.h in CopyFiles */, 8E76ED780B877C0700494D51 /* AMRemovableTableColumn.h in CopyFiles */, 8E57824B0B88B7AC00C97376 /* KFTypeSelectTableView.h in CopyFiles */, + 8E513F410B890FB90012904D /* AppleRemote.h in CopyFiles */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -229,6 +232,8 @@ 8E4CAB5A0A32251B00214C1D /* ShnFile.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = ShnFile.mm; sourceTree = ""; }; 8E4E7C180AA1ED4500D11405 /* file_blue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_blue.png; sourceTree = ""; }; 8E4E7C190AA1ED4500D11405 /* file_gray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = file_gray.png; sourceTree = ""; }; + 8E513F3F0B890FB90012904D /* AppleRemote.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AppleRemote.h; sourceTree = ""; }; + 8E513F400B890FB90012904D /* AppleRemote.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = AppleRemote.m; sourceTree = ""; }; 8E53E8600A44C11B007E5BCE /* ID3Tag.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ID3Tag.framework; path = Libraries/ID3Tag/build/Release/ID3Tag.framework; sourceTree = ""; }; 8E5782490B88B7AC00C97376 /* KFTypeSelectTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = KFTypeSelectTableView.h; sourceTree = ""; }; 8E57824A0B88B7AC00C97376 /* KFTypeSelectTableView.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 30; path = KFTypeSelectTableView.m; sourceTree = ""; }; @@ -658,6 +663,8 @@ 8E75756209F31D5A0080F1EE /* Utils */ = { isa = PBXGroup; children = ( + 8E513F3F0B890FB90012904D /* AppleRemote.h */, + 8E513F400B890FB90012904D /* AppleRemote.m */, 8E6A8E350A0D8AD8002ABE9C /* CoreAudioUtils.h */, 8E6A8E360A0D8AD8002ABE9C /* CoreAudioUtils.m */, 8E75756309F31D5A0080F1EE /* DBLog.h */, @@ -910,6 +917,7 @@ 8E76ED770B877C0700494D51 /* AMRemovableColumnsTableView.m in Sources */, 8E76ED790B877C0700494D51 /* AMRemovableTableColumn.m in Sources */, 8E57824C0B88B7AC00C97376 /* KFTypeSelectTableView.m in Sources */, + 8E513F420B890FB90012904D /* AppleRemote.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };