mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 13:07:02 +00:00
78 lines
2.6 KiB
Objective-C
78 lines
2.6 KiB
Objective-C
//
|
|
// ReflectMenuItem.m
|
|
// NativeHost
|
|
//
|
|
// Created by Francisco Tolmasky on 9/2/09.
|
|
// Copyright 2009 280 North, Inc.. All rights reserved.
|
|
//
|
|
|
|
#import "WebScripObject+Objective-J.h"
|
|
#import "MenuBridge.h"
|
|
#import "MenuItemBridge.h"
|
|
|
|
|
|
@implementation MenuItemBridge
|
|
|
|
+ (id)menuItemBridgeWithMenuItemObject:(WebScriptObject *)aMenuItemObject
|
|
{
|
|
if (!aMenuItemObject)
|
|
return nil;
|
|
|
|
static NSMapTable * cache = nil;
|
|
|
|
if (!cache)
|
|
cache = [[NSMapTable mapTableWithStrongToStrongObjects] retain];
|
|
|
|
MenuItemBridge * menuItemBridge = [cache objectForKey:aMenuItemObject];
|
|
|
|
if (!menuItemBridge)
|
|
{
|
|
menuItemBridge = [MenuBridge alloc];
|
|
|
|
[cache setObject:menuItemBridge forKey:aMenuItemObject];
|
|
|
|
[[menuItemBridge initWithMenuItemObject:aMenuItemObject] autorelease];
|
|
}
|
|
|
|
return menuItemBridge;
|
|
}
|
|
|
|
- (id)initWithMenuItemObject:(WebScriptObject *)aMenuItemObject
|
|
{
|
|
if ([[aMenuItemObject bridgeSelector:@selector(isSeparatorItem)] boolValue])
|
|
return [[NSMenuItem separatorItem] retain];
|
|
|
|
self = [super init];
|
|
|
|
if (self)
|
|
{
|
|
menuItemObject = aMenuItemObject;
|
|
|
|
[self updateFromMenuItemObject];
|
|
}
|
|
|
|
return self;
|
|
}
|
|
/*
|
|
- (BOOL)isSeparatorItem
|
|
{
|
|
return [[menuItemObject bridgeSelector:@selector(isSeparatorItem)] boolValue];
|
|
}
|
|
*/
|
|
- (void)updateFromMenuItemObject
|
|
{
|
|
[self setTitle:[menuItemObject bridgeSelector:@selector(title)]];
|
|
[self setSubmenu:[MenuBridge menuBridgeWithMenuObject:[menuItemObject bridgeSelector:@selector(submenu)]]];
|
|
[self setKeyEquivalent:[menuItemObject bridgeSelector:@selector(keyEquivalent)]];
|
|
[self setKeyEquivalentModifierMask:[[menuItemObject evaluateObjectiveJ:[NSString stringWithFormat:@"(function() { var mask = %u; return (((mask & CPAlphaShiftKeyMask) ? %u : 0) | ((mask & CPShiftKeyMask) ? %u : 0) | ((mask & CPControlKeyMask) ? %u : 0) | ((mask & CPAlternateKeyMask) ? %u : 0) | ((mask & CPCommandKeyMask) ? %u : 0) | ((mask & CPNumericPadKeyMask) ? %u : 0) | ((mask & CPHelpKeyMask) ? %u : 0) | ((mask & CPFunctionKeyMask) ? %u : 0)) }())", [[menuItemObject bridgeSelector:@selector(keyEquivalentModifierMask)] unsignedIntegerValue], NSAlphaShiftKeyMask, NSShiftKeyMask, NSControlKeyMask, NSAlternateKeyMask, NSCommandKeyMask, NSNumericPadKeyMask, NSHelpKeyMask, NSFunctionKeyMask, NSDeviceIndependentModifierFlagsMask]] unsignedIntegerValue]];[self setAction:@selector(bridgeAction:)];
|
|
[self setTarget:self];
|
|
[self setAction:@selector(bridgeAction:)];
|
|
}
|
|
|
|
// This exists so that the menu items are enabled.
|
|
- (void)bridgeAction:(id)aSender
|
|
{
|
|
}
|
|
|
|
@end
|