@datagrok-libraries/dock-spawn-dg 0.0.2 → 0.1.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/CHANGELOG.md +0 -354
- package/README.md +0 -3
- package/index.d.ts +33 -0
- package/index.d.ts.map +1 -0
- package/index.js +32 -0
- package/package.json +10 -17
- package/src/BrowserDialogHelper.d.ts.map +1 -0
- package/{lib → src}/BrowserDialogHelper.js +18 -12
- package/src/BrowserDialogHelper.ts +48 -47
- package/src/ContainerType.d.ts.map +1 -0
- package/src/ContainerType.ts +1 -1
- package/{lib → src}/Dialog.d.ts +7 -7
- package/src/Dialog.d.ts.map +1 -0
- package/{lib → src}/Dialog.js +46 -58
- package/src/Dialog.ts +253 -250
- package/src/DockConfig.d.ts.map +1 -0
- package/{lib → src}/DockConfig.js +0 -5
- package/src/DockConfig.ts +1 -1
- package/{lib → src}/DockGraphDeserializer.d.ts +6 -6
- package/src/DockGraphDeserializer.d.ts.map +1 -0
- package/src/DockGraphDeserializer.js +133 -0
- package/src/DockGraphDeserializer.ts +113 -108
- package/src/DockGraphSerializer.d.ts +14 -0
- package/src/DockGraphSerializer.d.ts.map +1 -0
- package/{lib → src}/DockGraphSerializer.js +11 -11
- package/src/DockGraphSerializer.ts +48 -47
- package/{lib → src}/DockLayoutEngine.d.ts +12 -12
- package/src/DockLayoutEngine.d.ts.map +1 -0
- package/{lib → src}/DockLayoutEngine.js +49 -53
- package/src/DockLayoutEngine.ts +351 -346
- package/{lib → src}/DockManager.d.ts +34 -34
- package/src/DockManager.d.ts.map +1 -0
- package/{lib → src}/DockManager.js +168 -151
- package/src/DockManager.ts +860 -834
- package/{lib → src}/DockManagerContext.d.ts +3 -3
- package/src/DockManagerContext.d.ts.map +1 -0
- package/{lib → src}/DockManagerContext.js +2 -5
- package/src/DockManagerContext.ts +5 -5
- package/{lib → src}/DockModel.d.ts +2 -2
- package/src/DockModel.d.ts.map +1 -0
- package/{lib → src}/DockModel.js +0 -3
- package/src/DockModel.ts +2 -2
- package/{lib → src}/DockNode.d.ts +1 -1
- package/src/DockNode.d.ts.map +1 -0
- package/{lib → src}/DockNode.js +0 -3
- package/src/DockNode.ts +2 -2
- package/{lib → src}/DockWheel.d.ts +5 -5
- package/src/DockWheel.d.ts.map +1 -0
- package/{lib → src}/DockWheel.js +3 -11
- package/src/DockWheel.ts +6 -6
- package/{lib → src}/DockWheelItem.d.ts +3 -3
- package/src/DockWheelItem.d.ts.map +1 -0
- package/{lib → src}/DockWheelItem.js +1 -8
- package/src/DockWheelItem.ts +4 -4
- package/{lib → src}/DocumentManagerContainer.d.ts +4 -4
- package/src/DocumentManagerContainer.d.ts.map +1 -0
- package/{lib → src}/DocumentManagerContainer.js +3 -3
- package/src/DocumentManagerContainer.ts +9 -9
- package/{lib → src}/DocumentTabPage.d.ts +3 -3
- package/src/DocumentTabPage.d.ts.map +1 -0
- package/{lib → src}/DocumentTabPage.js +2 -2
- package/src/DocumentTabPage.ts +6 -6
- package/{lib → src}/DraggableContainer.d.ts +7 -7
- package/src/DraggableContainer.d.ts.map +1 -0
- package/{lib → src}/DraggableContainer.js +3 -16
- package/src/DraggableContainer.ts +10 -10
- package/src/EventHandler.d.ts.map +1 -0
- package/{lib → src}/EventHandler.js +0 -3
- package/src/EventHandler.ts +1 -1
- package/{lib → src}/FillDockContainer.d.ts +8 -8
- package/src/FillDockContainer.d.ts.map +1 -0
- package/{lib → src}/FillDockContainer.js +4 -14
- package/src/FillDockContainer.ts +10 -10
- package/src/HorizontalDockContainer.d.ts +7 -0
- package/src/HorizontalDockContainer.d.ts.map +1 -0
- package/{lib → src}/HorizontalDockContainer.js +3 -3
- package/src/HorizontalDockContainer.ts +6 -6
- package/{lib → src}/PanelContainer.d.ts +21 -20
- package/src/PanelContainer.d.ts.map +1 -0
- package/{lib → src}/PanelContainer.js +144 -148
- package/src/PanelContainer.ts +590 -577
- package/src/Point.d.ts.map +1 -0
- package/{lib → src}/Point.js +0 -2
- package/{lib → src}/ResizableContainer.d.ts +8 -8
- package/src/ResizableContainer.d.ts.map +1 -0
- package/{lib → src}/ResizableContainer.js +4 -17
- package/src/ResizableContainer.ts +11 -11
- package/{lib → src}/ResizeHandle.d.ts +1 -1
- package/src/ResizeHandle.d.ts.map +1 -0
- package/{lib → src}/ResizeHandle.js +0 -10
- package/src/ResizeHandle.ts +2 -2
- package/{lib → src}/SplitterBar.d.ts +3 -3
- package/src/SplitterBar.d.ts.map +1 -0
- package/{lib → src}/SplitterBar.js +2 -14
- package/src/SplitterBar.ts +5 -5
- package/{lib → src}/SplitterDockContainer.d.ts +7 -7
- package/src/SplitterDockContainer.d.ts.map +1 -0
- package/{lib → src}/SplitterDockContainer.js +1 -11
- package/src/SplitterDockContainer.ts +8 -8
- package/{lib → src}/SplitterPanel.d.ts +2 -2
- package/src/SplitterPanel.d.ts.map +1 -0
- package/{lib → src}/SplitterPanel.js +2 -6
- package/src/SplitterPanel.ts +4 -4
- package/{lib → src}/TabHandle.d.ts +5 -5
- package/src/TabHandle.d.ts.map +1 -0
- package/{lib → src}/TabHandle.js +81 -95
- package/src/TabHandle.ts +314 -311
- package/{lib → src}/TabHost.d.ts +6 -6
- package/src/TabHost.d.ts.map +1 -0
- package/{lib → src}/TabHost.js +4 -19
- package/src/TabHost.ts +9 -9
- package/{lib → src}/TabPage.d.ts +4 -4
- package/src/TabPage.d.ts.map +1 -0
- package/{lib → src}/TabPage.js +3 -10
- package/src/TabPage.ts +6 -6
- package/{lib → src}/UndockInitiator.d.ts +4 -4
- package/src/UndockInitiator.d.ts.map +1 -0
- package/{lib → src}/UndockInitiator.js +2 -14
- package/src/UndockInitiator.ts +7 -7
- package/src/Utils.d.ts.map +1 -0
- package/{lib → src}/Utils.js +1 -1
- package/src/Utils.ts +1 -1
- package/src/VerticalDockContainer.d.ts +7 -0
- package/src/VerticalDockContainer.d.ts.map +1 -0
- package/{lib → src}/VerticalDockContainer.js +3 -3
- package/src/VerticalDockContainer.ts +7 -7
- package/src/enums/PanelType.d.ts.map +1 -0
- package/src/enums/PanelType.ts +1 -1
- package/src/enums/TabHostDirection.d.ts.map +1 -0
- package/src/enums/TabHostDirection.ts +1 -1
- package/src/enums/WheelTypes.d.ts.map +1 -0
- package/src/enums/WheelTypes.ts +1 -1
- package/src/i18n/Defaults.d.ts.map +1 -0
- package/src/i18n/Defaults.ts +2 -2
- package/{lib → src}/i18n/Localizer.d.ts +1 -1
- package/src/i18n/Localizer.d.ts.map +1 -0
- package/{lib → src}/i18n/Localizer.js +3 -3
- package/src/i18n/Localizer.ts +2 -2
- package/src/index.d.ts.map +1 -0
- package/{lib → src}/interfaces/IDockContainer.d.ts +4 -4
- package/src/interfaces/IDockContainer.d.ts.map +1 -0
- package/src/interfaces/IDockContainer.ts +7 -7
- package/src/interfaces/IDockContainerWithSize.d.ts +6 -0
- package/src/interfaces/IDockContainerWithSize.d.ts.map +1 -0
- package/src/interfaces/IDockContainerWithSize.ts +3 -3
- package/{lib → src}/interfaces/ILayoutEventListener.d.ts +6 -6
- package/src/interfaces/ILayoutEventListener.d.ts.map +1 -0
- package/src/interfaces/ILayoutEventListener.ts +7 -7
- package/src/interfaces/IMouseOrTouchEvent.d.ts.map +1 -0
- package/src/interfaces/IMouseOrTouchEvent.ts +1 -1
- package/src/interfaces/INodeInfo.d.ts +8 -0
- package/src/interfaces/INodeInfo.d.ts.map +1 -0
- package/src/interfaces/INodeInfo.ts +2 -2
- package/src/interfaces/IPanelInfo.d.ts +10 -0
- package/src/interfaces/IPanelInfo.d.ts.map +1 -0
- package/src/interfaces/IPanelInfo.ts +3 -3
- package/src/interfaces/IRectangle.d.ts.map +1 -0
- package/src/interfaces/IRectangle.ts +1 -1
- package/src/interfaces/ISize.d.ts.map +1 -0
- package/{lib → src}/interfaces/IState.d.ts +1 -0
- package/src/interfaces/IState.d.ts.map +1 -0
- package/src/interfaces/IState.ts +1 -0
- package/src/interfaces/IThickness.d.ts.map +1 -0
- package/src/interfaces/IThickness.ts +1 -1
- package/{lib → src}/webcomponent/DockSpawnTsWebcomponent.d.ts +6 -10
- package/src/webcomponent/DockSpawnTsWebcomponent.d.ts.map +1 -0
- package/src/webcomponent/DockSpawnTsWebcomponent.js +178 -0
- package/src/webcomponent/DockSpawnTsWebcomponent.ts +207 -243
- package/src/webcomponent/styles.d.ts.map +1 -0
- package/{lib → src}/webcomponent/styles.js +2 -1
- package/tsconfig.json +13 -26
- package/.eslintrc.json +0 -47
- package/lib/BrowserDialogHelper.d.ts.map +0 -1
- package/lib/ContainerType.d.ts.map +0 -1
- package/lib/Dialog.d.ts.map +0 -1
- package/lib/DockConfig.d.ts.map +0 -1
- package/lib/DockGraphDeserializer.d.ts.map +0 -1
- package/lib/DockGraphDeserializer.js +0 -114
- package/lib/DockGraphSerializer.d.ts +0 -14
- package/lib/DockGraphSerializer.d.ts.map +0 -1
- package/lib/DockLayoutEngine.d.ts.map +0 -1
- package/lib/DockManager.d.ts.map +0 -1
- package/lib/DockManagerContext.d.ts.map +0 -1
- package/lib/DockModel.d.ts.map +0 -1
- package/lib/DockNode.d.ts.map +0 -1
- package/lib/DockWheel.d.ts.map +0 -1
- package/lib/DockWheelItem.d.ts.map +0 -1
- package/lib/DocumentManagerContainer.d.ts.map +0 -1
- package/lib/DocumentTabPage.d.ts.map +0 -1
- package/lib/DraggableContainer.d.ts.map +0 -1
- package/lib/EventHandler.d.ts.map +0 -1
- package/lib/FillDockContainer.d.ts.map +0 -1
- package/lib/HorizontalDockContainer.d.ts +0 -7
- package/lib/HorizontalDockContainer.d.ts.map +0 -1
- package/lib/PanelContainer.d.ts.map +0 -1
- package/lib/Point.d.ts.map +0 -1
- package/lib/ResizableContainer.d.ts.map +0 -1
- package/lib/ResizeHandle.d.ts.map +0 -1
- package/lib/SplitterBar.d.ts.map +0 -1
- package/lib/SplitterDockContainer.d.ts.map +0 -1
- package/lib/SplitterPanel.d.ts.map +0 -1
- package/lib/TabHandle.d.ts.map +0 -1
- package/lib/TabHost.d.ts.map +0 -1
- package/lib/TabPage.d.ts.map +0 -1
- package/lib/UndockInitiator.d.ts.map +0 -1
- package/lib/Utils.d.ts.map +0 -1
- package/lib/VerticalDockContainer.d.ts +0 -7
- package/lib/VerticalDockContainer.d.ts.map +0 -1
- package/lib/enums/PanelType.d.ts.map +0 -1
- package/lib/enums/TabHostDirection.d.ts.map +0 -1
- package/lib/enums/WheelTypes.d.ts.map +0 -1
- package/lib/i18n/Defaults.d.ts.map +0 -1
- package/lib/i18n/Localizer.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/interfaces/IDockContainer.d.ts.map +0 -1
- package/lib/interfaces/IDockContainerWithSize.d.ts +0 -6
- package/lib/interfaces/IDockContainerWithSize.d.ts.map +0 -1
- package/lib/interfaces/ILayoutEventListener.d.ts.map +0 -1
- package/lib/interfaces/IMouseOrTouchEvent.d.ts.map +0 -1
- package/lib/interfaces/INodeInfo.d.ts +0 -8
- package/lib/interfaces/INodeInfo.d.ts.map +0 -1
- package/lib/interfaces/IPanelInfo.d.ts +0 -10
- package/lib/interfaces/IPanelInfo.d.ts.map +0 -1
- package/lib/interfaces/IRectangle.d.ts.map +0 -1
- package/lib/interfaces/ISize.d.ts.map +0 -1
- package/lib/interfaces/IState.d.ts.map +0 -1
- package/lib/interfaces/IThickness.d.ts.map +0 -1
- package/lib/webcomponent/DockSpawnTsWebcomponent.d.ts.map +0 -1
- package/lib/webcomponent/DockSpawnTsWebcomponent.js +0 -209
- package/lib/webcomponent/styles.d.ts.map +0 -1
- package/tsconfig.tsbuildinfo +0 -1
- /package/{lib → src}/BrowserDialogHelper.d.ts +0 -0
- /package/{lib → src}/ContainerType.d.ts +0 -0
- /package/{lib → src}/ContainerType.js +0 -0
- /package/{lib → src}/DockConfig.d.ts +0 -0
- /package/{lib → src}/EventHandler.d.ts +0 -0
- /package/{lib → src}/Point.d.ts +0 -0
- /package/{lib → src}/Utils.d.ts +0 -0
- /package/{lib → src}/enums/PanelType.d.ts +0 -0
- /package/{lib → src}/enums/PanelType.js +0 -0
- /package/{lib → src}/enums/TabHostDirection.d.ts +0 -0
- /package/{lib → src}/enums/TabHostDirection.js +0 -0
- /package/{lib → src}/enums/WheelTypes.d.ts +0 -0
- /package/{lib → src}/enums/WheelTypes.js +0 -0
- /package/{lib → src}/i18n/Defaults.d.ts +0 -0
- /package/{lib → src}/i18n/Defaults.js +0 -0
- /package/{lib → src}/index.d.ts +0 -0
- /package/{lib → src}/index.js +0 -0
- /package/{lib → src}/interfaces/IDockContainer.js +0 -0
- /package/{lib → src}/interfaces/IDockContainerWithSize.js +0 -0
- /package/{lib → src}/interfaces/ILayoutEventListener.js +0 -0
- /package/{lib → src}/interfaces/IMouseOrTouchEvent.d.ts +0 -0
- /package/{lib → src}/interfaces/IMouseOrTouchEvent.js +0 -0
- /package/{lib → src}/interfaces/INodeInfo.js +0 -0
- /package/{lib → src}/interfaces/IPanelInfo.js +0 -0
- /package/{lib → src}/interfaces/IRectangle.d.ts +0 -0
- /package/{lib → src}/interfaces/IRectangle.js +0 -0
- /package/{lib → src}/interfaces/ISize.d.ts +0 -0
- /package/{lib → src}/interfaces/ISize.js +0 -0
- /package/{lib → src}/interfaces/IState.js +0 -0
- /package/{lib → src}/interfaces/IThickness.d.ts +0 -0
- /package/{lib → src}/interfaces/IThickness.js +0 -0
- /package/{lib → src}/webcomponent/styles.d.ts +0 -0
package/src/DockLayoutEngine.ts
CHANGED
|
@@ -1,370 +1,375 @@
|
|
|
1
|
-
import {DockManager} from
|
|
2
|
-
import {DockNode} from
|
|
3
|
-
import {Utils} from
|
|
4
|
-
import {HorizontalDockContainer} from
|
|
5
|
-
import {VerticalDockContainer} from
|
|
6
|
-
import {FillDockContainer} from
|
|
7
|
-
import {IRectangle} from
|
|
8
|
-
import {IDockContainer} from
|
|
9
|
-
import {TabHandle} from
|
|
1
|
+
import { DockManager } from "./DockManager";
|
|
2
|
+
import { DockNode } from "./DockNode";
|
|
3
|
+
import { Utils } from "./Utils";
|
|
4
|
+
import { HorizontalDockContainer } from "./HorizontalDockContainer";
|
|
5
|
+
import { VerticalDockContainer } from "./VerticalDockContainer";
|
|
6
|
+
import { FillDockContainer } from "./FillDockContainer";
|
|
7
|
+
import { IRectangle } from "./interfaces/IRectangle";
|
|
8
|
+
import { IDockContainer } from "./interfaces/IDockContainer";
|
|
9
|
+
import { TabHandle } from "./TabHandle";
|
|
10
10
|
|
|
11
11
|
export class DockLayoutEngine {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
undock(node: DockNode) {
|
|
44
|
-
const parentNode = node.parent;
|
|
45
|
-
if (!parentNode)
|
|
46
|
-
throw new Error('Cannot undock. panel is not a leaf node');
|
|
47
|
-
|
|
48
|
-
// Get the position of the node relative to it's siblings
|
|
49
|
-
const siblingIndex = parentNode.children.indexOf(node);
|
|
50
|
-
|
|
51
|
-
// Detach the node from the dock manager's tree hierarchy
|
|
52
|
-
node.detachFromParent();
|
|
53
|
-
|
|
54
|
-
// Fix the node's parent hierarchy
|
|
55
|
-
if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
|
|
56
|
-
// If the child count falls below the minimum threshold, destroy the parent and merge
|
|
57
|
-
// the children with their grandparents
|
|
58
|
-
const grandParent = parentNode.parent;
|
|
59
|
-
for (let i = 0; i < parentNode.children.length; i++) {
|
|
60
|
-
const otherChild = parentNode.children[i];
|
|
61
|
-
if (grandParent) {
|
|
62
|
-
// parent node is not a root node
|
|
63
|
-
grandParent.addChildAfter(parentNode, otherChild);
|
|
64
|
-
parentNode.detachFromParent();
|
|
65
|
-
const width = parentNode.container.containerElement.clientWidth;
|
|
66
|
-
const height = parentNode.container.containerElement.clientHeight;
|
|
67
|
-
parentNode.container.destroy();
|
|
68
|
-
|
|
69
|
-
otherChild.container.resize(width, height);
|
|
70
|
-
grandParent.performLayout(false);
|
|
71
|
-
} else {
|
|
72
|
-
// Parent is a root node.
|
|
73
|
-
// Make the other child the root node
|
|
74
|
-
parentNode.detachFromParent();
|
|
75
|
-
parentNode.container.destroy();
|
|
76
|
-
this.dockManager.setRootNode(otherChild);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
} else {
|
|
80
|
-
// the node to be removed has 2 or more other siblings. So it is safe to continue
|
|
81
|
-
// using the parent composite container.
|
|
82
|
-
parentNode.performLayout(false);
|
|
83
|
-
|
|
84
|
-
// Set the next sibling as the active child (e.g. for a Tab host, it would select it as the active tab)
|
|
85
|
-
if (parentNode.children.length > 0) {
|
|
86
|
-
const nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
87
|
-
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
88
|
-
}
|
|
12
|
+
|
|
13
|
+
dockManager: DockManager;
|
|
14
|
+
|
|
15
|
+
constructor(dockManager: DockManager) {
|
|
16
|
+
this.dockManager = dockManager;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** docks the [newNode] to the left of [referenceNode] */
|
|
20
|
+
dockLeft(referenceNode: DockNode, newNode: DockNode) {
|
|
21
|
+
this._performDock(referenceNode, newNode, 'horizontal', true);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** docks the [newNode] to the right of [referenceNode] */
|
|
25
|
+
dockRight(referenceNode: DockNode, newNode: DockNode) {
|
|
26
|
+
this._performDock(referenceNode, newNode, 'horizontal', false);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** docks the [newNode] to the top of [referenceNode] */
|
|
30
|
+
dockUp(referenceNode: DockNode, newNode: DockNode) {
|
|
31
|
+
this._performDock(referenceNode, newNode, 'vertical', true);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** docks the [newNode] to the bottom of [referenceNode] */
|
|
35
|
+
dockDown(referenceNode: DockNode, newNode: DockNode) {
|
|
36
|
+
this._performDock(referenceNode, newNode, 'vertical', false);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** docks the [newNode] by creating a new tab inside [referenceNode] */
|
|
40
|
+
dockFill(referenceNode: DockNode, newNode: DockNode) {
|
|
41
|
+
this._performDock(referenceNode, newNode, 'fill', false);
|
|
89
42
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
43
|
+
|
|
44
|
+
undock(node: DockNode) {
|
|
45
|
+
let parentNode = node.parent;
|
|
46
|
+
if (!parentNode)
|
|
47
|
+
throw new Error('Cannot undock. panel is not a leaf node');
|
|
48
|
+
|
|
49
|
+
// Get the position of the node relative to it's siblings
|
|
50
|
+
let siblingIndex = parentNode.children.indexOf(node);
|
|
51
|
+
|
|
52
|
+
// Detach the node from the dock manager's tree hierarchy
|
|
53
|
+
node.detachFromParent();
|
|
54
|
+
|
|
55
|
+
// Fix the node's parent hierarchy
|
|
56
|
+
if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
|
|
57
|
+
// If the child count falls below the minimum threshold, destroy the parent and merge
|
|
58
|
+
// the children with their grandparents
|
|
59
|
+
let grandParent = parentNode.parent;
|
|
60
|
+
for (let i = 0; i < parentNode.children.length; i++) {
|
|
61
|
+
let otherChild = parentNode.children[i];
|
|
62
|
+
if (grandParent) {
|
|
63
|
+
// parent node is not a root node
|
|
64
|
+
grandParent.addChildAfter(parentNode, otherChild);
|
|
65
|
+
parentNode.detachFromParent();
|
|
66
|
+
let width = parentNode.container.containerElement.clientWidth;
|
|
67
|
+
let height = parentNode.container.containerElement.clientHeight;
|
|
68
|
+
parentNode.container.destroy();
|
|
69
|
+
|
|
70
|
+
otherChild.container.resize(width, height);
|
|
71
|
+
grandParent.performLayout(false);
|
|
72
|
+
} else {
|
|
73
|
+
// Parent is a root node.
|
|
74
|
+
// Make the other child the root node
|
|
75
|
+
parentNode.detachFromParent();
|
|
76
|
+
parentNode.container.destroy();
|
|
77
|
+
this.dockManager.setRootNode(otherChild);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// the node to be removed has 2 or more other siblings. So it is safe to continue
|
|
83
|
+
// using the parent composite container.
|
|
84
|
+
parentNode.performLayout(false);
|
|
85
|
+
|
|
86
|
+
// Set the next sibling as the active child (e.g. for a Tab host, it would select it as the active tab)
|
|
87
|
+
if (parentNode.children.length > 0) {
|
|
88
|
+
let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
89
|
+
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
this.dockManager.invalidate();
|
|
93
|
+
|
|
94
|
+
this.dockManager.notifyOnUnDock(node);
|
|
107
95
|
}
|
|
108
96
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
97
|
+
close(node: DockNode) {
|
|
98
|
+
let parentNode = node?.parent;
|
|
99
|
+
if (!parentNode)
|
|
100
|
+
throw new Error('Cannot undock. panel is not a leaf node');
|
|
101
|
+
|
|
102
|
+
//check if closed tab was the active one
|
|
103
|
+
let activetabClosed = false;
|
|
104
|
+
if (parentNode.children.length > 0) {
|
|
105
|
+
if ((<FillDockContainer>parentNode.container).tabHost != null) {
|
|
106
|
+
let activeTab = (<FillDockContainer>parentNode.container).tabHost.getActiveTab();
|
|
107
|
+
activetabClosed = activeTab.container == node.container;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Get the position of the node relative to it's siblings
|
|
112
|
+
let siblingIndex = parentNode.children.indexOf(node);
|
|
113
|
+
|
|
114
|
+
// Detach the node from the dock manager's tree hierarchy
|
|
115
|
+
node.detachFromParent();
|
|
116
|
+
|
|
117
|
+
if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
|
|
118
|
+
// If the child count falls below the minimum threshold, destroy the parent and merge
|
|
119
|
+
// the children with their grandparents
|
|
120
|
+
let grandParent = parentNode.parent;
|
|
121
|
+
for (let i = 0; i < parentNode.children.length; i++) {
|
|
122
|
+
let otherChild = parentNode.children[i];
|
|
123
|
+
if (grandParent) {
|
|
124
|
+
// parent node is not a root node
|
|
125
|
+
grandParent.addChildAfter(parentNode, otherChild);
|
|
126
|
+
parentNode.detachFromParent();
|
|
127
|
+
let width = parentNode.container.containerElement.clientWidth;
|
|
128
|
+
let height = parentNode.container.containerElement.clientHeight;
|
|
129
|
+
otherChild.container.resize(width, height);
|
|
130
|
+
parentNode.container.destroy();
|
|
131
|
+
grandParent.performLayout(false);
|
|
132
|
+
} else {
|
|
133
|
+
// Parent is a root node.
|
|
134
|
+
// Make the other child the root node
|
|
135
|
+
parentNode.detachFromParent();
|
|
136
|
+
parentNode.container.destroy();
|
|
137
|
+
this.dockManager.setRootNode(otherChild);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
130
140
|
} else {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
141
|
+
// the node to be removed has 2 or more other siblings. So it is safe to continue
|
|
142
|
+
// using the parent composite container.
|
|
143
|
+
parentNode.performLayout(false);
|
|
144
|
+
|
|
145
|
+
if (activetabClosed) {
|
|
146
|
+
let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
147
|
+
if (nextActiveSibling != null)
|
|
148
|
+
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
149
|
+
}
|
|
136
150
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// using the parent composite container.
|
|
141
|
-
parentNode.performLayout(false);
|
|
142
|
-
|
|
143
|
-
if (activetabClosed) {
|
|
144
|
-
const nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
145
|
-
if (nextActiveSibling != null)
|
|
146
|
-
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
147
|
-
}
|
|
151
|
+
this.dockManager.invalidate();
|
|
152
|
+
|
|
153
|
+
this.dockManager.notifyOnUnDock(node);
|
|
148
154
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
node.children = Utils.orderByIndexes(node.children, indexes); //apply
|
|
167
|
-
(<FillDockContainer>node.container).tabHost.performTabsLayout(indexes);
|
|
168
|
-
this.dockManager.notifyOnTabsReorder(node);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
_performDock(referenceNode: DockNode, newNode: DockNode, direction: string, insertBeforeReference: boolean) {
|
|
172
|
-
if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
|
|
173
|
-
referenceNode = referenceNode.parent;
|
|
174
|
-
|
|
175
|
-
if (direction === 'fill' && referenceNode.container.containerType === 'fill') {
|
|
176
|
-
referenceNode.addChild(newNode);
|
|
177
|
-
referenceNode.performLayout(false);
|
|
178
|
-
referenceNode.container.setActiveChild(newNode.container);
|
|
179
|
-
this.dockManager.invalidate();
|
|
180
|
-
this.dockManager.notifyOnDock(newNode);
|
|
181
|
-
return;
|
|
155
|
+
|
|
156
|
+
reorderTabs(node: DockNode, handle: TabHandle, state: string, index: number) {
|
|
157
|
+
let N = node.children.length;
|
|
158
|
+
let nodeIndexToDelete = state === 'left' ? index : index + 1;
|
|
159
|
+
if (state == 'right' && nodeIndexToDelete >= node.children.length)
|
|
160
|
+
return;
|
|
161
|
+
if (state == 'left' && nodeIndexToDelete == 0)
|
|
162
|
+
return;
|
|
163
|
+
|
|
164
|
+
let indexes = Array.apply(null, { length: N }).map(Number.call, Number);
|
|
165
|
+
let indexValue = indexes.splice(nodeIndexToDelete, 1)[0]; //remove element
|
|
166
|
+
indexes.splice(state === 'left' ? index - 1 : index, 0, indexValue); //insert
|
|
167
|
+
|
|
168
|
+
node.children = Utils.orderByIndexes(node.children, indexes); //apply
|
|
169
|
+
(<FillDockContainer>node.container).tabHost.performTabsLayout(indexes);
|
|
170
|
+
this.dockManager.notifyOnTabsReorder(node);
|
|
182
171
|
}
|
|
183
172
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
173
|
+
_performDock(referenceNode: DockNode, newNode: DockNode, direction: string, insertBeforeReference: boolean) {
|
|
174
|
+
if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
|
|
175
|
+
referenceNode = referenceNode.parent;
|
|
176
|
+
|
|
177
|
+
if (direction === 'fill' && referenceNode.container.containerType === 'fill') {
|
|
178
|
+
referenceNode.addChild(newNode);
|
|
179
|
+
referenceNode.performLayout(false);
|
|
180
|
+
referenceNode.container.setActiveChild(newNode.container);
|
|
181
|
+
this.dockManager.invalidate();
|
|
182
|
+
this.dockManager.notifyOnDock(newNode);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Check if reference node is root node
|
|
187
|
+
let model = this.dockManager.context.model,
|
|
188
|
+
compositeContainer: IDockContainer,
|
|
189
|
+
compositeNode: DockNode,
|
|
190
|
+
referenceParent: DockNode;
|
|
191
|
+
|
|
192
|
+
if (referenceNode === model.rootNode) {
|
|
193
|
+
if (insertBeforeReference) {
|
|
194
|
+
compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
|
|
195
|
+
compositeNode = new DockNode(compositeContainer);
|
|
196
|
+
compositeNode.addChild(newNode);
|
|
197
|
+
compositeNode.addChild(referenceNode);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
compositeContainer = this._createDockContainer(direction, referenceNode, newNode);
|
|
201
|
+
compositeNode = new DockNode(compositeContainer);
|
|
202
|
+
compositeNode.addChild(referenceNode);
|
|
203
|
+
compositeNode.addChild(newNode);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Attach the root node to the dock manager's DOM
|
|
207
|
+
this.dockManager.setRootNode(compositeNode);
|
|
208
|
+
this.dockManager.rebuildLayout(this.dockManager.context.model.rootNode);
|
|
209
|
+
compositeNode.container.setActiveChild(newNode.container);
|
|
210
|
+
this.dockManager.invalidate();
|
|
211
|
+
this.dockManager.notifyOnDock(newNode);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (referenceNode.parent.container.containerType !== direction) {
|
|
216
|
+
referenceParent = referenceNode.parent;
|
|
217
|
+
|
|
218
|
+
// Get the dimensions of the reference node, for resizing later on
|
|
219
|
+
let referenceNodeWidth = referenceNode.container.containerElement.clientWidth;
|
|
220
|
+
let referenceNodeHeight = referenceNode.container.containerElement.clientHeight;
|
|
221
|
+
|
|
222
|
+
// Get the dimensions of the reference node, for resizing later on
|
|
223
|
+
let referenceNodeParentWidth = referenceParent.container.containerElement.clientWidth;
|
|
224
|
+
let referenceNodeParentHeight = referenceParent.container.containerElement.clientHeight;
|
|
225
|
+
|
|
226
|
+
// Replace the reference node with a new composite node with the reference and new node as it's children
|
|
227
|
+
compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
|
|
228
|
+
compositeNode = new DockNode(compositeContainer);
|
|
229
|
+
|
|
230
|
+
referenceParent.addChildAfter(referenceNode, compositeNode);
|
|
231
|
+
referenceNode.detachFromParent();
|
|
232
|
+
Utils.removeNode(referenceNode.container.containerElement);
|
|
233
|
+
|
|
234
|
+
if (insertBeforeReference) {
|
|
235
|
+
compositeNode.addChild(newNode);
|
|
236
|
+
compositeNode.addChild(referenceNode);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
compositeNode.addChild(referenceNode);
|
|
240
|
+
compositeNode.addChild(newNode);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
referenceParent.performLayout(false);
|
|
244
|
+
compositeNode.performLayout(true);
|
|
245
|
+
|
|
246
|
+
compositeNode.container.setActiveChild(newNode.container);
|
|
247
|
+
compositeNode.container.resize(referenceNodeWidth, referenceNodeHeight);
|
|
248
|
+
referenceParent.container.resize(referenceNodeParentWidth, referenceNodeParentHeight);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Add as a sibling, since the parent of the reference node is of the right composite type
|
|
252
|
+
referenceParent = referenceNode.parent;
|
|
253
|
+
if (insertBeforeReference)
|
|
254
|
+
referenceParent.addChildBefore(referenceNode, newNode);
|
|
255
|
+
else
|
|
256
|
+
referenceParent.addChildAfter(referenceNode, newNode);
|
|
257
|
+
referenceParent.performLayout(false);
|
|
258
|
+
referenceParent.container.setActiveChild(newNode.container);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// force resize the panel
|
|
262
|
+
let containerWidth = newNode.container.containerElement.clientWidth;
|
|
263
|
+
let containerHeight = newNode.container.containerElement.clientHeight;
|
|
264
|
+
newNode.container.resize(containerWidth, containerHeight);
|
|
265
|
+
|
|
266
|
+
this.dockManager.invalidate();
|
|
267
|
+
this.dockManager.notifyOnDock(newNode);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
_forceResizeCompositeContainer = (container: IDockContainer) => {
|
|
271
|
+
let width = container.containerElement.clientWidth;
|
|
272
|
+
let height = container.containerElement.clientHeight;
|
|
273
|
+
container.resize(width, height);
|
|
210
274
|
}
|
|
211
275
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
const referenceNodeParentWidth = referenceParent.container.containerElement.clientWidth;
|
|
221
|
-
const referenceNodeParentHeight = referenceParent.container.containerElement.clientHeight;
|
|
222
|
-
|
|
223
|
-
// Replace the reference node with a new composite node with the reference and new node as it's children
|
|
224
|
-
compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
|
|
225
|
-
compositeNode = new DockNode(compositeContainer);
|
|
226
|
-
|
|
227
|
-
referenceParent.addChildAfter(referenceNode, compositeNode);
|
|
228
|
-
referenceNode.detachFromParent();
|
|
229
|
-
Utils.removeNode(referenceNode.container.containerElement);
|
|
230
|
-
|
|
231
|
-
if (insertBeforeReference) {
|
|
232
|
-
compositeNode.addChild(newNode);
|
|
233
|
-
compositeNode.addChild(referenceNode);
|
|
234
|
-
} else {
|
|
235
|
-
compositeNode.addChild(referenceNode);
|
|
236
|
-
compositeNode.addChild(newNode);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
referenceParent.performLayout(false);
|
|
240
|
-
compositeNode.performLayout(true);
|
|
241
|
-
|
|
242
|
-
compositeNode.container.setActiveChild(newNode.container);
|
|
243
|
-
compositeNode.container.resize(referenceNodeWidth, referenceNodeHeight);
|
|
244
|
-
referenceParent.container.resize(referenceNodeParentWidth, referenceNodeParentHeight);
|
|
245
|
-
} else {
|
|
246
|
-
// Add as a sibling, since the parent of the reference node is of the right composite type
|
|
247
|
-
referenceParent = referenceNode.parent;
|
|
248
|
-
if (insertBeforeReference)
|
|
249
|
-
referenceParent.addChildBefore(referenceNode, newNode);
|
|
250
|
-
else
|
|
251
|
-
referenceParent.addChildAfter(referenceNode, newNode);
|
|
252
|
-
referenceParent.performLayout(false);
|
|
253
|
-
referenceParent.container.setActiveChild(newNode.container);
|
|
276
|
+
_createDockContainer(containerType: string, newNode: DockNode, referenceNode: DockNode) {
|
|
277
|
+
if (containerType === 'horizontal')
|
|
278
|
+
return new HorizontalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
|
|
279
|
+
if (containerType === 'vertical')
|
|
280
|
+
return new VerticalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
|
|
281
|
+
if (containerType === 'fill')
|
|
282
|
+
return new FillDockContainer(this.dockManager);
|
|
283
|
+
throw new Error('Failed to create dock container of type: ' + containerType);
|
|
254
284
|
}
|
|
255
285
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const containerHeight = newNode.container.containerElement.clientHeight;
|
|
259
|
-
newNode.container.resize(containerWidth, containerHeight);
|
|
260
|
-
|
|
261
|
-
this.dockManager.invalidate();
|
|
262
|
-
this.dockManager.notifyOnDock(newNode);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
_forceResizeCompositeContainer = (container: IDockContainer) => {
|
|
266
|
-
const width = container.containerElement.clientWidth;
|
|
267
|
-
const height = container.containerElement.clientHeight;
|
|
268
|
-
container.resize(width, height);
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
_createDockContainer(containerType: string, newNode: DockNode, referenceNode: DockNode) {
|
|
272
|
-
if (containerType === 'horizontal')
|
|
273
|
-
return new HorizontalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
|
|
274
|
-
if (containerType === 'vertical')
|
|
275
|
-
return new VerticalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
|
|
276
|
-
if (containerType === 'fill')
|
|
277
|
-
return new FillDockContainer(this.dockManager);
|
|
278
|
-
throw new Error('Failed to create dock container of type: ' + containerType);
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
/**
|
|
286
|
+
|
|
287
|
+
/**
|
|
283
288
|
* Gets the bounds of the new node if it were to dock with the specified configuration
|
|
284
289
|
* The state is not modified in this function. It is used for showing a preview of where
|
|
285
290
|
* the panel would be docked when hovered over a dock wheel button
|
|
286
291
|
*/
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
292
|
+
getDockBounds(referenceNode: DockNode, containerToDock: IDockContainer, direction: string, insertBeforeReference: boolean): IRectangle {
|
|
293
|
+
let compositeNode; // The node that contains the splitter / fill node
|
|
294
|
+
let childCount;
|
|
295
|
+
let childPosition;
|
|
296
|
+
let bounds: IRectangle;
|
|
297
|
+
|
|
298
|
+
if (direction === 'fill') {
|
|
299
|
+
// Since this is a fill operation, the highlight bounds is the same as the reference node
|
|
300
|
+
// TODO: Create a tab handle highlight to show that it's going to be docked in a tab
|
|
301
|
+
let targetElement = referenceNode.container.containerElement;
|
|
302
|
+
let outerRect = this.dockManager.element.getBoundingClientRect();
|
|
303
|
+
let targetElementRect = targetElement.getBoundingClientRect();
|
|
304
|
+
return { x: targetElementRect.left - outerRect.left, y: targetElementRect.top - outerRect.top, width: targetElement.clientWidth, height: targetElement.clientHeight };
|
|
305
|
+
}
|
|
301
306
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
307
|
+
if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
|
|
308
|
+
// Ignore the fill container's child and move one level up
|
|
309
|
+
referenceNode = referenceNode.parent;
|
|
310
|
+
|
|
311
|
+
// Flag to indicate of the renference node was replaced with a new composite node with 2 children
|
|
312
|
+
let hierarchyModified = false;
|
|
313
|
+
if (referenceNode.parent && referenceNode.parent.container.containerType === direction) {
|
|
314
|
+
// The parent already is of the desired composite type. Will be inserted as sibling to the reference node
|
|
315
|
+
compositeNode = referenceNode.parent;
|
|
316
|
+
childCount = compositeNode.children.length;
|
|
317
|
+
childPosition = compositeNode.children.indexOf(referenceNode) + (insertBeforeReference ? 0 : 1);
|
|
318
|
+
} else {
|
|
319
|
+
// The reference node will be replaced with a new composite node of the desired type with 2 children
|
|
320
|
+
compositeNode = referenceNode;
|
|
321
|
+
childCount = 1; // The newly inserted composite node will contain the reference node
|
|
322
|
+
childPosition = (insertBeforeReference ? 0 : 1);
|
|
323
|
+
hierarchyModified = true;
|
|
324
|
+
}
|
|
320
325
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
326
|
+
let splitBarSize = 5; // TODO: Get from DOM
|
|
327
|
+
let targetPanelSize = 0;
|
|
328
|
+
let targetPanelStart = 0;
|
|
329
|
+
if (direction === 'vertical' || direction === 'horizontal') {
|
|
330
|
+
// Existing size of the composite container (without the splitter bars).
|
|
331
|
+
// This will also be the final size of the composite (splitter / fill)
|
|
332
|
+
// container after the new panel has been docked
|
|
333
|
+
let compositeSize = this._getVaringDimension(compositeNode.container, direction) - (childCount - 1) * splitBarSize;
|
|
334
|
+
|
|
335
|
+
// size of the newly added panel
|
|
336
|
+
let newPanelOriginalSize = this._getVaringDimension(containerToDock, direction);
|
|
337
|
+
let scaleMultiplier = compositeSize / (compositeSize + newPanelOriginalSize);
|
|
338
|
+
|
|
339
|
+
// Size of the panel after it has been docked and scaled
|
|
340
|
+
targetPanelSize = newPanelOriginalSize * scaleMultiplier;
|
|
341
|
+
if (hierarchyModified)
|
|
342
|
+
targetPanelStart = insertBeforeReference ? 0 : compositeSize * scaleMultiplier;
|
|
343
|
+
else {
|
|
344
|
+
for (let i = 0; i < childPosition; i++)
|
|
345
|
+
targetPanelStart += this._getVaringDimension(compositeNode.children[i].container, direction);
|
|
346
|
+
targetPanelStart *= scaleMultiplier;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
344
349
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
350
|
+
bounds = {};
|
|
351
|
+
let outerRect = this.dockManager.element.getBoundingClientRect();
|
|
352
|
+
let rect = compositeNode.container.containerElement.getBoundingClientRect();
|
|
353
|
+
if (direction === 'vertical') {
|
|
354
|
+
bounds.x = rect.left - outerRect.left;
|
|
355
|
+
bounds.y = rect.top - outerRect.top + targetPanelStart;
|
|
356
|
+
bounds.width = compositeNode.container.width;
|
|
357
|
+
bounds.height = targetPanelSize;
|
|
358
|
+
} else if (direction === 'horizontal') {
|
|
359
|
+
bounds.x = rect.left - outerRect.left + targetPanelStart;
|
|
360
|
+
bounds.y = rect.top - outerRect.top;
|
|
361
|
+
bounds.width = targetPanelSize;
|
|
362
|
+
bounds.height = compositeNode.container.height;
|
|
363
|
+
}
|
|
359
364
|
|
|
360
|
-
|
|
361
|
-
|
|
365
|
+
return bounds;
|
|
366
|
+
}
|
|
362
367
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
368
|
+
_getVaringDimension(container: IDockContainer, direction: string): number {
|
|
369
|
+
if (direction === 'vertical')
|
|
370
|
+
return container.height;
|
|
371
|
+
if (direction === 'horizontal')
|
|
372
|
+
return container.width;
|
|
373
|
+
return 0;
|
|
374
|
+
}
|
|
370
375
|
}
|