@datagrok-libraries/dock-spawn-dg 0.0.1 → 0.0.3
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 +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 +170 -152
- package/src/DockManager.ts +860 -833
- 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 -146
- package/src/PanelContainer.ts +590 -574
- 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 +4 -4
- package/src/webcomponent/DockSpawnTsWebcomponent.d.ts.map +1 -0
- package/{lib → src}/webcomponent/DockSpawnTsWebcomponent.js +71 -63
- package/src/webcomponent/DockSpawnTsWebcomponent.ts +239 -239
- 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/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
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { DockNode } from
|
|
2
|
-
import { Utils } from
|
|
3
|
-
import { HorizontalDockContainer } from
|
|
4
|
-
import { VerticalDockContainer } from
|
|
5
|
-
import { FillDockContainer } from
|
|
1
|
+
import { DockNode } from "./DockNode";
|
|
2
|
+
import { Utils } from "./Utils";
|
|
3
|
+
import { HorizontalDockContainer } from "./HorizontalDockContainer";
|
|
4
|
+
import { VerticalDockContainer } from "./VerticalDockContainer";
|
|
5
|
+
import { FillDockContainer } from "./FillDockContainer";
|
|
6
6
|
export class DockLayoutEngine {
|
|
7
|
-
dockManager;
|
|
8
7
|
constructor(dockManager) {
|
|
8
|
+
this._forceResizeCompositeContainer = (container) => {
|
|
9
|
+
let width = container.containerElement.clientWidth;
|
|
10
|
+
let height = container.containerElement.clientHeight;
|
|
11
|
+
container.resize(width, height);
|
|
12
|
+
};
|
|
9
13
|
this.dockManager = dockManager;
|
|
10
14
|
}
|
|
11
15
|
/** docks the [newNode] to the left of [referenceNode] */
|
|
@@ -29,26 +33,26 @@ export class DockLayoutEngine {
|
|
|
29
33
|
this._performDock(referenceNode, newNode, 'fill', false);
|
|
30
34
|
}
|
|
31
35
|
undock(node) {
|
|
32
|
-
|
|
36
|
+
let parentNode = node.parent;
|
|
33
37
|
if (!parentNode)
|
|
34
38
|
throw new Error('Cannot undock. panel is not a leaf node');
|
|
35
39
|
// Get the position of the node relative to it's siblings
|
|
36
|
-
|
|
40
|
+
let siblingIndex = parentNode.children.indexOf(node);
|
|
37
41
|
// Detach the node from the dock manager's tree hierarchy
|
|
38
42
|
node.detachFromParent();
|
|
39
43
|
// Fix the node's parent hierarchy
|
|
40
44
|
if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
|
|
41
45
|
// If the child count falls below the minimum threshold, destroy the parent and merge
|
|
42
46
|
// the children with their grandparents
|
|
43
|
-
|
|
47
|
+
let grandParent = parentNode.parent;
|
|
44
48
|
for (let i = 0; i < parentNode.children.length; i++) {
|
|
45
|
-
|
|
49
|
+
let otherChild = parentNode.children[i];
|
|
46
50
|
if (grandParent) {
|
|
47
51
|
// parent node is not a root node
|
|
48
52
|
grandParent.addChildAfter(parentNode, otherChild);
|
|
49
53
|
parentNode.detachFromParent();
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
let width = parentNode.container.containerElement.clientWidth;
|
|
55
|
+
let height = parentNode.container.containerElement.clientHeight;
|
|
52
56
|
parentNode.container.destroy();
|
|
53
57
|
otherChild.container.resize(width, height);
|
|
54
58
|
grandParent.performLayout(false);
|
|
@@ -68,7 +72,7 @@ export class DockLayoutEngine {
|
|
|
68
72
|
parentNode.performLayout(false);
|
|
69
73
|
// Set the next sibling as the active child (e.g. for a Tab host, it would select it as the active tab)
|
|
70
74
|
if (parentNode.children.length > 0) {
|
|
71
|
-
|
|
75
|
+
let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
72
76
|
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
73
77
|
}
|
|
74
78
|
}
|
|
@@ -76,33 +80,33 @@ export class DockLayoutEngine {
|
|
|
76
80
|
this.dockManager.notifyOnUnDock(node);
|
|
77
81
|
}
|
|
78
82
|
close(node) {
|
|
79
|
-
|
|
83
|
+
let parentNode = node === null || node === void 0 ? void 0 : node.parent;
|
|
80
84
|
if (!parentNode)
|
|
81
85
|
throw new Error('Cannot undock. panel is not a leaf node');
|
|
82
86
|
//check if closed tab was the active one
|
|
83
87
|
let activetabClosed = false;
|
|
84
88
|
if (parentNode.children.length > 0) {
|
|
85
89
|
if (parentNode.container.tabHost != null) {
|
|
86
|
-
|
|
90
|
+
let activeTab = parentNode.container.tabHost.getActiveTab();
|
|
87
91
|
activetabClosed = activeTab.container == node.container;
|
|
88
92
|
}
|
|
89
93
|
}
|
|
90
94
|
// Get the position of the node relative to it's siblings
|
|
91
|
-
|
|
95
|
+
let siblingIndex = parentNode.children.indexOf(node);
|
|
92
96
|
// Detach the node from the dock manager's tree hierarchy
|
|
93
97
|
node.detachFromParent();
|
|
94
98
|
if (parentNode.children.length < parentNode.container.minimumAllowedChildNodes) {
|
|
95
99
|
// If the child count falls below the minimum threshold, destroy the parent and merge
|
|
96
100
|
// the children with their grandparents
|
|
97
|
-
|
|
101
|
+
let grandParent = parentNode.parent;
|
|
98
102
|
for (let i = 0; i < parentNode.children.length; i++) {
|
|
99
|
-
|
|
103
|
+
let otherChild = parentNode.children[i];
|
|
100
104
|
if (grandParent) {
|
|
101
105
|
// parent node is not a root node
|
|
102
106
|
grandParent.addChildAfter(parentNode, otherChild);
|
|
103
107
|
parentNode.detachFromParent();
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
let width = parentNode.container.containerElement.clientWidth;
|
|
109
|
+
let height = parentNode.container.containerElement.clientHeight;
|
|
106
110
|
otherChild.container.resize(width, height);
|
|
107
111
|
parentNode.container.destroy();
|
|
108
112
|
grandParent.performLayout(false);
|
|
@@ -121,7 +125,7 @@ export class DockLayoutEngine {
|
|
|
121
125
|
// using the parent composite container.
|
|
122
126
|
parentNode.performLayout(false);
|
|
123
127
|
if (activetabClosed) {
|
|
124
|
-
|
|
128
|
+
let nextActiveSibling = parentNode.children[Math.max(0, siblingIndex - 1)];
|
|
125
129
|
if (nextActiveSibling != null)
|
|
126
130
|
parentNode.container.setActiveChild(nextActiveSibling.container);
|
|
127
131
|
}
|
|
@@ -130,14 +134,14 @@ export class DockLayoutEngine {
|
|
|
130
134
|
this.dockManager.notifyOnUnDock(node);
|
|
131
135
|
}
|
|
132
136
|
reorderTabs(node, handle, state, index) {
|
|
133
|
-
|
|
134
|
-
|
|
137
|
+
let N = node.children.length;
|
|
138
|
+
let nodeIndexToDelete = state === 'left' ? index : index + 1;
|
|
135
139
|
if (state == 'right' && nodeIndexToDelete >= node.children.length)
|
|
136
140
|
return;
|
|
137
141
|
if (state == 'left' && nodeIndexToDelete == 0)
|
|
138
142
|
return;
|
|
139
|
-
|
|
140
|
-
|
|
143
|
+
let indexes = Array.apply(null, { length: N }).map(Number.call, Number);
|
|
144
|
+
let indexValue = indexes.splice(nodeIndexToDelete, 1)[0]; //remove element
|
|
141
145
|
indexes.splice(state === 'left' ? index - 1 : index, 0, indexValue); //insert
|
|
142
146
|
node.children = Utils.orderByIndexes(node.children, indexes); //apply
|
|
143
147
|
node.container.tabHost.performTabsLayout(indexes);
|
|
@@ -155,10 +159,7 @@ export class DockLayoutEngine {
|
|
|
155
159
|
return;
|
|
156
160
|
}
|
|
157
161
|
// Check if reference node is root node
|
|
158
|
-
|
|
159
|
-
let compositeContainer;
|
|
160
|
-
let compositeNode;
|
|
161
|
-
let referenceParent;
|
|
162
|
+
let model = this.dockManager.context.model, compositeContainer, compositeNode, referenceParent;
|
|
162
163
|
if (referenceNode === model.rootNode) {
|
|
163
164
|
if (insertBeforeReference) {
|
|
164
165
|
compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
|
|
@@ -183,11 +184,11 @@ export class DockLayoutEngine {
|
|
|
183
184
|
if (referenceNode.parent.container.containerType !== direction) {
|
|
184
185
|
referenceParent = referenceNode.parent;
|
|
185
186
|
// Get the dimensions of the reference node, for resizing later on
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
let referenceNodeWidth = referenceNode.container.containerElement.clientWidth;
|
|
188
|
+
let referenceNodeHeight = referenceNode.container.containerElement.clientHeight;
|
|
188
189
|
// Get the dimensions of the reference node, for resizing later on
|
|
189
|
-
|
|
190
|
-
|
|
190
|
+
let referenceNodeParentWidth = referenceParent.container.containerElement.clientWidth;
|
|
191
|
+
let referenceNodeParentHeight = referenceParent.container.containerElement.clientHeight;
|
|
191
192
|
// Replace the reference node with a new composite node with the reference and new node as it's children
|
|
192
193
|
compositeContainer = this._createDockContainer(direction, newNode, referenceNode);
|
|
193
194
|
compositeNode = new DockNode(compositeContainer);
|
|
@@ -219,17 +220,12 @@ export class DockLayoutEngine {
|
|
|
219
220
|
referenceParent.container.setActiveChild(newNode.container);
|
|
220
221
|
}
|
|
221
222
|
// force resize the panel
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
let containerWidth = newNode.container.containerElement.clientWidth;
|
|
224
|
+
let containerHeight = newNode.container.containerElement.clientHeight;
|
|
224
225
|
newNode.container.resize(containerWidth, containerHeight);
|
|
225
226
|
this.dockManager.invalidate();
|
|
226
227
|
this.dockManager.notifyOnDock(newNode);
|
|
227
228
|
}
|
|
228
|
-
_forceResizeCompositeContainer = (container) => {
|
|
229
|
-
const width = container.containerElement.clientWidth;
|
|
230
|
-
const height = container.containerElement.clientHeight;
|
|
231
|
-
container.resize(width, height);
|
|
232
|
-
};
|
|
233
229
|
_createDockContainer(containerType, newNode, referenceNode) {
|
|
234
230
|
if (containerType === 'horizontal')
|
|
235
231
|
return new HorizontalDockContainer(this.dockManager, [newNode.container, referenceNode.container]);
|
|
@@ -240,10 +236,10 @@ export class DockLayoutEngine {
|
|
|
240
236
|
throw new Error('Failed to create dock container of type: ' + containerType);
|
|
241
237
|
}
|
|
242
238
|
/**
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
239
|
+
* Gets the bounds of the new node if it were to dock with the specified configuration
|
|
240
|
+
* The state is not modified in this function. It is used for showing a preview of where
|
|
241
|
+
* the panel would be docked when hovered over a dock wheel button
|
|
242
|
+
*/
|
|
247
243
|
getDockBounds(referenceNode, containerToDock, direction, insertBeforeReference) {
|
|
248
244
|
let compositeNode; // The node that contains the splitter / fill node
|
|
249
245
|
let childCount;
|
|
@@ -252,9 +248,9 @@ export class DockLayoutEngine {
|
|
|
252
248
|
if (direction === 'fill') {
|
|
253
249
|
// Since this is a fill operation, the highlight bounds is the same as the reference node
|
|
254
250
|
// TODO: Create a tab handle highlight to show that it's going to be docked in a tab
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
251
|
+
let targetElement = referenceNode.container.containerElement;
|
|
252
|
+
let outerRect = this.dockManager.element.getBoundingClientRect();
|
|
253
|
+
let targetElementRect = targetElement.getBoundingClientRect();
|
|
258
254
|
return { x: targetElementRect.left - outerRect.left, y: targetElementRect.top - outerRect.top, width: targetElement.clientWidth, height: targetElement.clientHeight };
|
|
259
255
|
}
|
|
260
256
|
if (referenceNode.parent && referenceNode.parent.container.containerType === 'fill')
|
|
@@ -275,17 +271,17 @@ export class DockLayoutEngine {
|
|
|
275
271
|
childPosition = (insertBeforeReference ? 0 : 1);
|
|
276
272
|
hierarchyModified = true;
|
|
277
273
|
}
|
|
278
|
-
|
|
274
|
+
let splitBarSize = 5; // TODO: Get from DOM
|
|
279
275
|
let targetPanelSize = 0;
|
|
280
276
|
let targetPanelStart = 0;
|
|
281
277
|
if (direction === 'vertical' || direction === 'horizontal') {
|
|
282
278
|
// Existing size of the composite container (without the splitter bars).
|
|
283
279
|
// This will also be the final size of the composite (splitter / fill)
|
|
284
280
|
// container after the new panel has been docked
|
|
285
|
-
|
|
281
|
+
let compositeSize = this._getVaringDimension(compositeNode.container, direction) - (childCount - 1) * splitBarSize;
|
|
286
282
|
// size of the newly added panel
|
|
287
|
-
|
|
288
|
-
|
|
283
|
+
let newPanelOriginalSize = this._getVaringDimension(containerToDock, direction);
|
|
284
|
+
let scaleMultiplier = compositeSize / (compositeSize + newPanelOriginalSize);
|
|
289
285
|
// Size of the panel after it has been docked and scaled
|
|
290
286
|
targetPanelSize = newPanelOriginalSize * scaleMultiplier;
|
|
291
287
|
if (hierarchyModified)
|
|
@@ -297,8 +293,8 @@ export class DockLayoutEngine {
|
|
|
297
293
|
}
|
|
298
294
|
}
|
|
299
295
|
bounds = {};
|
|
300
|
-
|
|
301
|
-
|
|
296
|
+
let outerRect = this.dockManager.element.getBoundingClientRect();
|
|
297
|
+
let rect = compositeNode.container.containerElement.getBoundingClientRect();
|
|
302
298
|
if (direction === 'vertical') {
|
|
303
299
|
bounds.x = rect.left - outerRect.left;
|
|
304
300
|
bounds.y = rect.top - outerRect.top + targetPanelStart;
|