Path: blob/main/src/vs/base/test/browser/ui/grid/util.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import assert from 'assert';6import { IView } from '../../../../browser/ui/grid/grid.js';7import { GridNode, isGridBranchNode } from '../../../../browser/ui/grid/gridview.js';8import { Emitter, Event } from '../../../../common/event.js';910export class TestView implements IView {1112private readonly _onDidChange = new Emitter<{ width: number; height: number } | undefined>();13readonly onDidChange = this._onDidChange.event;1415get minimumWidth(): number { return this._minimumWidth; }16set minimumWidth(size: number) { this._minimumWidth = size; this._onDidChange.fire(undefined); }1718get maximumWidth(): number { return this._maximumWidth; }19set maximumWidth(size: number) { this._maximumWidth = size; this._onDidChange.fire(undefined); }2021get minimumHeight(): number { return this._minimumHeight; }22set minimumHeight(size: number) { this._minimumHeight = size; this._onDidChange.fire(undefined); }2324get maximumHeight(): number { return this._maximumHeight; }25set maximumHeight(size: number) { this._maximumHeight = size; this._onDidChange.fire(undefined); }2627private _element: HTMLElement = document.createElement('div');28get element(): HTMLElement { this._onDidGetElement.fire(); return this._element; }2930private readonly _onDidGetElement = new Emitter<void>();31readonly onDidGetElement = this._onDidGetElement.event;3233private _width = 0;34get width(): number { return this._width; }3536private _height = 0;37get height(): number { return this._height; }3839private _top = 0;40get top(): number { return this._top; }4142private _left = 0;43get left(): number { return this._left; }4445get size(): [number, number] { return [this.width, this.height]; }4647private readonly _onDidLayout = new Emitter<{ width: number; height: number; top: number; left: number }>();48readonly onDidLayout: Event<{ width: number; height: number; top: number; left: number }> = this._onDidLayout.event;4950private readonly _onDidFocus = new Emitter<void>();51readonly onDidFocus: Event<void> = this._onDidFocus.event;5253constructor(54private _minimumWidth: number,55private _maximumWidth: number,56private _minimumHeight: number,57private _maximumHeight: number58) {59assert(_minimumWidth <= _maximumWidth, 'gridview view minimum width must be <= maximum width');60assert(_minimumHeight <= _maximumHeight, 'gridview view minimum height must be <= maximum height');61}6263layout(width: number, height: number, top: number, left: number): void {64this._width = width;65this._height = height;66this._top = top;67this._left = left;68this._onDidLayout.fire({ width, height, top, left });69}7071focus(): void {72this._onDidFocus.fire();73}7475dispose(): void {76this._onDidChange.dispose();77this._onDidGetElement.dispose();78this._onDidLayout.dispose();79this._onDidFocus.dispose();80}81}8283export function nodesToArrays(node: GridNode): any {84if (isGridBranchNode(node)) {85return node.children.map(nodesToArrays);86} else {87return node.view;88}89}909192