485870cefa615f7e31d25540a15a82e3d84d0342793d48b5ac6c07336b4b599943e19bf6fe66af81acf2f18bd758c0cae74bedb5b6ad8d97cc40a3215c031b 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  6. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  7. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  8. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  9. return c > 3 && r && Object.defineProperty(target, key, r), r;
  10. };
  11. var __param = (this && this.__param) || function (paramIndex, decorator) {
  12. return function (target, key) { decorator(target, key, paramIndex); }
  13. };
  14. import './standaloneQuickInput.css';
  15. import { registerEditorContribution } from '../../../browser/editorExtensions.js';
  16. import { IThemeService } from '../../../../platform/theme/common/themeService.js';
  17. import { CancellationToken } from '../../../../base/common/cancellation.js';
  18. import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';
  19. import { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
  20. import { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js';
  21. import { EditorScopedLayoutService } from '../standaloneLayoutService.js';
  22. import { ICodeEditorService } from '../../../browser/services/codeEditorService.js';
  23. import { QuickInputService } from '../../../../platform/quickinput/browser/quickInput.js';
  24. import { once } from '../../../../base/common/functional.js';
  25. let EditorScopedQuickInputService = class EditorScopedQuickInputService extends QuickInputService {
  26. constructor(editor, instantiationService, contextKeyService, themeService, accessibilityService, codeEditorService) {
  27. super(instantiationService, contextKeyService, themeService, accessibilityService, new EditorScopedLayoutService(editor.getContainerDomNode(), codeEditorService));
  28. this.host = undefined;
  29. // Use the passed in code editor as host for the quick input widget
  30. const contribution = QuickInputEditorContribution.get(editor);
  31. if (contribution) {
  32. const widget = contribution.widget;
  33. this.host = {
  34. _serviceBrand: undefined,
  35. get hasContainer() { return true; },
  36. get container() { return widget.getDomNode(); },
  37. get dimension() { return editor.getLayoutInfo(); },
  38. get onDidLayout() { return editor.onDidLayoutChange; },
  39. focus: () => editor.focus(),
  40. offset: { top: 0, quickPickTop: 0 }
  41. };
  42. }
  43. else {
  44. this.host = undefined;
  45. }
  46. }
  47. createController() {
  48. return super.createController(this.host);
  49. }
  50. };
  51. EditorScopedQuickInputService = __decorate([
  52. __param(1, IInstantiationService),
  53. __param(2, IContextKeyService),
  54. __param(3, IThemeService),
  55. __param(4, IAccessibilityService),
  56. __param(5, ICodeEditorService)
  57. ], EditorScopedQuickInputService);
  58. export { EditorScopedQuickInputService };
  59. let StandaloneQuickInputService = class StandaloneQuickInputService {
  60. constructor(instantiationService, codeEditorService) {
  61. this.instantiationService = instantiationService;
  62. this.codeEditorService = codeEditorService;
  63. this.mapEditorToService = new Map();
  64. }
  65. get activeService() {
  66. const editor = this.codeEditorService.getFocusedCodeEditor();
  67. if (!editor) {
  68. throw new Error('Quick input service needs a focused editor to work.');
  69. }
  70. // Find the quick input implementation for the focused
  71. // editor or create it lazily if not yet created
  72. let quickInputService = this.mapEditorToService.get(editor);
  73. if (!quickInputService) {
  74. const newQuickInputService = quickInputService = this.instantiationService.createInstance(EditorScopedQuickInputService, editor);
  75. this.mapEditorToService.set(editor, quickInputService);
  76. once(editor.onDidDispose)(() => {
  77. newQuickInputService.dispose();
  78. this.mapEditorToService.delete(editor);
  79. });
  80. }
  81. return quickInputService;
  82. }
  83. get quickAccess() { return this.activeService.quickAccess; }
  84. pick(picks, options = {}, token = CancellationToken.None) {
  85. return this.activeService /* TS fail */.pick(picks, options, token);
  86. }
  87. createQuickPick() {
  88. return this.activeService.createQuickPick();
  89. }
  90. };
  91. StandaloneQuickInputService = __decorate([
  92. __param(0, IInstantiationService),
  93. __param(1, ICodeEditorService)
  94. ], StandaloneQuickInputService);
  95. export { StandaloneQuickInputService };
  96. export class QuickInputEditorContribution {
  97. constructor(editor) {
  98. this.editor = editor;
  99. this.widget = new QuickInputEditorWidget(this.editor);
  100. }
  101. static get(editor) {
  102. return editor.getContribution(QuickInputEditorContribution.ID);
  103. }
  104. dispose() {
  105. this.widget.dispose();
  106. }
  107. }
  108. QuickInputEditorContribution.ID = 'editor.controller.quickInput';
  109. export class QuickInputEditorWidget {
  110. constructor(codeEditor) {
  111. this.codeEditor = codeEditor;
  112. this.domNode = document.createElement('div');
  113. this.codeEditor.addOverlayWidget(this);
  114. }
  115. getId() {
  116. return QuickInputEditorWidget.ID;
  117. }
  118. getDomNode() {
  119. return this.domNode;
  120. }
  121. getPosition() {
  122. return { preference: 2 /* OverlayWidgetPositionPreference.TOP_CENTER */ };
  123. }
  124. dispose() {
  125. this.codeEditor.removeOverlayWidget(this);
  126. }
  127. }
  128. QuickInputEditorWidget.ID = 'editor.contrib.quickInputWidget';
  129. registerEditorContribution(QuickInputEditorContribution.ID, QuickInputEditorContribution);