From 66e66600f16ce1b88ea53a194d89176350efafdd Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 9 Mar 2020 10:39:09 +0100 Subject: [PATCH] quick access - prepare for merge to master --- .../parts/quickinput/browser/quickInput.ts | 7 ++-- .../standaloneQuickInputServiceImpl.ts | 5 +-- .../browser/parts/quickopen/quickopen.ts | 35 ++----------------- .../browser/quickAccess.contribution.ts | 18 ++++++++-- .../browser/quickAccessCommands.ts | 28 +++++++++++++++ .../test/browser/quickAccess.test.ts | 3 ++ .../test/browser/workbenchTestServices.ts | 2 +- 7 files changed, 54 insertions(+), 44 deletions(-) create mode 100644 src/vs/workbench/contrib/quickaccess/browser/quickAccessCommands.ts diff --git a/src/vs/base/parts/quickinput/browser/quickInput.ts b/src/vs/base/parts/quickinput/browser/quickInput.ts index db75187e82e..002c1df9a51 100644 --- a/src/vs/base/parts/quickinput/browser/quickInput.ts +++ b/src/vs/base/parts/quickinput/browser/quickInput.ts @@ -129,10 +129,6 @@ type Visibilities = { class QuickInput extends Disposable implements IQuickInput { - private readonly onDidTriggerButtonEmitter = this._register(new Emitter()); - private readonly onDidHideEmitter = this._register(new Emitter()); - private readonly onDisposeEmitter = this._register(new Emitter()); - private _title: string | undefined; private _description: string | undefined; private _steps: number | undefined; @@ -144,6 +140,9 @@ class QuickInput extends Disposable implements IQuickInput { private _ignoreFocusOut = false; private _buttons: IQuickInputButton[] = []; private buttonsUpdated = false; + private readonly onDidTriggerButtonEmitter = this._register(new Emitter()); + private readonly onDidHideEmitter = this._register(new Emitter()); + private readonly onDisposeEmitter = this._register(new Emitter()); protected readonly visibleDisposables = this._register(new DisposableStore()); diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts index 81574dce34b..20342263dc2 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.ts @@ -145,10 +145,7 @@ export class QuickInputEditorContribution implements IEditorContribution { readonly widget = new QuickInputEditorWidget(this.editor); - constructor(private editor: ICodeEditor, @IQuickInputService quickInputService: IQuickInputService) { - // TODO@ben remove me - only for testing - once(editor.onDidFocusEditorText)(() => quickInputService.quickAccess.show('')); - } + constructor(private editor: ICodeEditor) { } dispose(): void { this.widget.dispose(); diff --git a/src/vs/workbench/browser/parts/quickopen/quickopen.ts b/src/vs/workbench/browser/parts/quickopen/quickopen.ts index d13c217727d..5f7373c0d3f 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickopen.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickopen.ts @@ -6,17 +6,15 @@ import * as nls from 'vs/nls'; import { Action } from 'vs/base/common/actions'; import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; -import { IQuickInputService, IQuickPick, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; +import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { ContextKeyExpr, RawContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { ICommandHandler, CommandsRegistry } from 'vs/platform/commands/common/commands'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; +import { Disposable } from 'vs/base/common/lifecycle'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { Registry } from 'vs/platform/registry/common/platform'; -import { IQuickAccessProvider, IQuickAccessRegistry, Extensions as QuickInputExtensions } from 'vs/platform/quickinput/common/quickAccess'; -import { CancellationToken } from 'vs/base/common/cancellation'; const inQuickOpenKey = 'inQuickOpen'; export const InQuickOpenContextKey = new RawContextKey(inQuickOpenKey, false); @@ -167,8 +165,6 @@ export class LegacyQuickInputQuickOpenController extends Disposable { super(); this.registerListeners(); - - setTimeout(() => this.quickInputService.quickAccess.show('?'), 0); } private registerListeners(): void { @@ -207,30 +203,3 @@ export class LegacyQuickInputQuickOpenController extends Disposable { } Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(LegacyQuickInputQuickOpenController, LifecyclePhase.Ready); - -class SampleQuickAccessProvider implements IQuickAccessProvider { - provide(picker: IQuickPick, token: CancellationToken): IDisposable { - picker.items = [ - { label: 'Hello World' }, - { label: 'Lorem Ipsum' }, - { label: 'Something Else' } - ]; - - return Disposable.None; - } -} - -const quickAccessRegistry = Registry.as(QuickInputExtensions.Quickaccess); -[''/*, '>', '@', ':', 'edt', 'edt active', 'edt mru', 'view'*/].forEach(prefix => { - const provider = { - ctor: SampleQuickAccessProvider, - prefix, - helpEntries: [{ description: `Sample Provider with prefix ${prefix}`, needsEditor: prefix === '@' || prefix === ':' }] - }; - - if (!prefix) { - quickAccessRegistry.defaultProvider = provider; - } else { - quickAccessRegistry.registerQuickAccessProvider(provider); - } -}); diff --git a/src/vs/workbench/contrib/quickaccess/browser/quickAccess.contribution.ts b/src/vs/workbench/contrib/quickaccess/browser/quickAccess.contribution.ts index 90b796901d8..7b097e5f77a 100644 --- a/src/vs/workbench/contrib/quickaccess/browser/quickAccess.contribution.ts +++ b/src/vs/workbench/contrib/quickaccess/browser/quickAccess.contribution.ts @@ -8,15 +8,29 @@ import { IQuickAccessRegistry, Extensions } from 'vs/platform/quickinput/common/ import { Registry } from 'vs/platform/registry/common/platform'; import { HelpQuickAccessProvider } from 'vs/platform/quickinput/browser/helpQuickAccess'; import { ViewQuickAccessProvider, VIEW_QUICK_ACCESS_PREFIX } from 'vs/workbench/contrib/quickaccess/browser/viewQuickAccess'; +import { QUICK_ACCESS_COMMAND_ID } from 'vs/workbench/contrib/quickaccess/browser/quickAccessCommands'; +import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; -Registry.as(Extensions.Quickaccess).registerQuickAccessProvider({ +const helpQuickAccessProvider = { ctor: HelpQuickAccessProvider, prefix: '?', helpEntries: [{ description: localize('helpQuickAccess', "Show all Quick Access Providers"), needsEditor: false }] -}); +}; + +Registry.as(Extensions.Quickaccess).registerQuickAccessProvider(helpQuickAccessProvider); +Registry.as(Extensions.Quickaccess).defaultProvider = helpQuickAccessProvider; Registry.as(Extensions.Quickaccess).registerQuickAccessProvider({ ctor: ViewQuickAccessProvider, prefix: VIEW_QUICK_ACCESS_PREFIX, helpEntries: [{ description: localize('viewQuickAccess', "Open View"), needsEditor: false }] }); + +MenuRegistry.appendMenuItem(MenuId.CommandPalette, { + command: { + id: QUICK_ACCESS_COMMAND_ID, title: { + value: localize('openQuickAccess', "Open Quick Access"), original: 'Open Quick Access' + }, + category: localize('quickAccess', "Quick Access") + } +}); diff --git a/src/vs/workbench/contrib/quickaccess/browser/quickAccessCommands.ts b/src/vs/workbench/contrib/quickaccess/browser/quickAccessCommands.ts new file mode 100644 index 00000000000..23b2521b043 --- /dev/null +++ b/src/vs/workbench/contrib/quickaccess/browser/quickAccessCommands.ts @@ -0,0 +1,28 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; +import { CommandsRegistry } from 'vs/platform/commands/common/commands'; +import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; + +export const QUICK_ACCESS_COMMAND_ID = 'workbench.action.openQuickAccess'; + +CommandsRegistry.registerCommand({ + id: QUICK_ACCESS_COMMAND_ID, + handler: async function (accessor: ServicesAccessor, prefix: string | null = null) { + const quickInputService = accessor.get(IQuickInputService); + + quickInputService.quickAccess.show(typeof prefix === 'string' ? prefix : undefined); + }, + description: { + description: `Quick access`, + args: [{ + name: 'prefix', + schema: { + 'type': 'string' + } + }] + } +}); diff --git a/src/vs/workbench/test/browser/quickAccess.test.ts b/src/vs/workbench/test/browser/quickAccess.test.ts index 94ffc5ac658..bd9990491e4 100644 --- a/src/vs/workbench/test/browser/quickAccess.test.ts +++ b/src/vs/workbench/test/browser/quickAccess.test.ts @@ -83,6 +83,7 @@ suite('QuickAccess', () => { } } + const defaultProviderDescriptor = { ctor: TestProvider1, prefix: '', helpEntries: [] }; const providerDescriptor1 = { ctor: TestProvider1, prefix: 'test', helpEntries: [] }; const providerDescriptor2 = { ctor: TestProvider2, prefix: 'test something', helpEntries: [] }; const providerDescriptor3 = { ctor: TestProvider3, prefix: 'default', helpEntries: [] }; @@ -95,6 +96,8 @@ suite('QuickAccess', () => { test('registry', () => { const registry = (Registry.as(Extensions.Quickaccess)); + registry.defaultProvider = defaultProviderDescriptor; + const initialSize = registry.getQuickAccessProviders().length; const disposable = registry.registerQuickAccessProvider(providerDescriptor1); diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index ef9c609850a..0caf68b4e03 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -102,12 +102,12 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IDiffEditor } from 'vs/editor/common/editorCommon'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { QuickInputService } from 'vs/workbench/services/quickinput/browser/quickInputService'; +import { IListService } from 'vs/platform/list/browser/listService'; export import TestTextResourcePropertiesService = CommonWorkbenchTestServices.TestTextResourcePropertiesService; export import TestContextService = CommonWorkbenchTestServices.TestContextService; export import TestStorageService = CommonWorkbenchTestServices.TestStorageService; export import TestWorkingCopyService = CommonWorkbenchTestServices.TestWorkingCopyService; -import { IListService } from 'vs/platform/list/browser/listService'; export function createFileEditorInput(instantiationService: IInstantiationService, resource: URI): FileEditorInput { return instantiationService.createInstance(FileEditorInput, resource, undefined, undefined); -- GitLab