From b09094ea9e7946cdf236aa5fa4c0d6833e47de24 Mon Sep 17 00:00:00 2001 From: SteVen Batten <6561887+sbatten@users.noreply.github.com> Date: Thu, 28 Jun 2018 02:16:41 -0700 Subject: [PATCH] menu knows best (#53214) --- src/vs/base/browser/ui/menu/menu.ts | 38 +++++++++---------- .../contextview/browser/contextMenuHandler.ts | 3 +- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts index 5ea5820cce4..6d979808418 100644 --- a/src/vs/base/browser/ui/menu/menu.ts +++ b/src/vs/base/browser/ui/menu/menu.ts @@ -53,27 +53,9 @@ export class Menu { parent: this }; - const getActionItem = (action: IAction) => { - if (action instanceof Separator) { - return new ActionItem(options.context, action, { icon: true }); - } else if (action instanceof SubmenuAction) { - return new SubmenuActionItem(action, action.entries, parentData, options); - } else { - const menuItemOptions: IActionItemOptions = {}; - if (options.getKeyBinding) { - const keybinding = options.getKeyBinding(action); - if (keybinding) { - menuItemOptions.keybinding = keybinding.getLabel(); - } - } - - return new MenuActionItem(options.context, action, menuItemOptions); - } - }; - this.actionBar = new ActionBar(menuContainer, { orientation: ActionsOrientation.VERTICAL, - actionItemProvider: options.actionItemProvider ? options.actionItemProvider : getActionItem, + actionItemProvider: action => this.doGetActionItem(action, options, parentData), context: options.context, actionRunner: options.actionRunner, isMenu: true, @@ -83,6 +65,24 @@ export class Menu { this.actionBar.push(actions, { icon: true, label: true, isMenu: true }); } + private doGetActionItem(action: IAction, options: IMenuOptions, parentData: ISubMenuData): ActionItem { + if (action instanceof Separator) { + return new ActionItem(options.context, action, { icon: true }); + } else if (action instanceof SubmenuAction) { + return new SubmenuActionItem(action, action.entries, parentData, options); + } else { + const menuItemOptions: IActionItemOptions = {}; + if (options.getKeyBinding) { + const keybinding = options.getKeyBinding(action); + if (keybinding) { + menuItemOptions.keybinding = keybinding.getLabel(); + } + } + + return new MenuActionItem(options.context, action, menuItemOptions); + } + } + public get onDidCancel(): Event { return this.actionBar.onDidCancel; } diff --git a/src/vs/platform/contextview/browser/contextMenuHandler.ts b/src/vs/platform/contextview/browser/contextMenuHandler.ts index 04db866a8e8..f0b8c1270c8 100644 --- a/src/vs/platform/contextview/browser/contextMenuHandler.ts +++ b/src/vs/platform/contextview/browser/contextMenuHandler.ts @@ -105,7 +105,8 @@ export class ContextMenuHandler { let menu = new Menu(container, actions, { actionItemProvider: delegate.getActionItem, context: delegate.getActionsContext ? delegate.getActionsContext() : null, - actionRunner: this.actionRunner + actionRunner: this.actionRunner, + getKeyBinding: delegate.getKeyBinding }); let listener1 = menu.onDidCancel(() => {