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

splitview: use preferred size in onDidChange

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