adopt menu and menuitem

This commit is contained in:
Benjamin Pasero
2016-01-06 16:09:04 +01:00
parent 6027927d77
commit 0693d7cb30
4 changed files with 37 additions and 42 deletions

View File

@@ -32,7 +32,7 @@ var baseModules = [
'applicationinsights', 'assert',
'child_process', 'chokidar', 'crypto', 'emmet',
'events', 'fs', 'getmac', 'glob', 'graceful-fs', 'http', 'http-proxy-agent',
'https', 'https-proxy-agent', 'iconv-lite', 'electron', 'menu', 'menu-item', 'net',
'https', 'https-proxy-agent', 'iconv-lite', 'electron', 'net',
'os', 'path', 'readline', 'remote', 'sax', 'semver',
'stream', 'string_decoder', 'url', 'vscode-textmate', 'winreg',
'yauzl', 'native-keymap'

View File

@@ -890,7 +890,7 @@ declare module Electron {
* Should be specified for submenu type menu item, when it's specified the
* type: 'submenu' can be omitted for the menu item
*/
submenu?: MenuItemOptions[];
submenu?: Menu;
/**
* Unique within a single menu. If defined then it can be used as a reference
* to this item by the position attribute.

View File

@@ -6,9 +6,7 @@
'use strict';
import Menu = require('menu');
import MenuItem = require('menu-item');
import {ipcMain as ipc, app, shell, dialog} from 'electron';
import {ipcMain as ipc, app, shell, dialog, Menu, MenuItem} from 'electron';
import nls = require('vs/nls');
import platform = require('vs/base/common/platform');
@@ -151,7 +149,7 @@ export class VSCodeMenu {
let menubar = new Menu();
// Mac: Application
let macApplicationMenuItem: MenuItem;
let macApplicationMenuItem: Electron.MenuItem;
if (platform.isMacintosh) {
let applicationMenu = new Menu();
macApplicationMenuItem = new MenuItem({ label: env.product.nameShort, submenu: applicationMenu });
@@ -179,7 +177,7 @@ export class VSCodeMenu {
this.setGotoMenu(gotoMenu);
// Mac: Window
let macWindowMenuItem: MenuItem;
let macWindowMenuItem: Electron.MenuItem;
if (platform.isMacintosh) {
let windowMenu = new Menu();
macWindowMenuItem = new MenuItem({ label: mnemonicLabel(nls.localize('mWindow', "Window")), submenu: windowMenu, role: 'window' });
@@ -273,7 +271,7 @@ export class VSCodeMenu {
return mru;
}
private setMacApplicationMenu(macApplicationMenu: Menu): void {
private setMacApplicationMenu(macApplicationMenu: Electron.Menu): void {
let about = new MenuItem({ label: nls.localize('mAbout', "About {0}", env.product.nameLong), role: 'about' });
let checkForUpdates = this.getUpdateMenuItems();
let preferences = this.getPreferencesMenu();
@@ -298,10 +296,10 @@ export class VSCodeMenu {
actions.forEach(i => macApplicationMenu.append(i));
}
private setFileMenu(fileMenu: Menu): void {
private setFileMenu(fileMenu: Electron.Menu): void {
let hasNoWindows = (windows.manager.getWindowCount() === 0);
let newFile:MenuItem;
let newFile: Electron.MenuItem;
if (hasNoWindows) {
newFile = new MenuItem({ label: mnemonicLabel(nls.localize('miNewFile', "&&New File")), accelerator: this.getAccelerator('workbench.action.files.newUntitledFile'), click: () => windows.manager.openNewWindow() });
} else {
@@ -355,7 +353,7 @@ export class VSCodeMenu {
]).forEach((item) => fileMenu.append(item));
}
private getPreferencesMenu(): MenuItem {
private getPreferencesMenu(): Electron.MenuItem {
let userSettings = this.createMenuItem(nls.localize('miOpenSettings', "&&User Settings"), 'workbench.action.openGlobalSettings');
let workspaceSettings = this.createMenuItem(nls.localize('miOpenWorkspaceSettings', "&&Workspace Settings"), 'workbench.action.openWorkspaceSettings');
let kebindingSettings = this.createMenuItem(nls.localize('miOpenKeymap', "&&Keyboard Shortcuts"), 'workbench.action.openGlobalKeybindings');
@@ -393,7 +391,7 @@ export class VSCodeMenu {
}
}
private setOpenRecentMenu(openRecentMenu: Menu): void {
private setOpenRecentMenu(openRecentMenu: Electron.Menu): void {
let recentList = this.getOpenedPathsList();
// Folders
@@ -422,7 +420,7 @@ export class VSCodeMenu {
}
}
private createOpenRecentMenuItem(path:string): MenuItem {
private createOpenRecentMenuItem(path:string): Electron.MenuItem {
return new MenuItem({ label: path, click: () => {
let success = windows.manager.open({ cli: env.cliArgs, pathsToOpen: [path] });
if (!success) {
@@ -432,8 +430,8 @@ export class VSCodeMenu {
}});
}
private createRoleMenuItem(label:string, actionId:string, role:string): MenuItem {
let options:IMenuItemConfig = {
private createRoleMenuItem(label:string, actionId:string, role:string): Electron.MenuItem {
let options:Electron.MenuItemOptions = {
label: mnemonicLabel(label),
accelerator: this.getAccelerator(actionId),
role: role,
@@ -443,13 +441,13 @@ export class VSCodeMenu {
return new MenuItem(options);
}
private setEditMenu(winLinuxEditMenu: Menu): void {
let undo:MenuItem;
let redo:MenuItem;
let cut:MenuItem;
let copy:MenuItem;
let paste:MenuItem;
let selectAll:MenuItem;
private setEditMenu(winLinuxEditMenu: Electron.Menu): void {
let undo: Electron.MenuItem;
let redo: Electron.MenuItem;
let cut: Electron.MenuItem;
let copy: Electron.MenuItem;
let paste: Electron.MenuItem;
let selectAll: Electron.MenuItem;
if (platform.isMacintosh) {
undo = this.createDevToolsAwareMenuItem(nls.localize('miUndo', "&&Undo"), 'undo', (devTools) => devTools.undo());
@@ -487,7 +485,7 @@ export class VSCodeMenu {
].forEach((item) => winLinuxEditMenu.append(item));
}
private setViewMenu(viewMenu: Menu): void {
private setViewMenu(viewMenu: Electron.Menu): void {
let commands = this.createMenuItem(nls.localize('miCommandPalette', "&&Command Palette..."), 'workbench.action.showCommands');
let markers = this.createMenuItem(nls.localize('miMarker', "&&Errors and Warnings..."), 'workbench.action.showErrorsWarnings');
let output = this.createMenuItem(nls.localize('miToggleOutput', "Toggle &&Output"), 'workbench.action.output.toggleOutput');
@@ -517,7 +515,7 @@ export class VSCodeMenu {
]).forEach((item) => viewMenu.append(item));
}
private setGotoMenu(gotoMenu: Menu): void {
private setGotoMenu(gotoMenu: Electron.Menu): void {
let back = this.createMenuItem(nls.localize('miBack', "&&Back"), 'workbench.action.navigateBack');
let forward = this.createMenuItem(nls.localize('miForward', "&&Forward"), 'workbench.action.navigateForward');
let navigateHistory = this.createMenuItem(nls.localize('miNavigateHistory', "&&Navigate History"), 'workbench.action.openPreviousEditor');
@@ -539,7 +537,7 @@ export class VSCodeMenu {
].forEach((item) => gotoMenu.append(item));
}
private setMacWindowMenu(macWindowMenu: Menu): void {
private setMacWindowMenu(macWindowMenu: Electron.Menu): void {
let minimize = new MenuItem({ label: nls.localize('mMinimize', "Minimize"), role: 'minimize', accelerator: 'Command+M', enabled: windows.manager.getWindowCount() > 0 });
let close = new MenuItem({ label: nls.localize('mClose', "Close"), role: 'close', accelerator: 'Command+W', enabled: windows.manager.getWindowCount() > 0 });
let bringAllToFront = new MenuItem({ label: nls.localize('mBringToFront', "Bring All to Front"), role: 'front', enabled: windows.manager.getWindowCount() > 0 });
@@ -552,7 +550,7 @@ export class VSCodeMenu {
].forEach((item) => macWindowMenu.append(item));
}
private setHelpMenu(helpMenu: Menu): void {
private setHelpMenu(helpMenu: Electron.Menu): void {
let toggleDevToolsItem = new MenuItem({
label: mnemonicLabel(nls.localize('miToggleDevTools', "&&Toggle Developer Tools")),
accelerator: this.getAccelerator('workbench.action.toggleDevTools'),
@@ -587,7 +585,7 @@ export class VSCodeMenu {
}
}
private getUpdateMenuItems(): MenuItem[]{
private getUpdateMenuItems(): Electron.MenuItem[]{
switch (UpdateManager.state) {
case um.State.Uninitialized:
return [];
@@ -623,9 +621,9 @@ export class VSCodeMenu {
}
}
private createMenuItem(label:string, actionId: string, enabled?:boolean): MenuItem;
private createMenuItem(label:string, click:() => void, enabled?:boolean): MenuItem;
private createMenuItem(arg1:string, arg2:any, arg3?:boolean): MenuItem {
private createMenuItem(label:string, actionId: string, enabled?:boolean): Electron.MenuItem;
private createMenuItem(label:string, click:() => void, enabled?:boolean): Electron.MenuItem;
private createMenuItem(arg1:string, arg2:any, arg3?:boolean): Electron.MenuItem {
let label = mnemonicLabel(arg1);
let click:() => void = (typeof arg2 === 'function') ? arg2 : () => windows.manager.sendToFocused('vscode:runAction', arg2);
let enabled = typeof arg3 === 'boolean' ? arg3 : windows.manager.getWindowCount() > 0;
@@ -635,7 +633,7 @@ export class VSCodeMenu {
actionId = arg2;
}
let options:IMenuItemConfig = {
let options:Electron.MenuItemOptions = {
label: label,
accelerator: this.getAccelerator(actionId),
click: click,
@@ -645,7 +643,7 @@ export class VSCodeMenu {
return new MenuItem(options);
}
private createDevToolsAwareMenuItem(label:string, actionId: string, devToolsFocusedFn: (contents: WebContents) => void): MenuItem {
private createDevToolsAwareMenuItem(label:string, actionId: string, devToolsFocusedFn: (contents: WebContents) => void): Electron.MenuItem {
return new MenuItem({
label: mnemonicLabel(label),
accelerator: this.getAccelerator(actionId),
@@ -724,7 +722,7 @@ function reportMenuActionTelemetry(id: string): void {
windows.manager.sendToFocused('vscode:telemetry', { eventName: 'workbenchActionExecuted', data: { id, from: 'menu' } });
}
function __separator__(): MenuItem {
function __separator__(): Electron.MenuItem {
return new MenuItem({ type: 'separator' });
}

View File

@@ -5,7 +5,7 @@
'use strict';
import { TPromise } from 'vs/base/common/winjs.base';
import {TPromise} from 'vs/base/common/winjs.base';
import severity from 'vs/base/common/severity';
import actions = require('vs/base/common/actions');
import {Separator} from 'vs/base/browser/ui/actionbar/actionbar';
@@ -16,10 +16,7 @@ import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
import {IMessageService} from 'vs/platform/message/common/message';
import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
import remote = require('remote');
const Menu = remote.require('menu');
const MenuItem = remote.require('menu-item');
import {remote} from 'electron';
export class ContextMenuService implements IContextMenuService {
public serviceId = IContextMenuService;
@@ -39,26 +36,26 @@ export class ContextMenuService implements IContextMenuService {
return TPromise.as(null);
}
let menu = new Menu();
let menu = new remote.Menu();
let actionToRun: actions.IAction = null;
actions.forEach(a => {
if (a instanceof Separator) {
menu.append(new MenuItem({ type: 'separator' }));
menu.append(new remote.MenuItem({ type: 'separator' }));
} else {
const keybinding = !!delegate.getKeyBinding ? delegate.getKeyBinding(a) : undefined;
const accelerator = keybinding && this.keybindingService.getElectronAcceleratorFor(keybinding);
const item = new MenuItem({
const item = new remote.MenuItem({
label: a.label,
checked: a.checked,
accelerator,
enabled: a.enabled,
click: () => {
actionToRun = a;
}
});
item.enabled = a.enabled;
menu.append(item);
}
});