From 1f30141f65a7bc263ee4c2f03161a9ebc17a6c7b Mon Sep 17 00:00:00 2001 From: SteVen Batten Date: Wed, 22 May 2019 12:05:17 -0700 Subject: [PATCH] update the remaining View/Appearance menu more consistency --- .../browser/actions/layoutActions.ts | 23 +++++++++++++------ src/vs/workbench/browser/contextkeys.ts | 9 +++++++- src/vs/workbench/browser/layout.ts | 5 ++++ .../parts/editor/breadcrumbsControl.ts | 17 ++++++++++---- .../browser/parts/panel/panelActions.ts | 21 +++++++++++++---- src/vs/workbench/common/panel.ts | 1 + .../codeEditor/browser/toggleMinimap.ts | 15 ++++++++++-- .../browser/toggleRenderControlCharacter.ts | 4 ++-- .../browser/toggleRenderWhitespace.ts | 4 ++-- .../electron-browser/main.contribution.ts | 2 +- .../services/layout/browser/layoutService.ts | 5 ++++ .../workbench/test/workbenchTestServices.ts | 1 + 12 files changed, 83 insertions(+), 24 deletions(-) diff --git a/src/vs/workbench/browser/actions/layoutActions.ts b/src/vs/workbench/browser/actions/layoutActions.ts index bffaa0da584..bcca778620b 100644 --- a/src/vs/workbench/browser/actions/layoutActions.ts +++ b/src/vs/workbench/browser/actions/layoutActions.ts @@ -107,7 +107,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { group: '1_toggle_view', command: { id: ToggleCenteredLayout.ID, - title: nls.localize('miToggleCenteredLayout', "Toggle Centered Layout"), + title: nls.localize('miToggleCenteredLayout', "Centered Layout"), toggled: IsCenteredLayoutContext }, order: 3 @@ -416,7 +416,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { group: '1_toggle_view', command: { id: ToggleZenMode.ID, - title: nls.localize('miToggleZenMode', "Toggle Zen Mode"), + title: nls.localize('miToggleZenMode', "Zen Mode"), toggled: InEditorZenModeContext }, order: 2 @@ -474,14 +474,23 @@ if (isWindows || isLinux) { } MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { - group: '1_toggle_view', + group: '2_workbench_layout', command: { id: ToggleMenuBarAction.ID, - title: nls.localize({ key: 'miToggleMenuBar', comment: ['&& denotes a mnemonic'] }, "Toggle Menu &&Bar"), - toggled: ContextKeyExpr.and(ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'hidden'), ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'toggle')) + title: nls.localize({ key: 'miHideMenuBar', comment: ['&& denotes a mnemonic'] }, "Hide Menu &&Bar") }, - when: IsMacContext.toNegated(), - order: 4 + when: ContextKeyExpr.and(IsMacContext.toNegated(), ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'hidden'), ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'toggle')), + order: 0 +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + group: '2_workbench_layout', + command: { + id: ToggleMenuBarAction.ID, + title: nls.localize({ key: 'miShowMenuBar', comment: ['&& denotes a mnemonic'] }, "Show Menu &&Bar") + }, + when: ContextKeyExpr.and(IsMacContext.toNegated(), ContextKeyExpr.and(ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'visible'), ContextKeyExpr.notEquals('config.window.menuBarVisibility', 'default'))), + order: 0 }); // --- Resize View diff --git a/src/vs/workbench/browser/contextkeys.ts b/src/vs/workbench/browser/contextkeys.ts index 20c6b414fcf..b147b08289f 100644 --- a/src/vs/workbench/browser/contextkeys.ts +++ b/src/vs/workbench/browser/contextkeys.ts @@ -16,9 +16,10 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/ import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { WorkbenchState, IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { SideBarVisibleContext } from 'vs/workbench/common/viewlet'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; +import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/layout/browser/layoutService'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { isMacintosh, isLinux, isWindows } from 'vs/base/common/platform'; +import { PanelPositionContext } from 'vs/workbench/common/panel'; export const IsMacContext = new RawContextKey('isMac', isMacintosh); export const IsLinuxContext = new RawContextKey('isLinux', isLinux); @@ -59,6 +60,7 @@ export class WorkbenchContextKeysHandler extends Disposable { private isFullscreenContext: IContextKey; private isCenteredLayoutContext: IContextKey; private sideBarVisibleContext: IContextKey; + private panelPositionContext: IContextKey; constructor( @IContextKeyService private contextKeyService: IContextKeyService, @@ -98,6 +100,7 @@ export class WorkbenchContextKeysHandler extends Disposable { this._register(this.layoutService.onZenModeChange(enabled => this.inZenModeContext.set(enabled))); this._register(this.layoutService.onFullscreenChange(fullscreen => this.isFullscreenContext.set(fullscreen))); this._register(this.layoutService.onCenteredLayoutChange(centered => this.isCenteredLayoutContext.set(centered))); + this._register(this.layoutService.onPanelPositionChange(position => this.panelPositionContext.set(position))); this._register(this.viewletService.onDidViewletClose(() => this.updateSideBarContextKeys())); this._register(this.viewletService.onDidViewletOpen(() => this.updateSideBarContextKeys())); @@ -156,6 +159,10 @@ export class WorkbenchContextKeysHandler extends Disposable { // Sidebar this.sideBarVisibleContext = SideBarVisibleContext.bindTo(this.contextKeyService); + + // Panel Position + this.panelPositionContext = PanelPositionContext.bindTo(this.contextKeyService); + this.panelPositionContext.set(this.layoutService.getPanelPosition() === Position.RIGHT ? 'right' : 'bottom'); } private updateEditorContextKeys(): void { diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 13c3d4857a5..9a811566ba7 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -72,6 +72,9 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi private readonly _onCenteredLayout: Emitter = this._register(new Emitter()); get onCenteredLayoutChange(): Event { return this._onCenteredLayout.event; } + private readonly _onPanelPositionChange: Emitter = this._register(new Emitter()); + get onPanelPositionChange(): Event { return this._onPanelPositionChange.event; } + private readonly _onLayout = this._register(new Emitter()); get onLayout(): Event { return this._onLayout.event; } @@ -1061,6 +1064,8 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi this.storageService.store(Storage.PANEL_POSITION, positionToString(this.state.panel.position), StorageScope.WORKSPACE); + this._onPanelPositionChange.fire(positionToString(this.state.panel.position)); + // Adjust CSS removeClass(panelPart.getContainer(), oldPositionValue); addClass(panelPart.getContainer(), newPositionValue); diff --git a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts index 5cd799b070a..85bcaf180d3 100644 --- a/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts +++ b/src/vs/workbench/browser/parts/editor/breadcrumbsControl.ts @@ -496,12 +496,21 @@ MenuRegistry.appendMenuItem(MenuId.CommandPalette, { }); MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { group: '5_editor', - order: 99, + order: 3, command: { id: 'breadcrumbs.toggle', - title: localize('miToggleBreadcrumbs', "Toggle &&Breadcrumbs"), - toggled: ContextKeyExpr.equals('config.breadcrumbs.enabled', true) - } + title: localize('miShowBreadcrumbs', "Show &&Breadcrumbs") + }, + when: ContextKeyExpr.equals('config.breadcrumbs.enabled', false) +}); +MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { + group: '5_editor', + order: 3, + command: { + id: 'breadcrumbs.toggle', + title: localize('miHideBreadcrumbs', "Hide &&Breadcrumbs") + }, + when: ContextKeyExpr.equals('config.breadcrumbs.enabled', true) }); CommandsRegistry.registerCommand('breadcrumbs.toggle', accessor => { let config = accessor.get(IConfigurationService); diff --git a/src/vs/workbench/browser/parts/panel/panelActions.ts b/src/vs/workbench/browser/parts/panel/panelActions.ts index 9e55f04cb64..c79111da72d 100644 --- a/src/vs/workbench/browser/parts/panel/panelActions.ts +++ b/src/vs/workbench/browser/parts/panel/panelActions.ts @@ -16,7 +16,7 @@ import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/ import { ActivityAction } from 'vs/workbench/browser/parts/compositeBarActions'; import { IActivity } from 'vs/workbench/common/activity'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { ActivePanelContext } from 'vs/workbench/common/panel'; +import { ActivePanelContext, PanelPositionContext } from 'vs/workbench/common/panel'; export class ClosePanelAction extends Action { @@ -93,8 +93,8 @@ export class TogglePanelPositionAction extends Action { static readonly ID = 'workbench.action.togglePanelPosition'; static readonly LABEL = nls.localize('toggledPanelPosition', "Toggle Panel Position"); - private static readonly MOVE_TO_RIGHT_LABEL = nls.localize('moveToRight', "Move Panel Right"); - private static readonly MOVE_TO_BOTTOM_LABEL = nls.localize('moveToBottom', "Move Panel to Bottom"); + static readonly MOVE_TO_RIGHT_LABEL = nls.localize('moveToRight', "Move Panel Right"); + static readonly MOVE_TO_BOTTOM_LABEL = nls.localize('moveToBottom', "Move Panel to Bottom"); private toDispose: IDisposable[]; @@ -292,7 +292,18 @@ MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { group: '2_workbench_layout', command: { id: TogglePanelPositionAction.ID, - title: TogglePanelPositionAction.LABEL + title: TogglePanelPositionAction.MOVE_TO_RIGHT_LABEL }, - order: 3 + when: PanelPositionContext.isEqualTo('bottom'), + order: 5 +}); + +MenuRegistry.appendMenuItem(MenuId.MenubarAppearanceMenu, { + group: '2_workbench_layout', + command: { + id: TogglePanelPositionAction.ID, + title: TogglePanelPositionAction.MOVE_TO_BOTTOM_LABEL + }, + when: PanelPositionContext.isEqualTo('right'), + order: 5 }); diff --git a/src/vs/workbench/common/panel.ts b/src/vs/workbench/common/panel.ts index 628846c404a..7b836be9552 100644 --- a/src/vs/workbench/common/panel.ts +++ b/src/vs/workbench/common/panel.ts @@ -8,5 +8,6 @@ import { RawContextKey } from 'vs/platform/contextkey/common/contextkey'; export const ActivePanelContext = new RawContextKey('activePanel', ''); export const PanelFocusContext = new RawContextKey('panelFocus', false); +export const PanelPositionContext = new RawContextKey('panelPosition', 'bottom'); export interface IPanel extends IComposite { } diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts index 96576810093..f2e9ced99e4 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.ts @@ -36,8 +36,19 @@ MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { group: '5_editor', command: { id: ToggleMinimapAction.ID, - title: nls.localize({ key: 'miToggleMinimap', comment: ['&& denotes a mnemonic'] }, "Toggle &&Minimap"), - toggled: ContextKeyExpr.equals('config.editor.minimap.enabled', true) + title: nls.localize({ key: 'miShowMinimap', comment: ['&& denotes a mnemonic'] }, "Show &&Minimap") }, + when: ContextKeyExpr.equals('config.editor.minimap.enabled', false), order: 2 }); + +MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { + group: '5_editor', + command: { + id: ToggleMinimapAction.ID, + title: nls.localize({ key: 'miHideMinimap', comment: ['&& denotes a mnemonic'] }, "Hide &&Minimap") + }, + when: ContextKeyExpr.equals('config.editor.minimap.enabled', true), + order: 2 +}); + diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts index ce2765e5efe..23410b162b6 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.ts @@ -37,8 +37,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { group: '5_editor', command: { id: ToggleRenderControlCharacterAction.ID, - title: nls.localize({ key: 'miToggleRenderControlCharacters', comment: ['&& denotes a mnemonic'] }, "Toggle &&Control Characters"), + title: nls.localize({ key: 'miToggleRenderControlCharacters', comment: ['&& denotes a mnemonic'] }, "Render &&Control Characters"), toggled: ContextKeyExpr.equals('config.editor.renderControlCharacters', true) }, - order: 4 + order: 5 }); diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts index db5bbbf573f..e5181da5c2e 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.ts @@ -45,8 +45,8 @@ MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, { group: '5_editor', command: { id: ToggleRenderWhitespaceAction.ID, - title: nls.localize({ key: 'miToggleRenderWhitespace', comment: ['&& denotes a mnemonic'] }, "Toggle &&Render Whitespace"), + title: nls.localize({ key: 'miToggleRenderWhitespace', comment: ['&& denotes a mnemonic'] }, "&&Render Whitespace"), toggled: ContextKeyExpr.notEquals('config.editor.renderWhitespace', 'none') }, - order: 3 + order: 4 }); diff --git a/src/vs/workbench/electron-browser/main.contribution.ts b/src/vs/workbench/electron-browser/main.contribution.ts index ce348281306..fa2e7783828 100644 --- a/src/vs/workbench/electron-browser/main.contribution.ts +++ b/src/vs/workbench/electron-browser/main.contribution.ts @@ -358,7 +358,7 @@ import { LogStorageAction } from 'vs/platform/storage/node/storageService'; group: '1_toggle_view', command: { id: ToggleFullScreenAction.ID, - title: nls.localize({ key: 'miToggleFullScreen', comment: ['&& denotes a mnemonic'] }, "Toggle &&Full Screen"), + title: nls.localize({ key: 'miToggleFullScreen', comment: ['&& denotes a mnemonic'] }, "&&Full Screen"), toggled: IsFullscreenContext }, order: 1 diff --git a/src/vs/workbench/services/layout/browser/layoutService.ts b/src/vs/workbench/services/layout/browser/layoutService.ts index eb6d120ca89..c89bbef87c1 100644 --- a/src/vs/workbench/services/layout/browser/layoutService.ts +++ b/src/vs/workbench/services/layout/browser/layoutService.ts @@ -55,6 +55,11 @@ export interface IWorkbenchLayoutService extends ILayoutService { */ readonly onCenteredLayoutChange: Event; + /** + * Emit when panel position changes. + */ + readonly onPanelPositionChange: Event; + /** * Asks the part service if all parts have been fully restored. For editor part * this means that the contents of editors have loaded. diff --git a/src/vs/workbench/test/workbenchTestServices.ts b/src/vs/workbench/test/workbenchTestServices.ts index 583ad16042b..194d033c290 100644 --- a/src/vs/workbench/test/workbenchTestServices.ts +++ b/src/vs/workbench/test/workbenchTestServices.ts @@ -457,6 +457,7 @@ export class TestLayoutService implements IWorkbenchLayoutService { onZenModeChange: Event = Event.None; onCenteredLayoutChange: Event = Event.None; onFullscreenChange: Event = Event.None; + onPanelPositionChange: Event = Event.None; onLayout = Event.None; private _onTitleBarVisibilityChange = new Emitter();