diff --git a/src/vs/base/common/keyCodes.ts b/src/vs/base/common/keyCodes.ts index 3898558935491cb07f971cc82b74d0fbbae2fe46..b2d75920a4cdfe0fdd3f93e202eea0633edfe254 100644 --- a/src/vs/base/common/keyCodes.ts +++ b/src/vs/base/common/keyCodes.ts @@ -5,7 +5,6 @@ import { OperatingSystem } from 'vs/base/common/platform'; import { illegalArgument } from 'vs/base/common/errors'; -import { Modifiers, UILabelProvider, AriaLabelProvider, ElectronAcceleratorLabelProvider, UserSettingsLabelProvider } from 'vs/base/common/keybindingLabels'; /** * Virtual Key Codes, the value does not hold any inherent meaning. @@ -601,72 +600,3 @@ export abstract class ResolvedKeybinding { */ public abstract getDispatchParts(): (string | null)[]; } - -export abstract class BaseResolvedKeybinding extends ResolvedKeybinding { - - protected readonly _os: OperatingSystem; - protected readonly _parts: T[]; - - constructor(os: OperatingSystem, parts: T[]) { - super(); - if (parts.length === 0) { - throw illegalArgument(`parts`); - } - this._os = os; - this._parts = parts; - } - - public getLabel(): string | null { - return UILabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getLabel(keybinding)); - } - - public getAriaLabel(): string | null { - return AriaLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getAriaLabel(keybinding)); - } - - public getElectronAccelerator(): string | null { - if (this._parts.length > 1) { - // Electron cannot handle chords - return null; - } - return ElectronAcceleratorLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getElectronAccelerator(keybinding)); - } - - public getUserSettingsLabel(): string | null { - return UserSettingsLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getUserSettingsLabel(keybinding)); - } - - public isWYSIWYG(): boolean { - return this._parts.every((keybinding) => this._isWYSIWYG(keybinding)); - } - - public isChord(): boolean { - return (this._parts.length > 1); - } - - public getParts(): ResolvedKeybindingPart[] { - return this._parts.map((keybinding) => this._getPart(keybinding)); - } - - private _getPart(keybinding: T): ResolvedKeybindingPart { - return new ResolvedKeybindingPart( - keybinding.ctrlKey, - keybinding.shiftKey, - keybinding.altKey, - keybinding.metaKey, - this._getLabel(keybinding), - this._getAriaLabel(keybinding) - ); - } - - public getDispatchParts(): (string | null)[] { - return this._parts.map((keybinding) => this._getDispatchPart(keybinding)); - } - - protected abstract _getLabel(keybinding: T): string | null; - protected abstract _getAriaLabel(keybinding: T): string | null; - protected abstract _getElectronAccelerator(keybinding: T): string | null; - protected abstract _getUserSettingsLabel(keybinding: T): string | null; - protected abstract _isWYSIWYG(keybinding: T): boolean; - protected abstract _getDispatchPart(keybinding: T): string | null; -} diff --git a/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts b/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts new file mode 100644 index 0000000000000000000000000000000000000000..cae3bd603da531fb10e078fbd5601be23a77e128 --- /dev/null +++ b/src/vs/platform/keybinding/common/baseResolvedKeybinding.ts @@ -0,0 +1,78 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { OperatingSystem } from 'vs/base/common/platform'; +import { illegalArgument } from 'vs/base/common/errors'; +import { Modifiers, UILabelProvider, AriaLabelProvider, ElectronAcceleratorLabelProvider, UserSettingsLabelProvider } from 'vs/base/common/keybindingLabels'; +import { ResolvedKeybinding, ResolvedKeybindingPart } from 'vs/base/common/keyCodes'; + +export abstract class BaseResolvedKeybinding extends ResolvedKeybinding { + + protected readonly _os: OperatingSystem; + protected readonly _parts: T[]; + + constructor(os: OperatingSystem, parts: T[]) { + super(); + if (parts.length === 0) { + throw illegalArgument(`parts`); + } + this._os = os; + this._parts = parts; + } + + public getLabel(): string | null { + return UILabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getLabel(keybinding)); + } + + public getAriaLabel(): string | null { + return AriaLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getAriaLabel(keybinding)); + } + + public getElectronAccelerator(): string | null { + if (this._parts.length > 1) { + // Electron cannot handle chords + return null; + } + return ElectronAcceleratorLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getElectronAccelerator(keybinding)); + } + + public getUserSettingsLabel(): string | null { + return UserSettingsLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getUserSettingsLabel(keybinding)); + } + + public isWYSIWYG(): boolean { + return this._parts.every((keybinding) => this._isWYSIWYG(keybinding)); + } + + public isChord(): boolean { + return (this._parts.length > 1); + } + + public getParts(): ResolvedKeybindingPart[] { + return this._parts.map((keybinding) => this._getPart(keybinding)); + } + + private _getPart(keybinding: T): ResolvedKeybindingPart { + return new ResolvedKeybindingPart( + keybinding.ctrlKey, + keybinding.shiftKey, + keybinding.altKey, + keybinding.metaKey, + this._getLabel(keybinding), + this._getAriaLabel(keybinding) + ); + } + + public getDispatchParts(): (string | null)[] { + return this._parts.map((keybinding) => this._getDispatchPart(keybinding)); + } + + protected abstract _getLabel(keybinding: T): string | null; + protected abstract _getAriaLabel(keybinding: T): string | null; + protected abstract _getElectronAccelerator(keybinding: T): string | null; + protected abstract _getUserSettingsLabel(keybinding: T): string | null; + protected abstract _isWYSIWYG(keybinding: T): boolean; + protected abstract _getDispatchPart(keybinding: T): string | null; +} diff --git a/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts b/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts index fb6c328c8813a6e5e1ab58c99cb606fbcd9888e7..5a24412035a4a057b935ecee2ca19115810c26a1 100644 --- a/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts +++ b/src/vs/platform/keybinding/common/usLayoutResolvedKeybinding.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { KeyCode, KeyCodeUtils, Keybinding, SimpleKeybinding, BaseResolvedKeybinding } from 'vs/base/common/keyCodes'; +import { KeyCode, KeyCodeUtils, Keybinding, SimpleKeybinding } from 'vs/base/common/keyCodes'; import { OperatingSystem } from 'vs/base/common/platform'; +import { BaseResolvedKeybinding } from 'vs/platform/keybinding/common/baseResolvedKeybinding'; /** * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout. diff --git a/src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts b/src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts index 37afe210ef79dbb84858b51ce569657615af0909..98d6b166a88b81be28472b26b8d00a055383aa40 100644 --- a/src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts +++ b/src/vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts @@ -4,11 +4,12 @@ *--------------------------------------------------------------------------------------------*/ import { CharCode } from 'vs/base/common/charCode'; -import { KeyCode, KeyCodeUtils, Keybinding, ResolvedKeybinding, SimpleKeybinding, BaseResolvedKeybinding } from 'vs/base/common/keyCodes'; +import { KeyCode, KeyCodeUtils, Keybinding, ResolvedKeybinding, SimpleKeybinding } from 'vs/base/common/keyCodes'; import { OperatingSystem } from 'vs/base/common/platform'; import { IMMUTABLE_CODE_TO_KEY_CODE, IMMUTABLE_KEY_CODE_TO_CODE, ScanCode, ScanCodeBinding, ScanCodeUtils } from 'vs/base/common/scanCode'; import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; import { IKeyboardMapper } from 'vs/workbench/services/keybinding/common/keyboardMapper'; +import { BaseResolvedKeybinding } from 'vs/platform/keybinding/common/baseResolvedKeybinding'; export interface IMacLinuxKeyMapping { value: string; diff --git a/src/vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts b/src/vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts index 38d534fcebb23391e95e029fff30c73512ec0d8b..f3e6e0d4d4323c25e8df47363a9a2d28e2743a44 100644 --- a/src/vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts +++ b/src/vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts @@ -4,12 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { CharCode } from 'vs/base/common/charCode'; -import { KeyCode, KeyCodeUtils, Keybinding, ResolvedKeybinding, SimpleKeybinding, BaseResolvedKeybinding } from 'vs/base/common/keyCodes'; +import { KeyCode, KeyCodeUtils, Keybinding, ResolvedKeybinding, SimpleKeybinding } from 'vs/base/common/keyCodes'; import { UILabelProvider } from 'vs/base/common/keybindingLabels'; import { OperatingSystem } from 'vs/base/common/platform'; import { IMMUTABLE_CODE_TO_KEY_CODE, ScanCode, ScanCodeBinding, ScanCodeUtils } from 'vs/base/common/scanCode'; import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; import { IKeyboardMapper } from 'vs/workbench/services/keybinding/common/keyboardMapper'; +import { BaseResolvedKeybinding } from 'vs/platform/keybinding/common/baseResolvedKeybinding'; export interface IWindowsKeyMapping { vkey: string;