Add partial implementation Native.addMenuItem.

It takes a path like "Menu 1 > Menu 2 > Item", and builds a series of submenus if needed along that path, then adds the final item at its terminus. Specs still need to be fleshed out further.
This commit is contained in:
Nathan Sobo 2011-12-23 16:45:04 -06:00
parent 68ce5544a7
commit 00bccdca96
2 changed files with 43 additions and 0 deletions

View File

@ -0,0 +1,21 @@
Native = require 'native'
describe "Native", ->
nativeModule = null
beforeEach ->
nativeModule = new Native
fdescribe "addMenuItem(path, keyBinding)", ->
mainMenuItems = null
beforeEach ->
mainMenuItems = OSX.NSApp.mainMenu.itemArray
it "adds the item at the path terminus to the main menu, adding submenus as needed", ->
initialMenuCount = mainMenuItems.length
nativeModule.addMenuItem('Submenu > Item')
expect(mainMenuItems.length).toBe initialMenuCount + 1

View File

@ -1,3 +1,5 @@
_ = require 'underscore'
module.exports =
class Native
alert: (message, detailedMessage, buttons) ->
@ -43,3 +45,23 @@ class Native
resetMainMenu: (menu) ->
OSX.NSApp.resetMainMenu
addMenuItem: (path) ->
pathComponents = path.split /\s*>\s*/
submenu = @buildSubmenuPath(OSX.NSApp.mainMenu, pathComponents[0..-2])
title = _.last(pathComponents)
item = OSX.AtomMenuItem.alloc.initWithTitle_action_keyEquivalent(title, null, "").autorelease
submenu.addItem(item)
buildSubmenuPath: (menu, path) ->
return menu if path.length == 0
first = path[0]
unless item = menu.itemWithTitle(first)
item = OSX.AtomMenuItem.alloc.initWithTitle_action_keyEquivalent(first, null, "").autorelease
menu.addItem(item)
unless submenu = item.submenu
submenu = OSX.NSMenu.alloc.initWithTitle(first)
item.submenu = submenu
@buildSubmenuPath(submenu, path[1..-1])