/Tools/NativeHost/MenuBridge.m

http://github.com/cacaodev/cappuccino · Objective C · 63 lines · 38 code · 18 blank · 7 comment · 5 complexity · 59488bd4a177407809de895f88eb2eac MD5 · raw file

  1. //
  2. // MenuBridge.m
  3. // NativeHost
  4. //
  5. // Created by Francisco Tolmasky on 9/2/09.
  6. // Copyright 2009 280 North, Inc.. All rights reserved.
  7. //
  8. #import "WebScripObject+Objective-J.h"
  9. #import "MenuItemBridge.h"
  10. #import "MenuBridge.h"
  11. @implementation MenuBridge
  12. + (id)menuBridgeWithMenuObject:(WebScriptObject *)aMenuObject
  13. {
  14. if (!aMenuObject)
  15. return nil;
  16. static NSMapTable * cache = nil;
  17. if (!cache)
  18. cache = [[NSMapTable mapTableWithStrongToStrongObjects] retain];
  19. MenuBridge * menuBridge = [cache objectForKey:aMenuObject];
  20. if (!menuBridge)
  21. {
  22. menuBridge = [MenuBridge alloc];
  23. [cache setObject:menuBridge forKey:aMenuObject];
  24. [[menuBridge initWithMenuObject:aMenuObject] autorelease];
  25. }
  26. return menuBridge;
  27. }
  28. - (id)initWithMenuObject:(WebScriptObject *)aMenuObject
  29. {
  30. self = [super initWithTitle:[aMenuObject bridgeSelector:@selector(title)]];
  31. if (self)
  32. {
  33. menuObject = aMenuObject;
  34. NSInteger index = 0,
  35. count = [[aMenuObject bridgeSelector:@selector(numberOfItems)] intValue];
  36. for (; index < count; ++index)
  37. [self addItem:[[[MenuItemBridge alloc] initWithMenuItemObject:[aMenuObject bridgeSelector:@selector(itemAtIndex:) withObject:[NSNumber numberWithInt:index]]] autorelease]];
  38. }
  39. return self;
  40. }
  41. - (void)performActionForItemAtIndex:(NSInteger)anIndex
  42. {
  43. [menuObject bridgeSelector:@selector(performActionForItemAtIndex:) withObject:[NSNumber numberWithInt:anIndex]];
  44. }
  45. @end