Read menu item's properties in menu's delegate.

This commit is contained in:
Cheng Zhao 2013-05-16 20:06:25 +08:00
parent 84e721188b
commit 4984f30e48
3 changed files with 16 additions and 10 deletions

View file

@ -126,11 +126,7 @@ string16 Menu::GetSublabelForCommandId(int command_id) const {
void Menu::ExecuteCommand(int command_id, int event_flags) {
v8::HandleScope scope;
v8::Handle<v8::Value> args[] = {
v8::String::New("execute"),
v8::Integer::New(command_id)
};
node::MakeCallback(handle(), "emit", 2, args);
CallDelegate(v8::False(), handle(), "executeCommand", command_id);
}
// static

View file

@ -13,6 +13,9 @@ Menu::popup = (window) ->
popup.call this, window
Menu::append = (item) ->
@insert @getItemCount(), item
Menu::insert = (pos, item) ->
throw new TypeError('Invalid item') unless item?.constructor is MenuItem
@ -25,12 +28,16 @@ Menu::insert = (pos, item) ->
@setSublabel pos, item.sublabel if item.sublabel?
@items = {} unless @items?
unless @items?
@items = {}
@delegate =
isCommandIdChecked: (commandId) => @items[commandId]?.checked
isCommandIdEnabled: (commandId) => @items[commandId]?.enabled
isCommandIdVisible: (commandId) => @items[commandId]?.visible
getAcceleratorForCommandId: (commandId) => @items[commandId]?.accelerator
executeCommand: (commandId) => @items[commandId]?.click()
@items[item.commandId] = item
Menu::append = (item) ->
@insert @getItemCount(), item
Menu.setApplicationMenu = (menu) ->
throw new TypeError('Invalid menu') unless menu?.constructor is Menu
bindings.setApplicationMenu menu

View file

@ -4,15 +4,18 @@ class MenuItem
@types = ['normal', 'separator', 'submenu', 'checkbox', 'radio']
constructor: (options) ->
{@type, @label, @sublabel, @click, @checked, @groupId, @submenu} = options
{click, @type, @label, @sublabel, @accelerator, @enabled, @visible, @checked, @groupId, @submenu} = options
@type = @type ? 'normal'
@label = @label ? ''
@sublabel = @sublabel ? ''
@enabled = @enabled ? true
@visible = @visible ? true
throw new Error('Unknown menu type') if MenuItem.types.indexOf(@type) is -1
throw new Error('Invalid menu') if @type is 'submenu' and @submenu?.constructor.name isnt 'Menu'
@commandId = ++nextCommandId
@click = -> click() if typeof click is 'function'
module.exports = MenuItem