提交 73ee1f80 编写于 作者: J Joao Moreno

list: reveal

上级 f53afa53
......@@ -135,10 +135,22 @@ export class ListView<T> implements IScrollable {
return this.items.length;
}
get height(): number {
return this.renderHeight;
}
element(index: number): T {
return this.items[index].element;
}
elementHeight(index: number): number {
return this.items[index].size;
}
elementTop(index: number): number {
return this.rangeMap.positionAt(index);
}
layout(height?: number): void {
this.setRenderHeight(height || DOM.getContentHeight(this.domNode));
this.setScrollTop(this.renderTop);
......@@ -214,7 +226,7 @@ export class ListView<T> implements IScrollable {
}
const renderer = this.renderers[item.templateId];
item.row.domNode.style.top = `${ this.rangeMap.positionAt(index) }px`;
item.row.domNode.style.top = `${ this.elementTop(index) }px`;
item.row.domNode.style.height = `${ item.size }px`;
renderer.renderElement(item.element, index, item.row.templateData);
}
......
......@@ -5,6 +5,7 @@
import 'vs/css!./list';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { isNumber } from 'vs/base/common/types';
import { toggleClass } from 'vs/base/browser/dom';
import { IDelegate, IRenderer } from './list';
import { ListView } from './listView';
......@@ -144,6 +145,30 @@ export class List<T> implements IDisposable {
indexes.forEach(i => this.view.splice(i, 1, this.view.element(i)));
}
reveal(index: number, relativeTop?: number): void {
const scrollTop = this.view.getScrollTop();
const elementTop = this.view.elementTop(index);
const elementHeight = this.view.elementHeight(index);
if (isNumber(relativeTop)) {
relativeTop = relativeTop < 0 ? 0 : relativeTop;
relativeTop = relativeTop > 1 ? 1 : relativeTop;
// y = mx + b
var m = elementHeight - this.view.height;
this.view.setScrollTop(m * relativeTop + elementTop);
} else {
var viewItemBottom = elementTop + elementHeight;
var wrapperBottom = scrollTop + this.view.height;
if (elementTop < scrollTop) {
this.view.setScrollTop(elementTop);
} else if (viewItemBottom >= wrapperBottom) {
this.view.setScrollTop(viewItemBottom - this.view.height);
}
}
}
dispose(): void {
this.view = dispose(this.view);
}
......
......@@ -771,9 +771,9 @@ export class SuggestWidget implements EditorBrowser.IContentWidget, IDisposable
this.telemetryData.hintLength = currentWord.length;
this.list.splice(0, this.list.length, ...this.completionModel.items);
this.list.setFocus(bestSuggestionIndex);
// console.log(bestSuggestion.suggestion.label)
this.list.reveal(bestSuggestionIndex, 0);
this.setState(State.Open);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册