提交 b28471d1 编写于 作者: J Joao Moreno

splitview: use preferred size in onDidChange

上级 1804467c
......@@ -35,8 +35,8 @@ export abstract class Panel implements IView {
private static HEADER_SIZE = 22;
protected _expanded: boolean;
private expandedSize: number | undefined = undefined;
private _headerVisible = true;
private _onDidChange = new Emitter<void>();
private _minimumBodySize: number;
private _maximumBodySize: number;
private ariaHeaderLabel: string;
......@@ -46,6 +46,9 @@ export abstract class Panel implements IView {
private header: HTMLElement;
protected disposables: IDisposable[] = [];
private _onDidChange = new Emitter<number | undefined>();
readonly onDidChange: Event<number | undefined> = this._onDidChange.event;
get draggableElement(): HTMLElement {
return this.header;
}
......@@ -97,8 +100,6 @@ export abstract class Panel implements IView {
return headerSize + maximumBodySize;
}
readonly onDidChange: Event<void> = this._onDidChange.event;
constructor(options: IPanelOptions = {}) {
this._expanded = typeof options.expanded === 'undefined' ? true : !!options.expanded;
this.ariaHeaderLabel = options.ariaHeaderLabel || '';
......@@ -117,7 +118,7 @@ export abstract class Panel implements IView {
this._expanded = !!expanded;
this.updateHeader();
this._onDidChange.fire();
this._onDidChange.fire(expanded ? this.expandedSize : undefined);
}
get headerVisible(): boolean {
......@@ -179,6 +180,10 @@ export abstract class Panel implements IView {
layout(size: number): void {
const headerSize = this.headerVisible ? Panel.HEADER_SIZE : 0;
this.layoutBody(size - headerSize);
if (this.isExpanded()) {
this.expandedSize = size;
}
}
style(styles: IPanelStyles): void {
......
......@@ -22,7 +22,7 @@ export interface ISplitViewOptions {
export interface IView {
readonly minimumSize: number;
readonly maximumSize: number;
readonly onDidChange: Event<void>;
readonly onDidChange: Event<number | undefined>;
render(container: HTMLElement, orientation: Orientation): void;
layout(size: number, orientation: Orientation): void;
}
......@@ -87,7 +87,7 @@ export class SplitView implements IDisposable {
this.el.insertBefore(container, this.el.children.item(index));
}
const onChangeDisposable = mapEvent(view.onDidChange, () => item)(this.onViewChange, this);
const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));
const containerDisposable = toDisposable(() => this.el.removeChild(container));
const disposable = combinedDisposable([onChangeDisposable, containerDisposable]);
......@@ -207,14 +207,15 @@ export class SplitView implements IDisposable {
this.resize(index, delta, sizes);
}
private onViewChange(item: IViewItem): void {
private onViewChange(item: IViewItem, size: number | undefined): void {
const index = this.viewItems.indexOf(item);
if (index < 0 || index >= this.viewItems.length) {
return;
}
const size = clamp(item.size, item.view.minimumSize, item.view.maximumSize);
size = typeof size === 'number' ? size : item.size;
size = clamp(size, item.view.minimumSize, item.view.maximumSize);
item.size = size;
this.relayout();
}
......
......@@ -10,7 +10,7 @@ import { Sash } from 'vs/base/browser/ui/sash/sash';
class TestView implements IView {
private _onDidChange = new Emitter<void>();
private _onDidChange = new Emitter<number | undefined>();
readonly onDidChange = this._onDidChange.event;
get minimumSize(): number { return this._minimumSize; }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册