dockview-core 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/cjs/api/component.api.d.ts +145 -0
- package/dist/cjs/api/component.api.js +579 -0
- package/dist/cjs/api/component.api.js.map +1 -0
- package/dist/cjs/api/dockviewPanelApi.d.ts +34 -0
- package/dist/cjs/api/dockviewPanelApi.js +84 -0
- package/dist/cjs/api/dockviewPanelApi.js.map +1 -0
- package/dist/cjs/api/gridviewPanelApi.d.ts +37 -0
- package/dist/cjs/api/gridviewPanelApi.js +48 -0
- package/dist/cjs/api/gridviewPanelApi.js.map +1 -0
- package/dist/cjs/api/panelApi.d.ts +88 -0
- package/dist/cjs/api/panelApi.js +138 -0
- package/dist/cjs/api/panelApi.js.map +1 -0
- package/dist/cjs/api/paneviewPanelApi.d.ts +26 -0
- package/dist/cjs/api/paneviewPanelApi.js +58 -0
- package/dist/cjs/api/paneviewPanelApi.js.map +1 -0
- package/dist/cjs/api/splitviewPanelApi.d.ts +32 -0
- package/dist/cjs/api/splitviewPanelApi.js +48 -0
- package/dist/cjs/api/splitviewPanelApi.js.map +1 -0
- package/dist/cjs/array.d.ts +12 -0
- package/dist/cjs/array.js +59 -0
- package/dist/cjs/array.js.map +1 -0
- package/dist/cjs/dnd/abstractDragHandler.d.ts +11 -0
- package/dist/cjs/dnd/abstractDragHandler.js +126 -0
- package/dist/cjs/dnd/abstractDragHandler.js.map +1 -0
- package/dist/cjs/dnd/dataTransfer.d.ts +31 -0
- package/dist/cjs/dnd/dataTransfer.js +101 -0
- package/dist/cjs/dnd/dataTransfer.js.map +1 -0
- package/dist/cjs/dnd/dnd.d.ts +27 -0
- package/dist/cjs/dnd/dnd.js +60 -0
- package/dist/cjs/dnd/dnd.js.map +1 -0
- package/dist/cjs/dnd/droptarget.d.ts +42 -0
- package/dist/cjs/dnd/droptarget.js +281 -0
- package/dist/cjs/dnd/droptarget.js.map +1 -0
- package/dist/cjs/dnd/ghost.d.ts +1 -0
- package/dist/cjs/dnd/ghost.js +16 -0
- package/dist/cjs/dnd/ghost.js.map +1 -0
- package/dist/cjs/dnd/groupDragHandler.d.ts +11 -0
- package/dist/cjs/dnd/groupDragHandler.js +62 -0
- package/dist/cjs/dnd/groupDragHandler.js.map +1 -0
- package/dist/cjs/dockview/components/panel/content.d.ts +30 -0
- package/dist/cjs/dockview/components/panel/content.js +101 -0
- package/dist/cjs/dockview/components/panel/content.js.map +1 -0
- package/dist/cjs/dockview/components/tab/defaultTab.d.ts +21 -0
- package/dist/cjs/dockview/components/tab/defaultTab.js +106 -0
- package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -0
- package/dist/cjs/dockview/components/tab/tab.d.ts +31 -0
- package/dist/cjs/dockview/components/tab/tab.js +125 -0
- package/dist/cjs/dockview/components/tab/tab.js.map +1 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +63 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +248 -0
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -0
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +15 -0
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +74 -0
- package/dist/cjs/dockview/components/titlebar/voidContainer.js.map +1 -0
- package/dist/cjs/dockview/components/watermark/watermark.d.ts +18 -0
- package/dist/cjs/dockview/components/watermark/watermark.js +87 -0
- package/dist/cjs/dockview/components/watermark/watermark.js.map +1 -0
- package/dist/cjs/dockview/deserializer.d.ts +12 -0
- package/dist/cjs/dockview/deserializer.js +46 -0
- package/dist/cjs/dockview/deserializer.js.map +1 -0
- package/dist/cjs/dockview/dockviewComponent.d.ts +126 -0
- package/dist/cjs/dockview/dockviewComponent.js +772 -0
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -0
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +31 -0
- package/dist/cjs/dockview/dockviewGroupPanel.js +97 -0
- package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +176 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +579 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -0
- package/dist/cjs/dockview/dockviewPanel.d.ts +40 -0
- package/dist/cjs/dockview/dockviewPanel.js +150 -0
- package/dist/cjs/dockview/dockviewPanel.js.map +1 -0
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +34 -0
- package/dist/cjs/dockview/dockviewPanelModel.js +93 -0
- package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -0
- package/dist/cjs/dockview/options.d.ts +116 -0
- package/dist/cjs/dockview/options.js +32 -0
- package/dist/cjs/dockview/options.js.map +1 -0
- package/dist/cjs/dockview/types.d.ts +67 -0
- package/dist/cjs/dockview/types.js +11 -0
- package/dist/cjs/dockview/types.js.map +1 -0
- package/dist/cjs/dom.d.ts +14 -0
- package/dist/cjs/dom.js +183 -0
- package/dist/cjs/dom.js.map +1 -0
- package/dist/cjs/events.d.ts +30 -0
- package/dist/cjs/events.js +130 -0
- package/dist/cjs/events.js.map +1 -0
- package/dist/cjs/gridview/baseComponentGridview.d.ts +87 -0
- package/dist/cjs/gridview/baseComponentGridview.js +280 -0
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -0
- package/dist/cjs/gridview/basePanelView.d.ts +40 -0
- package/dist/cjs/gridview/basePanelView.js +124 -0
- package/dist/cjs/gridview/basePanelView.js.map +1 -0
- package/dist/cjs/gridview/branchNode.d.ts +49 -0
- package/dist/cjs/gridview/branchNode.js +343 -0
- package/dist/cjs/gridview/branchNode.js.map +1 -0
- package/dist/cjs/gridview/gridview.d.ts +133 -0
- package/dist/cjs/gridview/gridview.js +511 -0
- package/dist/cjs/gridview/gridview.js.map +1 -0
- package/dist/cjs/gridview/gridviewComponent.d.ts +80 -0
- package/dist/cjs/gridview/gridviewComponent.js +325 -0
- package/dist/cjs/gridview/gridviewComponent.js.map +1 -0
- package/dist/cjs/gridview/gridviewPanel.d.ts +65 -0
- package/dist/cjs/gridview/gridviewPanel.js +215 -0
- package/dist/cjs/gridview/gridviewPanel.js.map +1 -0
- package/dist/cjs/gridview/leafNode.d.ts +34 -0
- package/dist/cjs/gridview/leafNode.js +171 -0
- package/dist/cjs/gridview/leafNode.js.map +1 -0
- package/dist/cjs/gridview/options.d.ts +18 -0
- package/dist/cjs/gridview/options.js +3 -0
- package/dist/cjs/gridview/options.js.map +1 -0
- package/dist/cjs/gridview/types.d.ts +3 -0
- package/dist/cjs/gridview/types.js +3 -0
- package/dist/cjs/gridview/types.js.map +1 -0
- package/dist/cjs/index.d.ts +41 -0
- package/dist/cjs/index.js +64 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lifecycle.d.ts +22 -0
- package/dist/cjs/lifecycle.js +89 -0
- package/dist/cjs/lifecycle.js.map +1 -0
- package/dist/cjs/math.d.ts +5 -0
- package/dist/cjs/math.js +35 -0
- package/dist/cjs/math.js.map +1 -0
- package/dist/cjs/panel/componentFactory.d.ts +10 -0
- package/dist/cjs/panel/componentFactory.js +31 -0
- package/dist/cjs/panel/componentFactory.js.map +1 -0
- package/dist/cjs/panel/types.d.ts +33 -0
- package/dist/cjs/panel/types.js +3 -0
- package/dist/cjs/panel/types.js.map +1 -0
- package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -0
- package/dist/cjs/paneview/defaultPaneviewHeader.js +91 -0
- package/dist/cjs/paneview/defaultPaneviewHeader.js.map +1 -0
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +21 -0
- package/dist/cjs/paneview/draggablePaneviewPanel.js +132 -0
- package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -0
- package/dist/cjs/paneview/options.d.ts +27 -0
- package/dist/cjs/paneview/options.js +3 -0
- package/dist/cjs/paneview/options.js.map +1 -0
- package/dist/cjs/paneview/paneview.d.ts +40 -0
- package/dist/cjs/paneview/paneview.js +202 -0
- package/dist/cjs/paneview/paneview.js.map +1 -0
- package/dist/cjs/paneview/paneviewComponent.d.ts +129 -0
- package/dist/cjs/paneview/paneviewComponent.js +395 -0
- package/dist/cjs/paneview/paneviewComponent.js.map +1 -0
- package/dist/cjs/paneview/paneviewPanel.d.ts +92 -0
- package/dist/cjs/paneview/paneviewPanel.js +276 -0
- package/dist/cjs/paneview/paneviewPanel.js.map +1 -0
- package/dist/cjs/splitview/options.d.ts +26 -0
- package/dist/cjs/splitview/options.js +3 -0
- package/dist/cjs/splitview/options.js.map +1 -0
- package/dist/cjs/splitview/splitview.d.ts +127 -0
- package/dist/cjs/splitview/splitview.js +909 -0
- package/dist/cjs/splitview/splitview.js.map +1 -0
- package/dist/cjs/splitview/splitviewComponent.d.ts +101 -0
- package/dist/cjs/splitview/splitviewComponent.js +374 -0
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -0
- package/dist/cjs/splitview/splitviewPanel.d.ts +45 -0
- package/dist/cjs/splitview/splitviewPanel.js +180 -0
- package/dist/cjs/splitview/splitviewPanel.js.map +1 -0
- package/dist/cjs/splitview/viewItem.d.ts +25 -0
- package/dist/cjs/splitview/viewItem.js +120 -0
- package/dist/cjs/splitview/viewItem.js.map +1 -0
- package/dist/cjs/svg.d.ts +3 -0
- package/dist/cjs/svg.js +44 -0
- package/dist/cjs/svg.js.map +1 -0
- package/dist/cjs/types.d.ts +2 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/dockview-core.amd.js +6492 -0
- package/dist/dockview-core.amd.min.js +7 -0
- package/dist/dockview-core.amd.min.noStyle.js +7 -0
- package/dist/dockview-core.amd.noStyle.js +6462 -0
- package/dist/dockview-core.cjs.js +6490 -0
- package/dist/dockview-core.esm.js +6441 -0
- package/dist/dockview-core.esm.min.js +7 -0
- package/dist/dockview-core.js +6496 -0
- package/dist/dockview-core.min.js +7 -0
- package/dist/dockview-core.min.noStyle.js +7 -0
- package/dist/dockview-core.noStyle.js +6466 -0
- package/dist/esm/api/component.api.d.ts +145 -0
- package/dist/esm/api/component.api.js +329 -0
- package/dist/esm/api/dockviewPanelApi.d.ts +34 -0
- package/dist/esm/api/dockviewPanelApi.js +48 -0
- package/dist/esm/api/gridviewPanelApi.d.ts +37 -0
- package/dist/esm/api/gridviewPanelApi.js +25 -0
- package/dist/esm/api/panelApi.d.ts +88 -0
- package/dist/esm/api/panelApi.js +95 -0
- package/dist/esm/api/paneviewPanelApi.d.ts +26 -0
- package/dist/esm/api/paneviewPanelApi.js +27 -0
- package/dist/esm/api/splitviewPanelApi.d.ts +32 -0
- package/dist/esm/api/splitviewPanelApi.js +25 -0
- package/dist/esm/array.d.ts +12 -0
- package/dist/esm/array.js +49 -0
- package/dist/esm/dnd/abstractDragHandler.d.ts +11 -0
- package/dist/esm/dnd/abstractDragHandler.js +47 -0
- package/dist/esm/dnd/dataTransfer.d.ts +31 -0
- package/dist/esm/dnd/dataTransfer.js +69 -0
- package/dist/esm/dnd/dnd.d.ts +27 -0
- package/dist/esm/dnd/dnd.js +36 -0
- package/dist/esm/dnd/droptarget.d.ts +42 -0
- package/dist/esm/dnd/droptarget.js +250 -0
- package/dist/esm/dnd/ghost.d.ts +1 -0
- package/dist/esm/dnd/ghost.js +11 -0
- package/dist/esm/dnd/groupDragHandler.d.ts +11 -0
- package/dist/esm/dnd/groupDragHandler.js +38 -0
- package/dist/esm/dockview/components/panel/content.d.ts +30 -0
- package/dist/esm/dockview/components/panel/content.js +73 -0
- package/dist/esm/dockview/components/tab/defaultTab.d.ts +21 -0
- package/dist/esm/dockview/components/tab/defaultTab.js +67 -0
- package/dist/esm/dockview/components/tab/tab.d.ts +31 -0
- package/dist/esm/dockview/components/tab/tab.js +94 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +63 -0
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +179 -0
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +15 -0
- package/dist/esm/dockview/components/titlebar/voidContainer.js +47 -0
- package/dist/esm/dockview/components/watermark/watermark.d.ts +18 -0
- package/dist/esm/dockview/components/watermark/watermark.js +60 -0
- package/dist/esm/dockview/deserializer.d.ts +12 -0
- package/dist/esm/dockview/deserializer.js +40 -0
- package/dist/esm/dockview/dockviewComponent.d.ts +126 -0
- package/dist/esm/dockview/dockviewComponent.js +612 -0
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +31 -0
- package/dist/esm/dockview/dockviewGroupPanel.js +50 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +176 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.js +449 -0
- package/dist/esm/dockview/dockviewPanel.d.ts +40 -0
- package/dist/esm/dockview/dockviewPanel.js +104 -0
- package/dist/esm/dockview/dockviewPanelModel.d.ts +34 -0
- package/dist/esm/dockview/dockviewPanelModel.js +68 -0
- package/dist/esm/dockview/options.d.ts +116 -0
- package/dist/esm/dockview/options.js +24 -0
- package/dist/esm/dockview/types.d.ts +67 -0
- package/dist/esm/dockview/types.js +7 -0
- package/dist/esm/dom.d.ts +14 -0
- package/dist/esm/dom.js +113 -0
- package/dist/esm/events.d.ts +30 -0
- package/dist/esm/events.js +88 -0
- package/dist/esm/gridview/baseComponentGridview.d.ts +87 -0
- package/dist/esm/gridview/baseComponentGridview.js +189 -0
- package/dist/esm/gridview/basePanelView.d.ts +40 -0
- package/dist/esm/gridview/basePanelView.js +74 -0
- package/dist/esm/gridview/branchNode.d.ts +49 -0
- package/dist/esm/gridview/branchNode.js +218 -0
- package/dist/esm/gridview/gridview.d.ts +133 -0
- package/dist/esm/gridview/gridview.js +423 -0
- package/dist/esm/gridview/gridviewComponent.d.ts +80 -0
- package/dist/esm/gridview/gridviewComponent.js +237 -0
- package/dist/esm/gridview/gridviewPanel.d.ts +65 -0
- package/dist/esm/gridview/gridviewPanel.js +151 -0
- package/dist/esm/gridview/leafNode.d.ts +34 -0
- package/dist/esm/gridview/leafNode.js +103 -0
- package/dist/esm/gridview/options.d.ts +18 -0
- package/dist/esm/gridview/options.js +1 -0
- package/dist/esm/gridview/types.d.ts +3 -0
- package/dist/esm/gridview/types.js +1 -0
- package/dist/esm/index.d.ts +41 -0
- package/dist/esm/index.js +35 -0
- package/dist/esm/lifecycle.d.ts +22 -0
- package/dist/esm/lifecycle.js +39 -0
- package/dist/esm/math.d.ts +5 -0
- package/dist/esm/math.js +28 -0
- package/dist/esm/panel/componentFactory.d.ts +10 -0
- package/dist/esm/panel/componentFactory.js +24 -0
- package/dist/esm/panel/types.d.ts +33 -0
- package/dist/esm/panel/types.js +1 -0
- package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -0
- package/dist/esm/paneview/defaultPaneviewHeader.js +63 -0
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +21 -0
- package/dist/esm/paneview/draggablePaneviewPanel.js +92 -0
- package/dist/esm/paneview/options.d.ts +27 -0
- package/dist/esm/paneview/options.js +1 -0
- package/dist/esm/paneview/paneview.d.ts +40 -0
- package/dist/esm/paneview/paneview.js +145 -0
- package/dist/esm/paneview/paneviewComponent.d.ts +129 -0
- package/dist/esm/paneview/paneviewComponent.js +270 -0
- package/dist/esm/paneview/paneviewPanel.d.ts +92 -0
- package/dist/esm/paneview/paneviewPanel.js +192 -0
- package/dist/esm/splitview/options.d.ts +26 -0
- package/dist/esm/splitview/options.js +1 -0
- package/dist/esm/splitview/splitview.d.ts +127 -0
- package/dist/esm/splitview/splitview.js +689 -0
- package/dist/esm/splitview/splitviewComponent.d.ts +101 -0
- package/dist/esm/splitview/splitviewComponent.js +249 -0
- package/dist/esm/splitview/splitviewPanel.d.ts +45 -0
- package/dist/esm/splitview/splitviewPanel.js +108 -0
- package/dist/esm/splitview/viewItem.d.ts +25 -0
- package/dist/esm/splitview/viewItem.js +74 -0
- package/dist/esm/svg.d.ts +3 -0
- package/dist/esm/svg.js +31 -0
- package/dist/esm/types.d.ts +2 -0
- package/dist/esm/types.js +1 -0
- package/dist/styles/dockview.css +615 -0
- package/package.json +68 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Emitter, Event, TickDelayedEvent } from '../events';
|
|
2
|
+
import { Gridview, IGridView } from './gridview';
|
|
3
|
+
import { Position } from '../dnd/droptarget';
|
|
4
|
+
import { CompositeDisposable, IValueDisposable } from '../lifecycle';
|
|
5
|
+
import { ISplitviewStyles, Orientation } from '../splitview/splitview';
|
|
6
|
+
import { IPanel } from '../panel/types';
|
|
7
|
+
import { MovementOptions2 } from '../dockview/options';
|
|
8
|
+
export type Direction = 'left' | 'right' | 'above' | 'below' | 'within';
|
|
9
|
+
export declare function toTarget(direction: Direction): Position;
|
|
10
|
+
export interface BaseGridOptions {
|
|
11
|
+
readonly proportionalLayout: boolean;
|
|
12
|
+
readonly orientation: Orientation;
|
|
13
|
+
readonly styles?: ISplitviewStyles;
|
|
14
|
+
}
|
|
15
|
+
export interface IGridPanelView extends IGridView, IPanel {
|
|
16
|
+
setActive(isActive: boolean): void;
|
|
17
|
+
readonly isActive: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface IBaseGrid<T extends IGridPanelView> {
|
|
20
|
+
readonly element: HTMLElement;
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly width: number;
|
|
23
|
+
readonly height: number;
|
|
24
|
+
readonly minimumHeight: number;
|
|
25
|
+
readonly maximumHeight: number;
|
|
26
|
+
readonly minimumWidth: number;
|
|
27
|
+
readonly maximumWidth: number;
|
|
28
|
+
readonly activeGroup: T | undefined;
|
|
29
|
+
readonly size: number;
|
|
30
|
+
readonly groups: T[];
|
|
31
|
+
readonly onDidLayoutChange: Event<void>;
|
|
32
|
+
readonly onDidRemoveGroup: Event<T>;
|
|
33
|
+
readonly onDidAddGroup: Event<T>;
|
|
34
|
+
readonly onDidActiveGroupChange: Event<T | undefined>;
|
|
35
|
+
getPanel(id: string): T | undefined;
|
|
36
|
+
toJSON(): object;
|
|
37
|
+
fromJSON(data: any): void;
|
|
38
|
+
clear(): void;
|
|
39
|
+
layout(width: number, height: number, force?: boolean): void;
|
|
40
|
+
setVisible(panel: T, visible: boolean): void;
|
|
41
|
+
isVisible(panel: T): boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare abstract class BaseGrid<T extends IGridPanelView> extends CompositeDisposable implements IBaseGrid<T> {
|
|
44
|
+
private readonly _element;
|
|
45
|
+
private readonly _id;
|
|
46
|
+
protected readonly _groups: Map<string, IValueDisposable<T>>;
|
|
47
|
+
protected readonly gridview: Gridview;
|
|
48
|
+
protected _activeGroup: T | undefined;
|
|
49
|
+
private _onDidLayoutChange;
|
|
50
|
+
readonly onDidLayoutChange: Event<void>;
|
|
51
|
+
private readonly _onDidRemoveGroup;
|
|
52
|
+
readonly onDidRemoveGroup: Event<T>;
|
|
53
|
+
protected readonly _onDidAddGroup: Emitter<T>;
|
|
54
|
+
readonly onDidAddGroup: Event<T>;
|
|
55
|
+
private readonly _onDidActiveGroupChange;
|
|
56
|
+
readonly onDidActiveGroupChange: Event<T | undefined>;
|
|
57
|
+
protected readonly _bufferOnDidLayoutChange: TickDelayedEvent;
|
|
58
|
+
get id(): string;
|
|
59
|
+
get element(): HTMLElement;
|
|
60
|
+
get size(): number;
|
|
61
|
+
get groups(): T[];
|
|
62
|
+
get width(): number;
|
|
63
|
+
get height(): number;
|
|
64
|
+
get minimumHeight(): number;
|
|
65
|
+
get maximumHeight(): number;
|
|
66
|
+
get minimumWidth(): number;
|
|
67
|
+
get maximumWidth(): number;
|
|
68
|
+
get activeGroup(): T | undefined;
|
|
69
|
+
constructor(_element: HTMLElement, options: BaseGridOptions);
|
|
70
|
+
abstract toJSON(): object;
|
|
71
|
+
abstract fromJSON(data: any): void;
|
|
72
|
+
abstract clear(): void;
|
|
73
|
+
setVisible(panel: T, visible: boolean): void;
|
|
74
|
+
isVisible(panel: T): boolean;
|
|
75
|
+
protected doAddGroup(group: T, location?: number[], size?: number): void;
|
|
76
|
+
protected doRemoveGroup(group: T, options?: {
|
|
77
|
+
skipActive?: boolean;
|
|
78
|
+
skipDispose?: boolean;
|
|
79
|
+
}): T;
|
|
80
|
+
getPanel(id: string): T | undefined;
|
|
81
|
+
doSetGroupActive(group: T | undefined, skipFocus?: boolean): void;
|
|
82
|
+
removeGroup(group: T): void;
|
|
83
|
+
moveToNext(options?: MovementOptions2): void;
|
|
84
|
+
moveToPrevious(options?: MovementOptions2): void;
|
|
85
|
+
layout(width: number, height: number, forceResize?: boolean): void;
|
|
86
|
+
dispose(): void;
|
|
87
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { Emitter, Event, TickDelayedEvent } from '../events';
|
|
2
|
+
import { getGridLocation, Gridview } from './gridview';
|
|
3
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
4
|
+
import { sequentialNumberGenerator } from '../math';
|
|
5
|
+
import { Sizing } from '../splitview/splitview';
|
|
6
|
+
const nextLayoutId = sequentialNumberGenerator();
|
|
7
|
+
export function toTarget(direction) {
|
|
8
|
+
switch (direction) {
|
|
9
|
+
case 'left':
|
|
10
|
+
return 'left';
|
|
11
|
+
case 'right':
|
|
12
|
+
return 'right';
|
|
13
|
+
case 'above':
|
|
14
|
+
return 'top';
|
|
15
|
+
case 'below':
|
|
16
|
+
return 'bottom';
|
|
17
|
+
case 'within':
|
|
18
|
+
default:
|
|
19
|
+
return 'center';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class BaseGrid extends CompositeDisposable {
|
|
23
|
+
get id() {
|
|
24
|
+
return this._id;
|
|
25
|
+
}
|
|
26
|
+
get element() {
|
|
27
|
+
return this._element;
|
|
28
|
+
}
|
|
29
|
+
get size() {
|
|
30
|
+
return this._groups.size;
|
|
31
|
+
}
|
|
32
|
+
get groups() {
|
|
33
|
+
return Array.from(this._groups.values()).map((_) => _.value);
|
|
34
|
+
}
|
|
35
|
+
get width() {
|
|
36
|
+
return this.gridview.width;
|
|
37
|
+
}
|
|
38
|
+
get height() {
|
|
39
|
+
return this.gridview.height;
|
|
40
|
+
}
|
|
41
|
+
get minimumHeight() {
|
|
42
|
+
return this.gridview.minimumHeight;
|
|
43
|
+
}
|
|
44
|
+
get maximumHeight() {
|
|
45
|
+
return this.gridview.maximumHeight;
|
|
46
|
+
}
|
|
47
|
+
get minimumWidth() {
|
|
48
|
+
return this.gridview.minimumWidth;
|
|
49
|
+
}
|
|
50
|
+
get maximumWidth() {
|
|
51
|
+
return this.gridview.maximumWidth;
|
|
52
|
+
}
|
|
53
|
+
get activeGroup() {
|
|
54
|
+
return this._activeGroup;
|
|
55
|
+
}
|
|
56
|
+
constructor(_element, options) {
|
|
57
|
+
super();
|
|
58
|
+
this._element = _element;
|
|
59
|
+
this._id = nextLayoutId.next();
|
|
60
|
+
this._groups = new Map();
|
|
61
|
+
this._onDidLayoutChange = new Emitter();
|
|
62
|
+
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
63
|
+
this._onDidRemoveGroup = new Emitter();
|
|
64
|
+
this.onDidRemoveGroup = this._onDidRemoveGroup.event;
|
|
65
|
+
this._onDidAddGroup = new Emitter();
|
|
66
|
+
this.onDidAddGroup = this._onDidAddGroup.event;
|
|
67
|
+
this._onDidActiveGroupChange = new Emitter();
|
|
68
|
+
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
69
|
+
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
70
|
+
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
71
|
+
this.element.appendChild(this.gridview.element);
|
|
72
|
+
this.layout(0, 0, true); // set some elements height/widths
|
|
73
|
+
this.addDisposables(this.gridview.onDidChange(() => {
|
|
74
|
+
this._bufferOnDidLayoutChange.fire();
|
|
75
|
+
}));
|
|
76
|
+
this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
77
|
+
this._bufferOnDidLayoutChange.fire();
|
|
78
|
+
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
79
|
+
this._onDidLayoutChange.fire();
|
|
80
|
+
}), this._bufferOnDidLayoutChange);
|
|
81
|
+
}
|
|
82
|
+
setVisible(panel, visible) {
|
|
83
|
+
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
84
|
+
this._onDidLayoutChange.fire();
|
|
85
|
+
}
|
|
86
|
+
isVisible(panel) {
|
|
87
|
+
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
88
|
+
}
|
|
89
|
+
doAddGroup(group, location = [0], size) {
|
|
90
|
+
this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
|
|
91
|
+
this._onDidAddGroup.fire(group);
|
|
92
|
+
this.doSetGroupActive(group);
|
|
93
|
+
}
|
|
94
|
+
doRemoveGroup(group, options) {
|
|
95
|
+
if (!this._groups.has(group.id)) {
|
|
96
|
+
throw new Error('invalid operation');
|
|
97
|
+
}
|
|
98
|
+
const item = this._groups.get(group.id);
|
|
99
|
+
const view = this.gridview.remove(group, Sizing.Distribute);
|
|
100
|
+
if (item && !(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
101
|
+
item.disposable.dispose();
|
|
102
|
+
item.value.dispose();
|
|
103
|
+
this._groups.delete(group.id);
|
|
104
|
+
}
|
|
105
|
+
this._onDidRemoveGroup.fire(group);
|
|
106
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
107
|
+
const groups = Array.from(this._groups.values());
|
|
108
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
109
|
+
}
|
|
110
|
+
return view;
|
|
111
|
+
}
|
|
112
|
+
getPanel(id) {
|
|
113
|
+
var _a;
|
|
114
|
+
return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
115
|
+
}
|
|
116
|
+
doSetGroupActive(group, skipFocus) {
|
|
117
|
+
var _a, _b, _c;
|
|
118
|
+
if (this._activeGroup === group) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (this._activeGroup) {
|
|
122
|
+
this._activeGroup.setActive(false);
|
|
123
|
+
if (!skipFocus) {
|
|
124
|
+
(_b = (_a = this._activeGroup).focus) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (group) {
|
|
128
|
+
group.setActive(true);
|
|
129
|
+
if (!skipFocus) {
|
|
130
|
+
(_c = group.focus) === null || _c === void 0 ? void 0 : _c.call(group);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
this._activeGroup = group;
|
|
134
|
+
this._onDidActiveGroupChange.fire(group);
|
|
135
|
+
}
|
|
136
|
+
removeGroup(group) {
|
|
137
|
+
this.doRemoveGroup(group);
|
|
138
|
+
}
|
|
139
|
+
moveToNext(options) {
|
|
140
|
+
var _a;
|
|
141
|
+
if (!options) {
|
|
142
|
+
options = {};
|
|
143
|
+
}
|
|
144
|
+
if (!options.group) {
|
|
145
|
+
if (!this.activeGroup) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
options.group = this.activeGroup;
|
|
149
|
+
}
|
|
150
|
+
const location = getGridLocation(options.group.element);
|
|
151
|
+
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
152
|
+
this.doSetGroupActive(next);
|
|
153
|
+
}
|
|
154
|
+
moveToPrevious(options) {
|
|
155
|
+
var _a;
|
|
156
|
+
if (!options) {
|
|
157
|
+
options = {};
|
|
158
|
+
}
|
|
159
|
+
if (!options.group) {
|
|
160
|
+
if (!this.activeGroup) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
options.group = this.activeGroup;
|
|
164
|
+
}
|
|
165
|
+
const location = getGridLocation(options.group.element);
|
|
166
|
+
const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
167
|
+
this.doSetGroupActive(next);
|
|
168
|
+
}
|
|
169
|
+
layout(width, height, forceResize) {
|
|
170
|
+
const different = forceResize || width !== this.width || height !== this.height;
|
|
171
|
+
if (!different) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
this.element.style.height = `${height}px`;
|
|
175
|
+
this.element.style.width = `${width}px`;
|
|
176
|
+
this.gridview.layout(width, height);
|
|
177
|
+
}
|
|
178
|
+
dispose() {
|
|
179
|
+
super.dispose();
|
|
180
|
+
this._onDidActiveGroupChange.dispose();
|
|
181
|
+
this._onDidAddGroup.dispose();
|
|
182
|
+
this._onDidRemoveGroup.dispose();
|
|
183
|
+
this._onDidLayoutChange.dispose();
|
|
184
|
+
for (const group of this.groups) {
|
|
185
|
+
group.dispose();
|
|
186
|
+
}
|
|
187
|
+
this.gridview.dispose();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
2
|
+
import { IFrameworkPart, PanelUpdateEvent, PanelInitParameters, IPanel } from '../panel/types';
|
|
3
|
+
import { PanelApi, PanelApiImpl } from '../api/panelApi';
|
|
4
|
+
export interface BasePanelViewState {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
readonly component: string;
|
|
7
|
+
readonly params?: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
export interface BasePanelViewExported<T extends PanelApi> {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly api: T;
|
|
12
|
+
readonly width: number;
|
|
13
|
+
readonly height: number;
|
|
14
|
+
readonly params: Record<string, any> | undefined;
|
|
15
|
+
focus(): void;
|
|
16
|
+
toJSON(): object;
|
|
17
|
+
update(event: PanelUpdateEvent): void;
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class BasePanelView<T extends PanelApiImpl> extends CompositeDisposable implements IPanel, BasePanelViewExported<T> {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
protected readonly component: string;
|
|
22
|
+
readonly api: T;
|
|
23
|
+
private _height;
|
|
24
|
+
private _width;
|
|
25
|
+
private _element;
|
|
26
|
+
protected part?: IFrameworkPart;
|
|
27
|
+
protected _params?: PanelInitParameters;
|
|
28
|
+
protected abstract getComponent(): IFrameworkPart;
|
|
29
|
+
get element(): HTMLElement;
|
|
30
|
+
get width(): number;
|
|
31
|
+
get height(): number;
|
|
32
|
+
get params(): Record<string, any> | undefined;
|
|
33
|
+
constructor(id: string, component: string, api: T);
|
|
34
|
+
focus(): void;
|
|
35
|
+
layout(width: number, height: number): void;
|
|
36
|
+
init(parameters: PanelInitParameters): void;
|
|
37
|
+
update(event: PanelUpdateEvent): void;
|
|
38
|
+
toJSON(): BasePanelViewState;
|
|
39
|
+
dispose(): void;
|
|
40
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { trackFocus } from '../dom';
|
|
2
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
3
|
+
export class BasePanelView extends CompositeDisposable {
|
|
4
|
+
get element() {
|
|
5
|
+
return this._element;
|
|
6
|
+
}
|
|
7
|
+
get width() {
|
|
8
|
+
return this._width;
|
|
9
|
+
}
|
|
10
|
+
get height() {
|
|
11
|
+
return this._height;
|
|
12
|
+
}
|
|
13
|
+
get params() {
|
|
14
|
+
var _a;
|
|
15
|
+
return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
|
|
16
|
+
}
|
|
17
|
+
constructor(id, component, api) {
|
|
18
|
+
super();
|
|
19
|
+
this.id = id;
|
|
20
|
+
this.component = component;
|
|
21
|
+
this.api = api;
|
|
22
|
+
this._height = 0;
|
|
23
|
+
this._width = 0;
|
|
24
|
+
this._element = document.createElement('div');
|
|
25
|
+
this._element.tabIndex = -1;
|
|
26
|
+
this._element.style.outline = 'none';
|
|
27
|
+
this._element.style.height = '100%';
|
|
28
|
+
this._element.style.width = '100%';
|
|
29
|
+
this._element.style.overflow = 'hidden';
|
|
30
|
+
const { onDidFocus, onDidBlur } = trackFocus(this._element);
|
|
31
|
+
this.addDisposables(this.api, onDidFocus(() => {
|
|
32
|
+
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
33
|
+
}), onDidBlur(() => {
|
|
34
|
+
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
focus() {
|
|
38
|
+
this.api._onFocusEvent.fire();
|
|
39
|
+
}
|
|
40
|
+
layout(width, height) {
|
|
41
|
+
this._width = width;
|
|
42
|
+
this._height = height;
|
|
43
|
+
this.api._onDidDimensionChange.fire({ width, height });
|
|
44
|
+
if (this.part) {
|
|
45
|
+
if (this._params) {
|
|
46
|
+
this.part.update(this._params.params);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
init(parameters) {
|
|
51
|
+
this._params = parameters;
|
|
52
|
+
this.part = this.getComponent();
|
|
53
|
+
}
|
|
54
|
+
update(event) {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
this._params = Object.assign(Object.assign({}, this._params), { params: Object.assign(Object.assign({}, (_a = this._params) === null || _a === void 0 ? void 0 : _a.params), event.params) });
|
|
57
|
+
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
58
|
+
}
|
|
59
|
+
toJSON() {
|
|
60
|
+
var _a, _b;
|
|
61
|
+
const params = (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
|
|
62
|
+
return {
|
|
63
|
+
id: this.id,
|
|
64
|
+
component: this.component,
|
|
65
|
+
params: Object.keys(params).length > 0 ? params : undefined,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
dispose() {
|
|
69
|
+
var _a;
|
|
70
|
+
super.dispose();
|
|
71
|
+
this.api.dispose();
|
|
72
|
+
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { IView, Orientation, Sizing, LayoutPriority, ISplitviewStyles } from '../splitview/splitview';
|
|
2
|
+
import { Event } from '../events';
|
|
3
|
+
import { INodeDescriptor } from './gridview';
|
|
4
|
+
import { Node } from './types';
|
|
5
|
+
import { CompositeDisposable } from '../lifecycle';
|
|
6
|
+
export declare class BranchNode extends CompositeDisposable implements IView {
|
|
7
|
+
readonly orientation: Orientation;
|
|
8
|
+
readonly proportionalLayout: boolean;
|
|
9
|
+
readonly styles: ISplitviewStyles | undefined;
|
|
10
|
+
readonly element: HTMLElement;
|
|
11
|
+
private splitview;
|
|
12
|
+
private _orthogonalSize;
|
|
13
|
+
private _size;
|
|
14
|
+
private _childrenDisposable;
|
|
15
|
+
readonly children: Node[];
|
|
16
|
+
private readonly _onDidChange;
|
|
17
|
+
readonly onDidChange: Event<{
|
|
18
|
+
size?: number;
|
|
19
|
+
orthogonalSize?: number;
|
|
20
|
+
}>;
|
|
21
|
+
get width(): number;
|
|
22
|
+
get height(): number;
|
|
23
|
+
get minimumSize(): number;
|
|
24
|
+
get maximumSize(): number;
|
|
25
|
+
get minimumOrthogonalSize(): number;
|
|
26
|
+
get maximumOrthogonalSize(): number;
|
|
27
|
+
get orthogonalSize(): number;
|
|
28
|
+
get size(): number;
|
|
29
|
+
get minimumWidth(): number;
|
|
30
|
+
get minimumHeight(): number;
|
|
31
|
+
get maximumWidth(): number;
|
|
32
|
+
get maximumHeight(): number;
|
|
33
|
+
get priority(): LayoutPriority;
|
|
34
|
+
constructor(orientation: Orientation, proportionalLayout: boolean, styles: ISplitviewStyles | undefined, size: number, orthogonalSize: number, childDescriptors?: INodeDescriptor[]);
|
|
35
|
+
setVisible(visible: boolean): void;
|
|
36
|
+
isChildVisible(index: number): boolean;
|
|
37
|
+
setChildVisible(index: number, visible: boolean): void;
|
|
38
|
+
moveChild(from: number, to: number): void;
|
|
39
|
+
getChildSize(index: number): number;
|
|
40
|
+
resizeChild(index: number, size: number): void;
|
|
41
|
+
layout(size: number, orthogonalSize: number): void;
|
|
42
|
+
addChild(node: Node, size: number | Sizing, index: number, skipLayout?: boolean): void;
|
|
43
|
+
getChildCachedVisibleSize(index: number): number | undefined;
|
|
44
|
+
removeChild(index: number, sizing?: Sizing): void;
|
|
45
|
+
private _addChild;
|
|
46
|
+
private _removeChild;
|
|
47
|
+
private setupChildrenEvents;
|
|
48
|
+
dispose(): void;
|
|
49
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Accreditation: This file is largly based upon the MIT licenced VSCode sourcecode found at:
|
|
3
|
+
* https://github.com/microsoft/vscode/tree/main/src/vs/base/browser/ui/grid
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { Splitview, Orientation, LayoutPriority, } from '../splitview/splitview';
|
|
6
|
+
import { Emitter, Event } from '../events';
|
|
7
|
+
import { LeafNode } from './leafNode';
|
|
8
|
+
import { CompositeDisposable, Disposable } from '../lifecycle';
|
|
9
|
+
export class BranchNode extends CompositeDisposable {
|
|
10
|
+
get width() {
|
|
11
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
12
|
+
? this.size
|
|
13
|
+
: this.orthogonalSize;
|
|
14
|
+
}
|
|
15
|
+
get height() {
|
|
16
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
17
|
+
? this.orthogonalSize
|
|
18
|
+
: this.size;
|
|
19
|
+
}
|
|
20
|
+
get minimumSize() {
|
|
21
|
+
return this.children.length === 0
|
|
22
|
+
? 0
|
|
23
|
+
: Math.max(...this.children.map((c) => c.minimumOrthogonalSize));
|
|
24
|
+
}
|
|
25
|
+
get maximumSize() {
|
|
26
|
+
return Math.min(...this.children.map((c) => c.maximumOrthogonalSize));
|
|
27
|
+
}
|
|
28
|
+
get minimumOrthogonalSize() {
|
|
29
|
+
return this.splitview.minimumSize;
|
|
30
|
+
}
|
|
31
|
+
get maximumOrthogonalSize() {
|
|
32
|
+
return this.splitview.maximumSize;
|
|
33
|
+
}
|
|
34
|
+
get orthogonalSize() {
|
|
35
|
+
return this._orthogonalSize;
|
|
36
|
+
}
|
|
37
|
+
get size() {
|
|
38
|
+
return this._size;
|
|
39
|
+
}
|
|
40
|
+
get minimumWidth() {
|
|
41
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
42
|
+
? this.minimumOrthogonalSize
|
|
43
|
+
: this.minimumSize;
|
|
44
|
+
}
|
|
45
|
+
get minimumHeight() {
|
|
46
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
47
|
+
? this.minimumSize
|
|
48
|
+
: this.minimumOrthogonalSize;
|
|
49
|
+
}
|
|
50
|
+
get maximumWidth() {
|
|
51
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
52
|
+
? this.maximumOrthogonalSize
|
|
53
|
+
: this.maximumSize;
|
|
54
|
+
}
|
|
55
|
+
get maximumHeight() {
|
|
56
|
+
return this.orientation === Orientation.HORIZONTAL
|
|
57
|
+
? this.maximumSize
|
|
58
|
+
: this.maximumOrthogonalSize;
|
|
59
|
+
}
|
|
60
|
+
get priority() {
|
|
61
|
+
if (this.children.length === 0) {
|
|
62
|
+
return LayoutPriority.Normal;
|
|
63
|
+
}
|
|
64
|
+
const priorities = this.children.map((c) => typeof c.priority === 'undefined'
|
|
65
|
+
? LayoutPriority.Normal
|
|
66
|
+
: c.priority);
|
|
67
|
+
if (priorities.some((p) => p === LayoutPriority.High)) {
|
|
68
|
+
return LayoutPriority.High;
|
|
69
|
+
}
|
|
70
|
+
else if (priorities.some((p) => p === LayoutPriority.Low)) {
|
|
71
|
+
return LayoutPriority.Low;
|
|
72
|
+
}
|
|
73
|
+
return LayoutPriority.Normal;
|
|
74
|
+
}
|
|
75
|
+
constructor(orientation, proportionalLayout, styles, size, orthogonalSize, childDescriptors) {
|
|
76
|
+
super();
|
|
77
|
+
this.orientation = orientation;
|
|
78
|
+
this.proportionalLayout = proportionalLayout;
|
|
79
|
+
this.styles = styles;
|
|
80
|
+
this._childrenDisposable = Disposable.NONE;
|
|
81
|
+
this.children = [];
|
|
82
|
+
this._onDidChange = new Emitter();
|
|
83
|
+
this.onDidChange = this._onDidChange.event;
|
|
84
|
+
this._orthogonalSize = orthogonalSize;
|
|
85
|
+
this._size = size;
|
|
86
|
+
this.element = document.createElement('div');
|
|
87
|
+
this.element.className = 'branch-node';
|
|
88
|
+
if (!childDescriptors) {
|
|
89
|
+
this.splitview = new Splitview(this.element, {
|
|
90
|
+
orientation: this.orientation,
|
|
91
|
+
proportionalLayout,
|
|
92
|
+
styles,
|
|
93
|
+
});
|
|
94
|
+
this.splitview.layout(this.size, this.orthogonalSize);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const descriptor = {
|
|
98
|
+
views: childDescriptors.map((childDescriptor) => {
|
|
99
|
+
return {
|
|
100
|
+
view: childDescriptor.node,
|
|
101
|
+
size: childDescriptor.node.size,
|
|
102
|
+
visible: childDescriptor.node instanceof LeafNode &&
|
|
103
|
+
childDescriptor.visible !== undefined
|
|
104
|
+
? childDescriptor.visible
|
|
105
|
+
: true,
|
|
106
|
+
};
|
|
107
|
+
}),
|
|
108
|
+
size: this.size,
|
|
109
|
+
};
|
|
110
|
+
this.children = childDescriptors.map((c) => c.node);
|
|
111
|
+
this.splitview = new Splitview(this.element, {
|
|
112
|
+
orientation: this.orientation,
|
|
113
|
+
descriptor,
|
|
114
|
+
proportionalLayout,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
this.addDisposables(this._onDidChange, this.splitview.onDidSashEnd(() => {
|
|
118
|
+
this._onDidChange.fire({});
|
|
119
|
+
}));
|
|
120
|
+
this.setupChildrenEvents();
|
|
121
|
+
}
|
|
122
|
+
setVisible(visible) {
|
|
123
|
+
for (const child of this.children) {
|
|
124
|
+
child.setVisible(visible);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
isChildVisible(index) {
|
|
128
|
+
if (index < 0 || index >= this.children.length) {
|
|
129
|
+
throw new Error('Invalid index');
|
|
130
|
+
}
|
|
131
|
+
return this.splitview.isViewVisible(index);
|
|
132
|
+
}
|
|
133
|
+
setChildVisible(index, visible) {
|
|
134
|
+
if (index < 0 || index >= this.children.length) {
|
|
135
|
+
throw new Error('Invalid index');
|
|
136
|
+
}
|
|
137
|
+
if (this.splitview.isViewVisible(index) === visible) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
this.splitview.setViewVisible(index, visible);
|
|
141
|
+
}
|
|
142
|
+
moveChild(from, to) {
|
|
143
|
+
if (from === to) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (from < 0 || from >= this.children.length) {
|
|
147
|
+
throw new Error('Invalid from index');
|
|
148
|
+
}
|
|
149
|
+
if (from < to) {
|
|
150
|
+
to--;
|
|
151
|
+
}
|
|
152
|
+
this.splitview.moveView(from, to);
|
|
153
|
+
const child = this._removeChild(from);
|
|
154
|
+
this._addChild(child, to);
|
|
155
|
+
}
|
|
156
|
+
getChildSize(index) {
|
|
157
|
+
if (index < 0 || index >= this.children.length) {
|
|
158
|
+
throw new Error('Invalid index');
|
|
159
|
+
}
|
|
160
|
+
return this.splitview.getViewSize(index);
|
|
161
|
+
}
|
|
162
|
+
resizeChild(index, size) {
|
|
163
|
+
if (index < 0 || index >= this.children.length) {
|
|
164
|
+
throw new Error('Invalid index');
|
|
165
|
+
}
|
|
166
|
+
this.splitview.resizeView(index, size);
|
|
167
|
+
}
|
|
168
|
+
layout(size, orthogonalSize) {
|
|
169
|
+
this._size = orthogonalSize;
|
|
170
|
+
this._orthogonalSize = size;
|
|
171
|
+
this.splitview.layout(this.size, this.orthogonalSize);
|
|
172
|
+
}
|
|
173
|
+
addChild(node, size, index, skipLayout) {
|
|
174
|
+
if (index < 0 || index > this.children.length) {
|
|
175
|
+
throw new Error('Invalid index');
|
|
176
|
+
}
|
|
177
|
+
this.splitview.addView(node, size, index, skipLayout);
|
|
178
|
+
this._addChild(node, index);
|
|
179
|
+
}
|
|
180
|
+
getChildCachedVisibleSize(index) {
|
|
181
|
+
if (index < 0 || index >= this.children.length) {
|
|
182
|
+
throw new Error('Invalid index');
|
|
183
|
+
}
|
|
184
|
+
return this.splitview.getViewCachedVisibleSize(index);
|
|
185
|
+
}
|
|
186
|
+
removeChild(index, sizing) {
|
|
187
|
+
if (index < 0 || index >= this.children.length) {
|
|
188
|
+
throw new Error('Invalid index');
|
|
189
|
+
}
|
|
190
|
+
this.splitview.removeView(index, sizing);
|
|
191
|
+
this._removeChild(index);
|
|
192
|
+
}
|
|
193
|
+
_addChild(node, index) {
|
|
194
|
+
this.children.splice(index, 0, node);
|
|
195
|
+
this.setupChildrenEvents();
|
|
196
|
+
}
|
|
197
|
+
_removeChild(index) {
|
|
198
|
+
const [child] = this.children.splice(index, 1);
|
|
199
|
+
this.setupChildrenEvents();
|
|
200
|
+
return child;
|
|
201
|
+
}
|
|
202
|
+
setupChildrenEvents() {
|
|
203
|
+
this._childrenDisposable.dispose();
|
|
204
|
+
this._childrenDisposable = Event.any(...this.children.map((c) => c.onDidChange))((e) => {
|
|
205
|
+
/**
|
|
206
|
+
* indicate a change has occured to allows any re-rendering but don't bubble
|
|
207
|
+
* event because that was specific to this branch
|
|
208
|
+
*/
|
|
209
|
+
this._onDidChange.fire({ size: e.orthogonalSize });
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
dispose() {
|
|
213
|
+
super.dispose();
|
|
214
|
+
this._childrenDisposable.dispose();
|
|
215
|
+
this.children.forEach((child) => child.dispose());
|
|
216
|
+
this.splitview.dispose();
|
|
217
|
+
}
|
|
218
|
+
}
|