diff --git a/src/vs/editor/contrib/suggest/media/suggest.css b/src/vs/editor/contrib/suggest/media/suggest.css index 43260c398f9..8137e848dd9 100644 --- a/src/vs/editor/contrib/suggest/media/suggest.css +++ b/src/vs/editor/contrib/suggest/media/suggest.css @@ -110,8 +110,6 @@ font-weight: bold; } -/** Status Bar **/ - /** ReadMore Icon styles **/ .monaco-editor .suggest-widget .details>.monaco-scrollable-element>.body>.header>.codicon-close, .monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before { diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index 3a336d36c0c..192c0e4aee4 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -20,7 +20,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from 'vs/editor/browser/editorBrowser'; -import { Context as SuggestContext, CompletionItem, suggestWidgetStatusbarMenu } from './suggest'; +import { Context as SuggestContext, CompletionItem } from './suggest'; import { CompletionModel } from './completionModel'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { attachListStyler } from 'vs/platform/theme/common/styler'; @@ -38,14 +38,11 @@ import { IModelService } from 'vs/editor/common/services/modelService'; import { URI } from 'vs/base/common/uri'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { FileKind } from 'vs/platform/files/common/files'; -import { flatten, isFalsyOrEmpty } from 'vs/base/common/arrays'; +import { flatten } from 'vs/base/common/arrays'; import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { IMenuService } from 'vs/platform/actions/common/actions'; -import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { IAction, IActionViewItemProvider } from 'vs/base/common/actions'; import { Codicon, registerIcon } from 'vs/base/common/codicons'; -import { ActionViewItem } from 'vs/base/browser/ui/actionbar/actionViewItems'; import { SuggestionDetails, canExpandCompletionItem } from './suggestWidgetDetails'; +import { SuggestWidgetStatus } from 'vs/editor/contrib/suggest/suggestWidgetStatus'; const expandSuggestionDocsByDefault = false; @@ -307,7 +304,7 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate; private listHeight?: number; @@ -352,7 +349,6 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate this.element.classList.toggle('with-status-bar', this.editor.getOption(EditorOption.suggest).statusBar.visible); applyStatusBarStyle(); - this.statusBarElement = append(this.element, $('.suggest-status-bar')); - const actionViewItemProvider = (action => { - const kb = keybindingService.lookupKeybindings(action.id); - return new class extends ActionViewItem { - constructor() { - super(undefined, action, { label: true, icon: false }); - } - updateLabel() { - if (isFalsyOrEmpty(kb) || !this.label) { - return super.updateLabel(); - } - const { label } = this.getAction(); - this.label.textContent = /{\d}/.test(label) - ? strings.format(this.getAction().label, kb[0].getLabel()) - : `${this.getAction().label} (${kb[0].getLabel()})`; - } - }; - }); - const leftActions = new ActionBar(this.statusBarElement, { actionViewItemProvider }); - const rightActions = new ActionBar(this.statusBarElement, { actionViewItemProvider }); - const menu = menuService.createMenu(suggestWidgetStatusbarMenu, contextKeyService); - const renderMenu = () => { - const left: IAction[] = []; - const right: IAction[] = []; - for (let [group, actions] of menu.getActions()) { - if (group === 'left') { - left.push(...actions); - } else { - right.push(...actions); - } - } - leftActions.clear(); - leftActions.push(left); - rightActions.clear(); - rightActions.push(right); - }; - this._disposables.add(menu.onDidChange(() => renderMenu())); - this._disposables.add(menu); + this.status = instantiationService.createInstance(SuggestWidgetStatus, this.element); this.details = instantiationService.createInstance(SuggestionDetails, this.element, this.editor, markdownRenderer, kbToggleDetails); this.details.onDidClose(this.toggleDetails, this, this._disposables); @@ -540,14 +499,14 @@ export class SuggestWidget implements IContentWidget, IListVirtualDelegate(action => { + const kb = keybindingService.lookupKeybindings(action.id); + return new class extends ActionViewItem { + constructor() { + super(undefined, action, { label: true, icon: false }); + } + updateLabel() { + if (isFalsyOrEmpty(kb) || !this.label) { + return super.updateLabel(); + } + const { label } = this.getAction(); + this.label.textContent = /{\d}/.test(label) + ? format(this.getAction().label, kb[0].getLabel()) + : `${this.getAction().label} (${kb[0].getLabel()})`; + } + }; + }); + const leftActions = new ActionBar(this.element, { actionViewItemProvider }); + const rightActions = new ActionBar(this.element, { actionViewItemProvider }); + const menu = menuService.createMenu(suggestWidgetStatusbarMenu, contextKeyService); + const renderMenu = () => { + const left: IAction[] = []; + const right: IAction[] = []; + for (let [group, actions] of menu.getActions()) { + if (group === 'left') { + left.push(...actions); + } else { + right.push(...actions); + } + } + leftActions.clear(); + leftActions.push(left); + rightActions.clear(); + rightActions.push(right); + }; + this._disposables.add(menu.onDidChange(() => renderMenu())); + this._disposables.add(menu); + } + + dispose(): void { + this._disposables.dispose(); + this.element.remove(); + } +}