From b28471d10c6ebf6355402a78f667e8c63388ec61 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Thu, 21 Sep 2017 09:10:26 +0200 Subject: [PATCH] splitview: use preferred size in onDidChange --- src/vs/base/browser/ui/splitview/panelview.ts | 13 +++++++++---- src/vs/base/browser/ui/splitview/splitview2.ts | 9 +++++---- .../test/browser/ui/splitview/splitview.test.ts | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/vs/base/browser/ui/splitview/panelview.ts b/src/vs/base/browser/ui/splitview/panelview.ts index 76c482832cf..8f1bccaf430 100644 --- a/src/vs/base/browser/ui/splitview/panelview.ts +++ b/src/vs/base/browser/ui/splitview/panelview.ts @@ -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(); 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(); + readonly onDidChange: Event = 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 = 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 { diff --git a/src/vs/base/browser/ui/splitview/splitview2.ts b/src/vs/base/browser/ui/splitview/splitview2.ts index 95d0593fd79..b9abcec1cb7 100644 --- a/src/vs/base/browser/ui/splitview/splitview2.ts +++ b/src/vs/base/browser/ui/splitview/splitview2.ts @@ -22,7 +22,7 @@ export interface ISplitViewOptions { export interface IView { readonly minimumSize: number; readonly maximumSize: number; - readonly onDidChange: Event; + readonly onDidChange: Event; 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(); } diff --git a/src/vs/base/test/browser/ui/splitview/splitview.test.ts b/src/vs/base/test/browser/ui/splitview/splitview.test.ts index 07fb5816104..b7e97d8f890 100644 --- a/src/vs/base/test/browser/ui/splitview/splitview.test.ts +++ b/src/vs/base/test/browser/ui/splitview/splitview.test.ts @@ -10,7 +10,7 @@ import { Sash } from 'vs/base/browser/ui/sash/sash'; class TestView implements IView { - private _onDidChange = new Emitter(); + private _onDidChange = new Emitter(); readonly onDidChange = this._onDidChange.event; get minimumSize(): number { return this._minimumSize; } -- GitLab