123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- //
- // 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
|