sugest widegt only knows about view model, not data model

This commit is contained in:
Johannes Rieken 2016-08-17 16:10:28 +02:00
parent 1b51bc6296
commit ec9ff75485
2 changed files with 18 additions and 26 deletions

View file

@ -28,7 +28,6 @@ export class SuggestController implements IEditorContribution {
private model: SuggestModel; private model: SuggestModel;
private widget: SuggestWidget; private widget: SuggestWidget;
private toDispose: IDisposable[] = []; private toDispose: IDisposable[] = [];
constructor( constructor(
@ -36,9 +35,9 @@ export class SuggestController implements IEditorContribution {
@IInstantiationService instantiationService: IInstantiationService @IInstantiationService instantiationService: IInstantiationService
) { ) {
this.model = new SuggestModel(this.editor); this.model = new SuggestModel(this.editor);
this.toDispose.push(this.model.onDidTrigger(e => this.widget.showTriggered(e))); this.toDispose.push(this.model.onDidTrigger(e => this.widget.showTriggered(e.auto)));
this.toDispose.push(this.model.onDidSuggest(e => this.widget.showSuggestions(e))); this.toDispose.push(this.model.onDidSuggest(e => this.widget.showSuggestions(e.completionModel, e.isFrozen, e.auto)));
this.toDispose.push(this.model.onDidCancel(e => this.widget.showDidCancel(e))); this.toDispose.push(this.model.onDidCancel(e => !e.retrigger && this.widget.hideWidget()));
this.widget = instantiationService.createInstance(SuggestWidget, this.editor); this.widget = instantiationService.createInstance(SuggestWidget, this.editor);
this.toDispose.push(this.widget.onDidSelect(this.onDidSelectItem, this)); this.toDispose.push(this.widget.onDidSelect(this.onDidSelectItem, this));
@ -87,7 +86,7 @@ export class SuggestController implements IEditorContribution {
cancelSuggestWidget(): void { cancelSuggestWidget(): void {
if (this.widget) { if (this.widget) {
this.widget.cancel(); this.widget.hideDetailsOrHideWidget();
} }
} }

View file

@ -24,7 +24,6 @@ import { IConfigurationChangedEvent } from 'vs/editor/common/editorCommon';
import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from 'vs/editor/browser/editorBrowser';
import { Context as SuggestContext } from '../common/suggest'; import { Context as SuggestContext } from '../common/suggest';
import { CompletionItem, CompletionModel } from '../common/completionModel'; import { CompletionItem, CompletionModel } from '../common/completionModel';
import { ICancelEvent, ISuggestEvent, ITriggerEvent } from '../common/suggestModel';
import { alert } from 'vs/base/browser/ui/aria/aria'; import { alert } from 'vs/base/browser/ui/aria/aria';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
@ -532,12 +531,12 @@ export class SuggestWidget implements IContentWidget, IDisposable {
return this.onDidSelectEmitter.event; return this.onDidSelectEmitter.event;
} }
showTriggered(e: ITriggerEvent) { showTriggered(auto: boolean) {
if (this.state !== State.Hidden) { if (this.state !== State.Hidden) {
return; return;
} }
this.isAuto = !!e.auto; this.isAuto = !!auto;
if (!this.isAuto) { if (!this.isAuto) {
this.loadingTimeout = setTimeout(() => { this.loadingTimeout = setTimeout(() => {
@ -547,15 +546,15 @@ export class SuggestWidget implements IContentWidget, IDisposable {
} }
} }
showSuggestions(e: ISuggestEvent): void { showSuggestions(completionModel: CompletionModel, isFrozen: boolean, isAuto: boolean): void {
if (this.loadingTimeout) { if (this.loadingTimeout) {
clearTimeout(this.loadingTimeout); clearTimeout(this.loadingTimeout);
this.loadingTimeout = null; this.loadingTimeout = null;
} }
this.completionModel = e.completionModel; this.completionModel = completionModel;
if (e.isFrozen && this.state !== State.Empty) { if (isFrozen && this.state !== State.Empty) {
this.setState(State.Frozen); this.setState(State.Frozen);
return; return;
} }
@ -566,7 +565,7 @@ export class SuggestWidget implements IContentWidget, IDisposable {
this.suggestWidgetMultipleSuggestions.set(visibleCount > 1); this.suggestWidgetMultipleSuggestions.set(visibleCount > 1);
if (isEmpty) { if (isEmpty) {
if (e.auto) { if (isAuto) {
this.setState(State.Hidden); this.setState(State.Hidden);
} else { } else {
this.setState(State.Empty); this.setState(State.Empty);
@ -595,22 +594,11 @@ export class SuggestWidget implements IContentWidget, IDisposable {
suggestionCount: visibleCount, suggestionCount: visibleCount,
snippetCount, snippetCount,
textCount, textCount,
wasAutomaticallyTriggered: !!e.auto wasAutomaticallyTriggered: !!isAuto
}); });
} }
} }
showDidCancel(e: ICancelEvent) {
if (this.loadingTimeout) {
clearTimeout(this.loadingTimeout);
this.loadingTimeout = null;
}
if (!e.retrigger) {
this.setState(State.Hidden);
}
}
selectNextPage(): boolean { selectNextPage(): boolean {
switch (this.state) { switch (this.state) {
case State.Hidden: case State.Hidden:
@ -715,11 +703,16 @@ export class SuggestWidget implements IContentWidget, IDisposable {
removeClass(this.element, 'visible'); removeClass(this.element, 'visible');
} }
cancel(): void { hideWidget(): void {
clearTimeout(this.loadingTimeout);
this.setState(State.Hidden);
}
hideDetailsOrHideWidget(): void {
if (this.state === State.Details) { if (this.state === State.Details) {
this.toggleDetails(); this.toggleDetails();
} else { } else {
this.showDidCancel({ retrigger: false }); this.hideWidget();
} }
} }