summaryrefslogtreecommitdiff
path: root/ext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m')
-rwxr-xr-xext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m150
1 files changed, 150 insertions, 0 deletions
diff --git a/ext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m b/ext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m
new file mode 100755
index 00000000..7b9702cc
--- /dev/null
+++ b/ext/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m
@@ -0,0 +1,150 @@
+//
+// MenuItemProxy.m
+// MacGap
+//
+// Created by Joe Hildebrand on 1/15/12.
+// Copyright (c) 2012 Twitter. All rights reserved.
+//
+
+#import "MenuItemProxy.h"
+#import "MenuProxy.h"
+
+@implementation MenuItemProxy
+
+- (id) initWithContext:(JSContextRef)aContext andMenuItem:(NSMenuItem*)anItem
+{
+ NSAssert(anItem, @"anItem required");
+ self = [super initWithContext:aContext];
+ if (!self)
+ return nil;
+ item = anItem;
+ item.representedObject = self;
+
+ return self;
+}
+
++ (MenuItemProxy*) proxyWithContext:(JSContextRef)aContext andMenuItem:(NSMenuItem*)anItem
+{
+ MenuItemProxy *proxy = [anItem representedObject];
+ if (proxy)
+ {
+ NSLog(@"MIP Cache hit");
+ NSAssert([proxy class] == [MenuItemProxy class], @"Bad proxy");
+ return proxy;
+ }
+ return [[MenuItemProxy alloc] initWithContext:aContext andMenuItem:anItem];
+}
+
+- (NSString*) description
+{
+ return [item description];
+}
+
+- (MenuProxy*)addSubmenu
+{
+ NSMenu *s = [item submenu];
+ if (!s)
+ {
+ s = [[NSMenu alloc] initWithTitle:@"FFFFFFOOOOO"];
+ [item setSubmenu:s];
+ }
+ return [MenuProxy proxyWithContext:context andMenu:s];
+}
+
+- (void) remove
+{
+ NSMenu *menu = [item menu];
+ [menu removeItem:item];
+}
+
+- (void)callCallback:(id)sender
+{
+ [callback callWithParams:[sender title], nil];
+}
+
+- (void) setCallback:(WebScriptObject*)aCallback
+{
+ NSAssert(item, @"item required");
+ callback = [[CallbackDelegate alloc] initWithContext:context forCallback:aCallback];
+ [item setAction:@selector(callCallback:)];
+ [item setTarget:self];
+}
+
+- (void)setKey:(NSString*)keyCommand
+{
+ NSString *aKey = [MenuProxy getKeyFromString:keyCommand];
+ [item setKeyEquivalent:aKey];
+
+ NSUInteger modifiers = [MenuProxy getModifiersFromString:keyCommand];
+ [item setKeyEquivalentModifierMask:modifiers];
+}
+
+- (void) setTitle:(NSString*)title
+{
+ [item setTitle:title];
+}
+
+- (MenuProxy*)submenu;
+{
+ // TODO: make this work as a property
+ NSMenu *s = [item submenu];
+ if (!s)
+ return nil;
+ return [MenuProxy proxyWithContext:context andMenu:s];
+}
+
+- (void) enable
+{
+ [item setEnabled:YES];
+}
+
+- (void) disable
+{
+ [item setEnabled:NO];
+}
+
+#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(addSubmenu)) {
+ result = @"addSubmenu";
+ }
+ else if (selector == @selector(remove)) {
+ result = @"remove";
+ }
+ else if (selector == @selector(setCallback:)) {
+ result = @"setCallback";
+ }
+ else if (selector == @selector(setKey:)) {
+ result = @"setKey";
+ }
+ else if (selector == @selector(setTitle:)) {
+ result = @"setTitle";
+ }
+ else if (selector == @selector(submenu)) {
+ result = @"submenu";
+ }
+ else if (selector == @selector(enable)) {
+ result = @"enable";
+ }
+ else if (selector == @selector(disable)) {
+ result = @"disable";
+ }
+
+ return result;
+}
+
+@end