Add 'selector' property for MenuItem, which automatically calls first reponder's selector.

This commit is contained in:
Cheng Zhao 2013-05-16 20:53:10 +08:00
parent fae3137463
commit c2f6676c62
2 changed files with 12 additions and 20 deletions

View file

@ -4,7 +4,7 @@ class MenuItem
@types = ['normal', 'separator', 'submenu', 'checkbox', 'radio'] @types = ['normal', 'separator', 'submenu', 'checkbox', 'radio']
constructor: (options) -> constructor: (options) ->
{click, @type, @label, @sublabel, @accelerator, @enabled, @visible, @checked, @groupId, @submenu} = options {click, selector, @type, @label, @sublabel, @accelerator, @enabled, @visible, @checked, @groupId, @submenu} = options
@type = @type ? 'normal' @type = @type ? 'normal'
@label = @label ? '' @label = @label ? ''
@ -16,6 +16,10 @@ class MenuItem
throw new Error('Invalid menu') if @type is 'submenu' and @submenu?.constructor.name isnt 'Menu' throw new Error('Invalid menu') if @type is 'submenu' and @submenu?.constructor.name isnt 'Menu'
@commandId = ++nextCommandId @commandId = ++nextCommandId
@click = -> click() if typeof click is 'function' @click = ->
if typeof click is 'function'
click()
else if typeof selector is 'string'
require('menu').sendActionToFirstResponder selector
module.exports = MenuItem module.exports = MenuItem

View file

@ -33,24 +33,18 @@ delegate.browserMainParts.preMainMessageLoopRun = function() {
var appleMenu = new Menu; var appleMenu = new Menu;
appleMenu.append(new MenuItem({ appleMenu.append(new MenuItem({
label: 'About Atom Shell', label: 'About Atom Shell',
click: function() { selector: 'orderFrontStandardAboutPanel:'
Menu.sendActionToFirstResponder('orderFrontStandardAboutPanel:');
}
})); }));
appleMenu.append(new MenuItem({ type: 'separator' })); appleMenu.append(new MenuItem({ type: 'separator' }));
appleMenu.append(new MenuItem({ appleMenu.append(new MenuItem({
label: 'Hide Atom Shell', label: 'Hide Atom Shell',
accelerator: 'Command+H', accelerator: 'Command+H',
click: function() { selector: 'hide:'
Menu.sendActionToFirstResponder('hide:');
}
})); }));
appleMenu.append(new MenuItem({ appleMenu.append(new MenuItem({
label: 'Hide Others', label: 'Hide Others',
accelerator: 'Command+Shift+H', accelerator: 'Command+Shift+H',
click: function() { selector: 'hideOtherApplications:'
Menu.sendActionToFirstResponder('hideOtherApplications:');
}
})); }));
appleMenu.append(new MenuItem({ type: 'separator' })); appleMenu.append(new MenuItem({ type: 'separator' }));
appleMenu.append(new MenuItem({ appleMenu.append(new MenuItem({
@ -65,23 +59,17 @@ delegate.browserMainParts.preMainMessageLoopRun = function() {
windowMenu.append(new MenuItem({ windowMenu.append(new MenuItem({
label: 'Minimize', label: 'Minimize',
accelerator: 'Command+M', accelerator: 'Command+M',
click: function() { selector: 'performMiniaturize:'
Menu.sendActionToFirstResponder('performMiniaturize:');
}
})); }));
windowMenu.append(new MenuItem({ windowMenu.append(new MenuItem({
label: 'Close', label: 'Close',
accelerator: 'Command+W', accelerator: 'Command+W',
click: function() { selector: 'performClose:'
Menu.sendActionToFirstResponder('performClose:');
}
})); }));
windowMenu.append(new MenuItem({ type: 'separator' })); windowMenu.append(new MenuItem({ type: 'separator' }));
windowMenu.append(new MenuItem({ windowMenu.append(new MenuItem({
label: 'Bring All to Front', label: 'Bring All to Front',
click: function() { selector: 'arrangeInFront:'
Menu.sendActionToFirstResponder('arrangeInFront:');
}
})); }));
menu.append(new MenuItem({ type: 'submenu', submenu: appleMenu })); menu.append(new MenuItem({ type: 'submenu', submenu: appleMenu }));