summaryrefslogtreecommitdiff
path: root/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-06-29 12:00:16 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-06-29 12:00:16 -0700
commitdf00d3b046ee7b88eaf068b802411814ac97dfd2 (patch)
tree957fbaa9bdd3abde2a75e2f8d05c04359576bd5b /ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m
parent19735e70505a5f40fedede0b05764f5b1a1ef383 (diff)
downloadinfinitytier-df00d3b046ee7b88eaf068b802411814ac97dfd2.tar.gz
infinitytier-df00d3b046ee7b88eaf068b802411814ac97dfd2.zip
Going to have to continue to use the old MAC web-container-based UI on Macs prior to 10.10 even when the new UI comes out, and the new UI is not ready yet anyway, so resurrect this.
Diffstat (limited to 'ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m')
-rw-r--r--ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m97
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m
new file mode 100644
index 00000000..9f4a44db
--- /dev/null
+++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m
@@ -0,0 +1,97 @@
+#import "Sound.h"
+
+
+@interface PlayDelegate : CallbackDelegate <NSSoundDelegate> {
+}
+
+@property (nonatomic, weak) Sound *sound;
+
+- (id) initWithContext:(JSContextRef)aContext
+ forCallback:(WebScriptObject*)aCallback
+ withSound:(Sound*)aSound;
+@end
+
+@implementation PlayDelegate
+
+@synthesize sound;
+
+- (id) initWithContext:(JSContextRef)aContext
+ forCallback:(WebScriptObject*)aCallback
+ withSound:(Sound*)aSound
+{
+ self = [super initWithContext:aContext forCallback:aCallback];
+ if (!self)
+ return nil;
+ sound = aSound;
+ return self;
+}
+
+- (void)sound:(NSSound *)aSound didFinishPlaying:(BOOL)finishedPlaying {
+ [self callWithParams:[aSound name], nil];
+ [sound.pending removeObject:self];
+}
+
+@end
+
+@implementation Sound
+
+@synthesize pending;
+
+- (id) initWithContext:(JSContextRef)aContext {
+ self = [super initWithContext:aContext];
+ if (!self) {
+ return nil;
+ }
+
+ pending = [NSMutableSet new];
+ return self;
+}
+
+- (void) playSound:(NSSound*)sound onComplete:(WebScriptObject*)callback {
+ if (callback != (id)[WebUndefined undefined]) {
+ PlayDelegate *d = [[PlayDelegate alloc] initWithContext:context
+ forCallback:callback
+ withSound:self];
+ [pending addObject:d];
+ [sound setDelegate:d];
+ }
+ [sound play];
+}
+
+- (void) play:(NSString*)file onComplete:(WebScriptObject*)callback {
+ NSURL* fileUrl = [NSURL fileURLWithPath:[[Utils sharedInstance] pathForResource:file]];
+ DebugNSLog(@"Sound file:%@", [fileUrl description]);
+
+ NSSound* sound = [[NSSound alloc] initWithContentsOfURL:fileUrl byReference:YES];
+ [self playSound:sound onComplete:callback];
+}
+
+- (void) playSystem:(NSString*)name onComplete:(WebScriptObject*)callback {
+ NSSound *systemSound = [NSSound soundNamed:name];
+ [self playSound:systemSound onComplete:callback];
+}
+
+#pragma mark WebScripting Protocol
+
++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector {
+ return [self webScriptNameForSelector:selector] == nil;
+}
+
++ (BOOL) isKeyExcludedFromWebScript:(const char*)name {
+ return YES;
+}
+
++ (NSString*) webScriptNameForSelector:(SEL)selector {
+ id result = nil;
+
+ if (selector == @selector(play:onComplete:)) {
+ result = @"play";
+ }
+ else if (selector == @selector(playSystem:onComplete:)) {
+ result = @"playSystem";
+ }
+
+ return result;
+}
+
+@end