baseResolvedKeybinding.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { illegalArgument } from '../../../base/common/errors.js';
  6. import { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider } from '../../../base/common/keybindingLabels.js';
  7. import { ResolvedKeybinding, ResolvedKeybindingPart } from '../../../base/common/keybindings.js';
  8. export class BaseResolvedKeybinding extends ResolvedKeybinding {
  9. constructor(os, parts) {
  10. super();
  11. if (parts.length === 0) {
  12. throw illegalArgument(`parts`);
  13. }
  14. this._os = os;
  15. this._parts = parts;
  16. }
  17. getLabel() {
  18. return UILabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getLabel(keybinding));
  19. }
  20. getAriaLabel() {
  21. return AriaLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getAriaLabel(keybinding));
  22. }
  23. getElectronAccelerator() {
  24. if (this._parts.length > 1) {
  25. // [Electron Accelerators] Electron cannot handle chords
  26. return null;
  27. }
  28. if (this._parts[0].isDuplicateModifierCase()) {
  29. // [Electron Accelerators] Electron cannot handle modifier only keybindings
  30. // e.g. "shift shift"
  31. return null;
  32. }
  33. return ElectronAcceleratorLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getElectronAccelerator(keybinding));
  34. }
  35. isChord() {
  36. return (this._parts.length > 1);
  37. }
  38. getParts() {
  39. return this._parts.map((keybinding) => this._getPart(keybinding));
  40. }
  41. _getPart(keybinding) {
  42. return new ResolvedKeybindingPart(keybinding.ctrlKey, keybinding.shiftKey, keybinding.altKey, keybinding.metaKey, this._getLabel(keybinding), this._getAriaLabel(keybinding));
  43. }
  44. getDispatchParts() {
  45. return this._parts.map((keybinding) => this._getDispatchPart(keybinding));
  46. }
  47. getSingleModifierDispatchParts() {
  48. return this._parts.map((keybinding) => this._getSingleModifierDispatchPart(keybinding));
  49. }
  50. }