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 widget: SuggestWidget;
private toDispose: IDisposable[] = [];
constructor(
@ -36,9 +35,9 @@ export class SuggestController implements IEditorContribution {
@IInstantiationService instantiationService: IInstantiationService
) {
this.model = new SuggestModel(this.editor);
this.toDispose.push(this.model.onDidTrigger(e => this.widget.showTriggered(e)));
this.toDispose.push(this.model.onDidSuggest(e => this.widget.showSuggestions(e)));
this.toDispose.push(this.model.onDidCancel(e => this.widget.showDidCancel(e)));
this.toDispose.push(this.model.onDidTrigger(e => this.widget.showTriggered(e.auto)));
this.toDispose.push(this.model.onDidSuggest(e => this.widget.showSuggestions(e.completionModel, e.isFrozen, e.auto)));
this.toDispose.push(this.model.onDidCancel(e => !e.retrigger && this.widget.hideWidget()));
this.widget = instantiationService.createInstance(SuggestWidget, this.editor);
this.toDispose.push(this.widget.onDidSelect(this.onDidSelectItem, this));
@ -87,7 +86,7 @@ export class SuggestController implements IEditorContribution {
cancelSuggestWidget(): void {
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 { Context as SuggestContext } from '../common/suggest';
import { CompletionItem, CompletionModel } from '../common/completionModel';
import { ICancelEvent, ISuggestEvent, ITriggerEvent } from '../common/suggestModel';
import { alert } from 'vs/base/browser/ui/aria/aria';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
@ -532,12 +531,12 @@ export class SuggestWidget implements IContentWidget, IDisposable {
return this.onDidSelectEmitter.event;
}
showTriggered(e: ITriggerEvent) {
showTriggered(auto: boolean) {
if (this.state !== State.Hidden) {
return;
}
this.isAuto = !!e.auto;
this.isAuto = !!auto;
if (!this.isAuto) {
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) {
clearTimeout(this.loadingTimeout);
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);
return;
}
@ -566,7 +565,7 @@ export class SuggestWidget implements IContentWidget, IDisposable {
this.suggestWidgetMultipleSuggestions.set(visibleCount > 1);
if (isEmpty) {
if (e.auto) {
if (isAuto) {
this.setState(State.Hidden);
} else {
this.setState(State.Empty);
@ -595,22 +594,11 @@ export class SuggestWidget implements IContentWidget, IDisposable {
suggestionCount: visibleCount,
snippetCount,
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 {
switch (this.state) {
case State.Hidden:
@ -715,11 +703,16 @@ export class SuggestWidget implements IContentWidget, IDisposable {
removeClass(this.element, 'visible');
}
cancel(): void {
hideWidget(): void {
clearTimeout(this.loadingTimeout);
this.setState(State.Hidden);
}
hideDetailsOrHideWidget(): void {
if (this.state === State.Details) {
this.toggleDetails();
} else {
this.showDidCancel({ retrigger: false });
this.hideWidget();
}
}