dockview-core 1.7.3 → 1.7.4
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/dist/cjs/api/dockviewPanelApi.js +1 -1
- package/dist/cjs/api/dockviewPanelApi.js.map +1 -1
- package/dist/cjs/api/panelApi.d.ts.map +1 -1
- package/dist/cjs/api/panelApi.js +3 -5
- package/dist/cjs/api/panelApi.js.map +1 -1
- package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
- package/dist/cjs/dnd/abstractDragHandler.js +1 -0
- package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
- package/dist/cjs/dnd/droptarget.d.ts.map +1 -1
- package/dist/cjs/dnd/droptarget.js +1 -0
- package/dist/cjs/dnd/droptarget.js.map +1 -1
- package/dist/cjs/dnd/groupDragHandler.d.ts +0 -1
- package/dist/cjs/dnd/groupDragHandler.d.ts.map +1 -1
- package/dist/cjs/dnd/groupDragHandler.js +0 -3
- package/dist/cjs/dnd/groupDragHandler.js.map +1 -1
- package/dist/cjs/dockview/components/panel/content.d.ts.map +1 -1
- package/dist/cjs/dockview/components/panel/content.js +2 -2
- package/dist/cjs/dockview/components/panel/content.js.map +1 -1
- package/dist/cjs/dockview/components/tab/tab.d.ts +2 -2
- package/dist/cjs/dockview/components/tab/tab.d.ts.map +1 -1
- package/dist/cjs/dockview/components/tab/tab.js +2 -7
- package/dist/cjs/dockview/components/tab/tab.js.map +1 -1
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +27 -3
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.js +23 -21
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +2 -2
- package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanel.d.ts +5 -4
- package/dist/cjs/dockview/dockviewPanel.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewPanel.js +33 -5
- package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +4 -3
- package/dist/cjs/dockview/dockviewPanelModel.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/cjs/dockview/types.d.ts +1 -5
- package/dist/cjs/dockview/types.d.ts.map +1 -1
- package/dist/cjs/dockview/types.js.map +1 -1
- package/dist/cjs/dom.js +1 -5
- package/dist/cjs/dom.js.map +1 -1
- package/dist/cjs/events.d.ts +17 -0
- package/dist/cjs/events.d.ts.map +1 -1
- package/dist/cjs/events.js +94 -7
- package/dist/cjs/events.js.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +2 -3
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
- package/dist/cjs/gridview/basePanelView.d.ts.map +1 -1
- package/dist/cjs/gridview/basePanelView.js +41 -8
- package/dist/cjs/gridview/basePanelView.js.map +1 -1
- package/dist/cjs/gridview/branchNode.d.ts +1 -1
- package/dist/cjs/gridview/branchNode.d.ts.map +1 -1
- package/dist/cjs/gridview/branchNode.js +3 -3
- package/dist/cjs/gridview/branchNode.js.map +1 -1
- package/dist/cjs/gridview/gridview.d.ts.map +1 -1
- package/dist/cjs/gridview/gridview.js +21 -13
- package/dist/cjs/gridview/gridview.js.map +1 -1
- package/dist/cjs/gridview/gridviewPanel.js +2 -2
- package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
- package/dist/cjs/lifecycle.d.ts +1 -1
- package/dist/cjs/lifecycle.d.ts.map +1 -1
- package/dist/cjs/lifecycle.js +3 -3
- package/dist/cjs/lifecycle.js.map +1 -1
- package/dist/cjs/splitview/splitview.d.ts +3 -2
- package/dist/cjs/splitview/splitview.d.ts.map +1 -1
- package/dist/cjs/splitview/splitview.js +103 -84
- package/dist/cjs/splitview/splitview.js.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.d.ts +2 -2
- package/dist/cjs/splitview/splitviewComponent.d.ts.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.js +36 -20
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
- package/dist/dockview-core.amd.js +280 -189
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.noStyle.js +280 -189
- package/dist/dockview-core.cjs.js +280 -189
- package/dist/dockview-core.esm.js +280 -189
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.js +280 -189
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.noStyle.js +280 -189
- package/dist/esm/api/dockviewPanelApi.js +1 -1
- package/dist/esm/api/dockviewPanelApi.js.map +1 -1
- package/dist/esm/api/panelApi.d.ts.map +1 -1
- package/dist/esm/api/panelApi.js +3 -5
- package/dist/esm/api/panelApi.js.map +1 -1
- package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
- package/dist/esm/dnd/abstractDragHandler.js +1 -0
- package/dist/esm/dnd/abstractDragHandler.js.map +1 -1
- package/dist/esm/dnd/droptarget.d.ts.map +1 -1
- package/dist/esm/dnd/droptarget.js +1 -0
- package/dist/esm/dnd/droptarget.js.map +1 -1
- package/dist/esm/dnd/groupDragHandler.d.ts +0 -1
- package/dist/esm/dnd/groupDragHandler.d.ts.map +1 -1
- package/dist/esm/dnd/groupDragHandler.js +0 -3
- package/dist/esm/dnd/groupDragHandler.js.map +1 -1
- package/dist/esm/dockview/components/panel/content.d.ts.map +1 -1
- package/dist/esm/dockview/components/panel/content.js +2 -2
- package/dist/esm/dockview/components/panel/content.js.map +1 -1
- package/dist/esm/dockview/components/tab/tab.d.ts +2 -2
- package/dist/esm/dockview/components/tab/tab.d.ts.map +1 -1
- package/dist/esm/dockview/components/tab/tab.js +2 -7
- package/dist/esm/dockview/components/tab/tab.js.map +1 -1
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts.map +1 -1
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +5 -3
- package/dist/esm/dockview/components/titlebar/tabsContainer.js.map +1 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +1 -1
- package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewComponent.js +23 -21
- package/dist/esm/dockview/dockviewComponent.js.map +1 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.js +2 -2
- package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanel.d.ts +5 -4
- package/dist/esm/dockview/dockviewPanel.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewPanel.js +11 -5
- package/dist/esm/dockview/dockviewPanel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanelModel.d.ts +4 -3
- package/dist/esm/dockview/dockviewPanelModel.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/esm/dockview/types.d.ts +1 -5
- package/dist/esm/dockview/types.d.ts.map +1 -1
- package/dist/esm/dockview/types.js.map +1 -1
- package/dist/esm/dom.js +1 -5
- package/dist/esm/dom.js.map +1 -1
- package/dist/esm/events.d.ts +17 -0
- package/dist/esm/events.d.ts.map +1 -1
- package/dist/esm/events.js +75 -7
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +2 -3
- package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
- package/dist/esm/gridview/basePanelView.d.ts.map +1 -1
- package/dist/esm/gridview/basePanelView.js +16 -5
- package/dist/esm/gridview/basePanelView.js.map +1 -1
- package/dist/esm/gridview/branchNode.d.ts +1 -1
- package/dist/esm/gridview/branchNode.d.ts.map +1 -1
- package/dist/esm/gridview/branchNode.js +3 -3
- package/dist/esm/gridview/branchNode.js.map +1 -1
- package/dist/esm/gridview/gridview.d.ts.map +1 -1
- package/dist/esm/gridview/gridview.js +19 -11
- package/dist/esm/gridview/gridview.js.map +1 -1
- package/dist/esm/gridview/gridviewPanel.js +2 -2
- package/dist/esm/gridview/gridviewPanel.js.map +1 -1
- package/dist/esm/lifecycle.d.ts +1 -1
- package/dist/esm/lifecycle.d.ts.map +1 -1
- package/dist/esm/lifecycle.js +3 -3
- package/dist/esm/lifecycle.js.map +1 -1
- package/dist/esm/splitview/splitview.d.ts +3 -2
- package/dist/esm/splitview/splitview.d.ts.map +1 -1
- package/dist/esm/splitview/splitview.js +90 -84
- package/dist/esm/splitview/splitview.js.map +1 -1
- package/dist/esm/splitview/splitviewComponent.d.ts +2 -2
- package/dist/esm/splitview/splitviewComponent.d.ts.map +1 -1
- package/dist/esm/splitview/splitviewComponent.js +22 -16
- package/dist/esm/splitview/splitviewComponent.js.map +1 -1
- package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -1
- package/dist/esm/splitview/splitviewPanel.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 1.7.
|
|
3
|
+
* @version 1.7.4
|
|
4
4
|
* @link https://github.com/mathuo/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -119,9 +119,49 @@ var Event;
|
|
|
119
119
|
};
|
|
120
120
|
};
|
|
121
121
|
})(Event || (Event = {}));
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
class LeakageMonitor {
|
|
123
|
+
constructor() {
|
|
124
|
+
this.events = new Map();
|
|
125
|
+
}
|
|
126
|
+
get size() {
|
|
127
|
+
return this.events.size;
|
|
128
|
+
}
|
|
129
|
+
add(event, stacktrace) {
|
|
130
|
+
this.events.set(event, stacktrace);
|
|
131
|
+
}
|
|
132
|
+
delete(event) {
|
|
133
|
+
this.events.delete(event);
|
|
134
|
+
}
|
|
135
|
+
clear() {
|
|
136
|
+
this.events.clear();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
class Stacktrace {
|
|
140
|
+
static create() {
|
|
141
|
+
var _a;
|
|
142
|
+
return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
|
|
143
|
+
}
|
|
144
|
+
constructor(value) {
|
|
145
|
+
this.value = value;
|
|
146
|
+
}
|
|
147
|
+
print() {
|
|
148
|
+
console.warn(this.value);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
class Listener {
|
|
152
|
+
constructor(callback, stacktrace) {
|
|
153
|
+
this.callback = callback;
|
|
154
|
+
this.stacktrace = stacktrace;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
|
|
124
158
|
class Emitter {
|
|
159
|
+
static setLeakageMonitorEnabled(isEnabled) {
|
|
160
|
+
if (isEnabled !== Emitter.ENABLE_TRACKING) {
|
|
161
|
+
Emitter.MEMORY_LEAK_WATCHER.clear();
|
|
162
|
+
}
|
|
163
|
+
Emitter.ENABLE_TRACKING = isEnabled;
|
|
164
|
+
}
|
|
125
165
|
constructor(options) {
|
|
126
166
|
this.options = options;
|
|
127
167
|
this._listeners = [];
|
|
@@ -129,11 +169,12 @@ class Emitter {
|
|
|
129
169
|
}
|
|
130
170
|
get event() {
|
|
131
171
|
if (!this._event) {
|
|
132
|
-
this._event = (
|
|
172
|
+
this._event = (callback) => {
|
|
133
173
|
var _a;
|
|
134
174
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
|
|
135
|
-
|
|
175
|
+
callback(this._last);
|
|
136
176
|
}
|
|
177
|
+
const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
|
|
137
178
|
this._listeners.push(listener);
|
|
138
179
|
return {
|
|
139
180
|
dispose: () => {
|
|
@@ -141,23 +182,45 @@ class Emitter {
|
|
|
141
182
|
if (index > -1) {
|
|
142
183
|
this._listeners.splice(index, 1);
|
|
143
184
|
}
|
|
185
|
+
else if (Emitter.ENABLE_TRACKING) ;
|
|
144
186
|
},
|
|
145
187
|
};
|
|
146
188
|
};
|
|
189
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
190
|
+
Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
|
|
191
|
+
}
|
|
147
192
|
}
|
|
148
193
|
return this._event;
|
|
149
194
|
}
|
|
150
195
|
fire(e) {
|
|
151
196
|
this._last = e;
|
|
152
197
|
for (const listener of this._listeners) {
|
|
153
|
-
listener(e);
|
|
198
|
+
listener.callback(e);
|
|
154
199
|
}
|
|
155
200
|
}
|
|
156
201
|
dispose() {
|
|
157
|
-
this.
|
|
158
|
-
|
|
202
|
+
if (!this._disposed) {
|
|
203
|
+
this._disposed = true;
|
|
204
|
+
if (this._listeners.length > 0) {
|
|
205
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
206
|
+
queueMicrotask(() => {
|
|
207
|
+
var _a;
|
|
208
|
+
// don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
|
|
209
|
+
for (const listener of this._listeners) {
|
|
210
|
+
console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
this._listeners = [];
|
|
215
|
+
}
|
|
216
|
+
if (Emitter.ENABLE_TRACKING && this._event) {
|
|
217
|
+
Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
159
220
|
}
|
|
160
221
|
}
|
|
222
|
+
Emitter.ENABLE_TRACKING = false;
|
|
223
|
+
Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
|
|
161
224
|
function addDisposableWindowListener(element, type, listener, options) {
|
|
162
225
|
element.addEventListener(type, listener, options);
|
|
163
226
|
return {
|
|
@@ -210,13 +273,13 @@ class CompositeDisposable {
|
|
|
210
273
|
}
|
|
211
274
|
constructor(...args) {
|
|
212
275
|
this._isDisposed = false;
|
|
213
|
-
this.
|
|
276
|
+
this._disposables = args;
|
|
214
277
|
}
|
|
215
278
|
addDisposables(...args) {
|
|
216
|
-
args.forEach((arg) => this.
|
|
279
|
+
args.forEach((arg) => this._disposables.push(arg));
|
|
217
280
|
}
|
|
218
281
|
dispose() {
|
|
219
|
-
this.
|
|
282
|
+
this._disposables.forEach((arg) => arg.dispose());
|
|
220
283
|
this._isDisposed = true;
|
|
221
284
|
}
|
|
222
285
|
}
|
|
@@ -306,6 +369,7 @@ class FocusTracker extends CompositeDisposable {
|
|
|
306
369
|
this.onDidFocus = this._onDidFocus.event;
|
|
307
370
|
this._onDidBlur = new Emitter();
|
|
308
371
|
this.onDidBlur = this._onDidBlur.event;
|
|
372
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
309
373
|
let hasFocus = isAncestor(document.activeElement, element);
|
|
310
374
|
let loosingFocus = false;
|
|
311
375
|
const onFocus = () => {
|
|
@@ -350,11 +414,6 @@ class FocusTracker extends CompositeDisposable {
|
|
|
350
414
|
refreshState() {
|
|
351
415
|
this._refreshStateHandler();
|
|
352
416
|
}
|
|
353
|
-
dispose() {
|
|
354
|
-
super.dispose();
|
|
355
|
-
this._onDidBlur.dispose();
|
|
356
|
-
this._onDidFocus.dispose();
|
|
357
|
-
}
|
|
358
417
|
}
|
|
359
418
|
|
|
360
419
|
function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
|
|
@@ -583,7 +642,7 @@ class Splitview {
|
|
|
583
642
|
this._orthogonalSize = value;
|
|
584
643
|
}
|
|
585
644
|
get length() {
|
|
586
|
-
return this.
|
|
645
|
+
return this.viewItems.length;
|
|
587
646
|
}
|
|
588
647
|
get proportions() {
|
|
589
648
|
return this._proportions ? [...this._proportions] : undefined;
|
|
@@ -602,12 +661,12 @@ class Splitview {
|
|
|
602
661
|
: 'vertical');
|
|
603
662
|
}
|
|
604
663
|
get minimumSize() {
|
|
605
|
-
return this.
|
|
664
|
+
return this.viewItems.reduce((r, item) => r + item.minimumSize, 0);
|
|
606
665
|
}
|
|
607
666
|
get maximumSize() {
|
|
608
667
|
return this.length === 0
|
|
609
668
|
? Number.POSITIVE_INFINITY
|
|
610
|
-
: this.
|
|
669
|
+
: this.viewItems.reduce((r, item) => r + item.maximumSize, 0);
|
|
611
670
|
}
|
|
612
671
|
get startSnappingEnabled() {
|
|
613
672
|
return this._startSnappingEnabled;
|
|
@@ -631,7 +690,7 @@ class Splitview {
|
|
|
631
690
|
}
|
|
632
691
|
constructor(container, options) {
|
|
633
692
|
this.container = container;
|
|
634
|
-
this.
|
|
693
|
+
this.viewItems = [];
|
|
635
694
|
this.sashes = [];
|
|
636
695
|
this._size = 0;
|
|
637
696
|
this._orthogonalSize = 0;
|
|
@@ -645,12 +704,12 @@ class Splitview {
|
|
|
645
704
|
this.onDidAddView = this._onDidAddView.event;
|
|
646
705
|
this._onDidRemoveView = new Emitter();
|
|
647
706
|
this.onDidRemoveView = this._onDidRemoveView.event;
|
|
648
|
-
this.resize = (index, delta, sizes = this.
|
|
649
|
-
if (index < 0 || index > this.
|
|
707
|
+
this.resize = (index, delta, sizes = this.viewItems.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
|
|
708
|
+
if (index < 0 || index > this.viewItems.length) {
|
|
650
709
|
return 0;
|
|
651
710
|
}
|
|
652
711
|
const upIndexes = range(index, -1);
|
|
653
|
-
const downIndexes = range(index + 1, this.
|
|
712
|
+
const downIndexes = range(index + 1, this.viewItems.length);
|
|
654
713
|
//
|
|
655
714
|
if (highPriorityIndexes) {
|
|
656
715
|
for (const i of highPriorityIndexes) {
|
|
@@ -665,34 +724,34 @@ class Splitview {
|
|
|
665
724
|
}
|
|
666
725
|
}
|
|
667
726
|
//
|
|
668
|
-
const upItems = upIndexes.map((i) => this.
|
|
727
|
+
const upItems = upIndexes.map((i) => this.viewItems[i]);
|
|
669
728
|
const upSizes = upIndexes.map((i) => sizes[i]);
|
|
670
729
|
//
|
|
671
|
-
const downItems = downIndexes.map((i) => this.
|
|
730
|
+
const downItems = downIndexes.map((i) => this.viewItems[i]);
|
|
672
731
|
const downSizes = downIndexes.map((i) => sizes[i]);
|
|
673
732
|
//
|
|
674
|
-
const minDeltaUp = upIndexes.reduce((_, i) => _ + this.
|
|
675
|
-
const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.
|
|
733
|
+
const minDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].minimumSize - sizes[i], 0);
|
|
734
|
+
const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].maximumSize - sizes[i], 0);
|
|
676
735
|
//
|
|
677
736
|
const maxDeltaDown = downIndexes.length === 0
|
|
678
737
|
? Number.POSITIVE_INFINITY
|
|
679
|
-
: downIndexes.reduce((_, i) => _ + sizes[i] - this.
|
|
738
|
+
: downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].minimumSize, 0);
|
|
680
739
|
const minDeltaDown = downIndexes.length === 0
|
|
681
740
|
? Number.NEGATIVE_INFINITY
|
|
682
|
-
: downIndexes.reduce((_, i) => _ + sizes[i] - this.
|
|
741
|
+
: downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].maximumSize, 0);
|
|
683
742
|
//
|
|
684
743
|
const minDelta = Math.max(minDeltaUp, minDeltaDown);
|
|
685
744
|
const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
|
|
686
745
|
//
|
|
687
746
|
let snapped = false;
|
|
688
747
|
if (snapBefore) {
|
|
689
|
-
const snapView = this.
|
|
748
|
+
const snapView = this.viewItems[snapBefore.index];
|
|
690
749
|
const visible = delta >= snapBefore.limitDelta;
|
|
691
750
|
snapped = visible !== snapView.visible;
|
|
692
751
|
snapView.setVisible(visible, snapBefore.size);
|
|
693
752
|
}
|
|
694
753
|
if (!snapped && snapAfter) {
|
|
695
|
-
const snapView = this.
|
|
754
|
+
const snapView = this.viewItems[snapAfter.index];
|
|
696
755
|
const visible = delta < snapAfter.limitDelta;
|
|
697
756
|
snapped = visible !== snapView.visible;
|
|
698
757
|
snapView.setVisible(visible, snapAfter.size);
|
|
@@ -754,7 +813,7 @@ class Splitview {
|
|
|
754
813
|
);
|
|
755
814
|
});
|
|
756
815
|
// Initialize content size and proportions for first layout
|
|
757
|
-
this.contentSize = this.
|
|
816
|
+
this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
758
817
|
this.saveProportions();
|
|
759
818
|
}
|
|
760
819
|
}
|
|
@@ -771,18 +830,18 @@ class Splitview {
|
|
|
771
830
|
}
|
|
772
831
|
}
|
|
773
832
|
isViewVisible(index) {
|
|
774
|
-
if (index < 0 || index >= this.
|
|
833
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
775
834
|
throw new Error('Index out of bounds');
|
|
776
835
|
}
|
|
777
|
-
const viewItem = this.
|
|
836
|
+
const viewItem = this.viewItems[index];
|
|
778
837
|
return viewItem.visible;
|
|
779
838
|
}
|
|
780
839
|
setViewVisible(index, visible) {
|
|
781
|
-
if (index < 0 || index >= this.
|
|
840
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
782
841
|
throw new Error('Index out of bounds');
|
|
783
842
|
}
|
|
784
843
|
toggleClass(this.container, 'visible', visible);
|
|
785
|
-
const viewItem = this.
|
|
844
|
+
const viewItem = this.viewItems[index];
|
|
786
845
|
toggleClass(this.container, 'visible', visible);
|
|
787
846
|
viewItem.setVisible(visible, viewItem.size);
|
|
788
847
|
this.distributeEmptySpace(index);
|
|
@@ -790,33 +849,33 @@ class Splitview {
|
|
|
790
849
|
this.saveProportions();
|
|
791
850
|
}
|
|
792
851
|
getViewSize(index) {
|
|
793
|
-
if (index < 0 || index >= this.
|
|
852
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
794
853
|
return -1;
|
|
795
854
|
}
|
|
796
|
-
return this.
|
|
855
|
+
return this.viewItems[index].size;
|
|
797
856
|
}
|
|
798
857
|
resizeView(index, size) {
|
|
799
|
-
if (index < 0 || index >= this.
|
|
858
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
800
859
|
return;
|
|
801
860
|
}
|
|
802
|
-
const indexes = range(this.
|
|
861
|
+
const indexes = range(this.viewItems.length).filter((i) => i !== index);
|
|
803
862
|
const lowPriorityIndexes = [
|
|
804
|
-
...indexes.filter((i) => this.
|
|
863
|
+
...indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low),
|
|
805
864
|
index,
|
|
806
865
|
];
|
|
807
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
808
|
-
const item = this.
|
|
866
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
867
|
+
const item = this.viewItems[index];
|
|
809
868
|
size = Math.round(size);
|
|
810
869
|
size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
|
|
811
870
|
item.size = size;
|
|
812
871
|
this.relayout(lowPriorityIndexes, highPriorityIndexes);
|
|
813
872
|
}
|
|
814
873
|
getViews() {
|
|
815
|
-
return this.
|
|
874
|
+
return this.viewItems.map((x) => x.view);
|
|
816
875
|
}
|
|
817
876
|
onDidChange(item, size) {
|
|
818
|
-
const index = this.
|
|
819
|
-
if (index < 0 || index >= this.
|
|
877
|
+
const index = this.viewItems.indexOf(item);
|
|
878
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
820
879
|
return;
|
|
821
880
|
}
|
|
822
881
|
size = typeof size === 'number' ? size : item.size;
|
|
@@ -824,7 +883,7 @@ class Splitview {
|
|
|
824
883
|
item.size = size;
|
|
825
884
|
this.relayout([index]);
|
|
826
885
|
}
|
|
827
|
-
addView(view, size = { type: 'distribute' }, index = this.
|
|
886
|
+
addView(view, size = { type: 'distribute' }, index = this.viewItems.length, skipLayout) {
|
|
828
887
|
const container = document.createElement('div');
|
|
829
888
|
container.className = 'view';
|
|
830
889
|
container.appendChild(view.element);
|
|
@@ -842,24 +901,25 @@ class Splitview {
|
|
|
842
901
|
viewSize = view.minimumSize;
|
|
843
902
|
}
|
|
844
903
|
const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize.size));
|
|
845
|
-
const
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
904
|
+
const viewItem = new ViewItem(container, view, viewSize, {
|
|
905
|
+
dispose: () => {
|
|
906
|
+
disposable.dispose();
|
|
907
|
+
this.viewContainer.removeChild(container);
|
|
908
|
+
},
|
|
909
|
+
});
|
|
910
|
+
if (index === this.viewItems.length) {
|
|
851
911
|
this.viewContainer.appendChild(container);
|
|
852
912
|
}
|
|
853
913
|
else {
|
|
854
914
|
this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
|
|
855
915
|
}
|
|
856
|
-
this.
|
|
857
|
-
if (this.
|
|
916
|
+
this.viewItems.splice(index, 0, viewItem);
|
|
917
|
+
if (this.viewItems.length > 1) {
|
|
858
918
|
//add sash
|
|
859
919
|
const sash = document.createElement('div');
|
|
860
920
|
sash.className = 'sash';
|
|
861
921
|
const onStart = (event) => {
|
|
862
|
-
for (const item of this.
|
|
922
|
+
for (const item of this.viewItems) {
|
|
863
923
|
item.enabled = false;
|
|
864
924
|
}
|
|
865
925
|
const iframes = [
|
|
@@ -874,27 +934,29 @@ class Splitview {
|
|
|
874
934
|
: event.clientY;
|
|
875
935
|
const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
|
|
876
936
|
//
|
|
877
|
-
const sizes = this.
|
|
937
|
+
const sizes = this.viewItems.map((x) => x.size);
|
|
878
938
|
//
|
|
879
939
|
let snapBefore;
|
|
880
940
|
let snapAfter;
|
|
881
941
|
const upIndexes = range(sashIndex, -1);
|
|
882
|
-
const downIndexes = range(sashIndex + 1, this.
|
|
883
|
-
const minDeltaUp = upIndexes.reduce((r, i) => r + (this.
|
|
884
|
-
const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.
|
|
942
|
+
const downIndexes = range(sashIndex + 1, this.viewItems.length);
|
|
943
|
+
const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);
|
|
944
|
+
const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].viewMaximumSize - sizes[i]), 0);
|
|
885
945
|
const maxDeltaDown = downIndexes.length === 0
|
|
886
946
|
? Number.POSITIVE_INFINITY
|
|
887
|
-
: downIndexes.reduce((r, i) => r +
|
|
947
|
+
: downIndexes.reduce((r, i) => r +
|
|
948
|
+
(sizes[i] - this.viewItems[i].minimumSize), 0);
|
|
888
949
|
const minDeltaDown = downIndexes.length === 0
|
|
889
950
|
? Number.NEGATIVE_INFINITY
|
|
890
951
|
: downIndexes.reduce((r, i) => r +
|
|
891
|
-
(sizes[i] -
|
|
952
|
+
(sizes[i] -
|
|
953
|
+
this.viewItems[i].viewMaximumSize), 0);
|
|
892
954
|
const minDelta = Math.max(minDeltaUp, minDeltaDown);
|
|
893
955
|
const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
|
|
894
956
|
const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
|
|
895
957
|
const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
|
|
896
958
|
if (typeof snapBeforeIndex === 'number') {
|
|
897
|
-
const snappedViewItem = this.
|
|
959
|
+
const snappedViewItem = this.viewItems[snapBeforeIndex];
|
|
898
960
|
const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
|
|
899
961
|
snapBefore = {
|
|
900
962
|
index: snapBeforeIndex,
|
|
@@ -905,7 +967,7 @@ class Splitview {
|
|
|
905
967
|
};
|
|
906
968
|
}
|
|
907
969
|
if (typeof snapAfterIndex === 'number') {
|
|
908
|
-
const snappedViewItem = this.
|
|
970
|
+
const snappedViewItem = this.viewItems[snapAfterIndex];
|
|
909
971
|
const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
|
|
910
972
|
snapAfter = {
|
|
911
973
|
index: snapAfterIndex,
|
|
@@ -926,7 +988,7 @@ class Splitview {
|
|
|
926
988
|
this.layoutViews();
|
|
927
989
|
};
|
|
928
990
|
const end = () => {
|
|
929
|
-
for (const item of this.
|
|
991
|
+
for (const item of this.viewItems) {
|
|
930
992
|
item.enabled = true;
|
|
931
993
|
}
|
|
932
994
|
for (const iframe of iframes) {
|
|
@@ -966,7 +1028,7 @@ class Splitview {
|
|
|
966
1028
|
distributeViewSizes() {
|
|
967
1029
|
const flexibleViewItems = [];
|
|
968
1030
|
let flexibleSize = 0;
|
|
969
|
-
for (const item of this.
|
|
1031
|
+
for (const item of this.viewItems) {
|
|
970
1032
|
if (item.maximumSize - item.minimumSize > 0) {
|
|
971
1033
|
flexibleViewItems.push(item);
|
|
972
1034
|
flexibleSize += item.size;
|
|
@@ -976,17 +1038,17 @@ class Splitview {
|
|
|
976
1038
|
for (const item of flexibleViewItems) {
|
|
977
1039
|
item.size = clamp(size, item.minimumSize, item.maximumSize);
|
|
978
1040
|
}
|
|
979
|
-
const indexes = range(this.
|
|
980
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
981
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1041
|
+
const indexes = range(this.viewItems.length);
|
|
1042
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1043
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
982
1044
|
this.relayout(lowPriorityIndexes, highPriorityIndexes);
|
|
983
1045
|
}
|
|
984
1046
|
removeView(index, sizing, skipLayout = false) {
|
|
985
1047
|
// Remove view
|
|
986
|
-
const viewItem = this.
|
|
1048
|
+
const viewItem = this.viewItems.splice(index, 1)[0];
|
|
987
1049
|
viewItem.dispose();
|
|
988
1050
|
// Remove sash
|
|
989
|
-
if (this.
|
|
1051
|
+
if (this.viewItems.length >= 1) {
|
|
990
1052
|
const sashIndex = Math.max(index - 1, 0);
|
|
991
1053
|
const sashItem = this.sashes.splice(sashIndex, 1)[0];
|
|
992
1054
|
sashItem.disposable();
|
|
@@ -1001,10 +1063,10 @@ class Splitview {
|
|
|
1001
1063
|
return viewItem.view;
|
|
1002
1064
|
}
|
|
1003
1065
|
getViewCachedVisibleSize(index) {
|
|
1004
|
-
if (index < 0 || index >= this.
|
|
1066
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
1005
1067
|
throw new Error('Index out of bounds');
|
|
1006
1068
|
}
|
|
1007
|
-
const viewItem = this.
|
|
1069
|
+
const viewItem = this.viewItems[index];
|
|
1008
1070
|
return viewItem.cachedVisibleSize;
|
|
1009
1071
|
}
|
|
1010
1072
|
moveView(from, to) {
|
|
@@ -1020,14 +1082,14 @@ class Splitview {
|
|
|
1020
1082
|
this.size = size;
|
|
1021
1083
|
this.orthogonalSize = orthogonalSize;
|
|
1022
1084
|
if (!this.proportions) {
|
|
1023
|
-
const indexes = range(this.
|
|
1024
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
1025
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1026
|
-
this.resize(this.
|
|
1085
|
+
const indexes = range(this.viewItems.length);
|
|
1086
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1087
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
1088
|
+
this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1027
1089
|
}
|
|
1028
1090
|
else {
|
|
1029
|
-
for (let i = 0; i < this.
|
|
1030
|
-
const item = this.
|
|
1091
|
+
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1092
|
+
const item = this.viewItems[i];
|
|
1031
1093
|
item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
|
|
1032
1094
|
}
|
|
1033
1095
|
}
|
|
@@ -1035,18 +1097,18 @@ class Splitview {
|
|
|
1035
1097
|
this.layoutViews();
|
|
1036
1098
|
}
|
|
1037
1099
|
relayout(lowPriorityIndexes, highPriorityIndexes) {
|
|
1038
|
-
const contentSize = this.
|
|
1039
|
-
this.resize(this.
|
|
1100
|
+
const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1101
|
+
this.resize(this.viewItems.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1040
1102
|
this.distributeEmptySpace();
|
|
1041
1103
|
this.layoutViews();
|
|
1042
1104
|
this.saveProportions();
|
|
1043
1105
|
}
|
|
1044
1106
|
distributeEmptySpace(lowPriorityIndex) {
|
|
1045
|
-
const contentSize = this.
|
|
1107
|
+
const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1046
1108
|
let emptyDelta = this.size - contentSize;
|
|
1047
|
-
const indexes = range(this.
|
|
1048
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
1049
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1109
|
+
const indexes = range(this.viewItems.length - 1, -1);
|
|
1110
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1111
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
1050
1112
|
for (const index of highPriorityIndexes) {
|
|
1051
1113
|
pushToStart(indexes, index);
|
|
1052
1114
|
}
|
|
@@ -1057,7 +1119,7 @@ class Splitview {
|
|
|
1057
1119
|
pushToEnd(indexes, lowPriorityIndex);
|
|
1058
1120
|
}
|
|
1059
1121
|
for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
|
|
1060
|
-
const item = this.
|
|
1122
|
+
const item = this.viewItems[indexes[i]];
|
|
1061
1123
|
const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
|
|
1062
1124
|
const viewDelta = size - item.size;
|
|
1063
1125
|
emptyDelta -= viewDelta;
|
|
@@ -1066,16 +1128,16 @@ class Splitview {
|
|
|
1066
1128
|
}
|
|
1067
1129
|
saveProportions() {
|
|
1068
1130
|
if (this.proportionalLayout && this.contentSize > 0) {
|
|
1069
|
-
this._proportions = this.
|
|
1131
|
+
this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
|
|
1070
1132
|
}
|
|
1071
1133
|
}
|
|
1072
1134
|
layoutViews() {
|
|
1073
|
-
this.contentSize = this.
|
|
1135
|
+
this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1074
1136
|
let sum = 0;
|
|
1075
1137
|
const x = [];
|
|
1076
1138
|
this.updateSashEnablement();
|
|
1077
|
-
for (let i = 0; i < this.
|
|
1078
|
-
sum += this.
|
|
1139
|
+
for (let i = 0; i < this.viewItems.length - 1; i++) {
|
|
1140
|
+
sum += this.viewItems[i].size;
|
|
1079
1141
|
x.push(sum);
|
|
1080
1142
|
const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
|
|
1081
1143
|
if (this._orientation === Orientation.HORIZONTAL) {
|
|
@@ -1087,7 +1149,7 @@ class Splitview {
|
|
|
1087
1149
|
this.sashes[i].container.style.top = `${offset}px`;
|
|
1088
1150
|
}
|
|
1089
1151
|
}
|
|
1090
|
-
this.
|
|
1152
|
+
this.viewItems.forEach((view, i) => {
|
|
1091
1153
|
if (this._orientation === Orientation.HORIZONTAL) {
|
|
1092
1154
|
view.container.style.width = `${view.size}px`;
|
|
1093
1155
|
view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
|
|
@@ -1106,7 +1168,7 @@ class Splitview {
|
|
|
1106
1168
|
findFirstSnapIndex(indexes) {
|
|
1107
1169
|
// visible views first
|
|
1108
1170
|
for (const index of indexes) {
|
|
1109
|
-
const viewItem = this.
|
|
1171
|
+
const viewItem = this.viewItems[index];
|
|
1110
1172
|
if (!viewItem.visible) {
|
|
1111
1173
|
continue;
|
|
1112
1174
|
}
|
|
@@ -1116,7 +1178,7 @@ class Splitview {
|
|
|
1116
1178
|
}
|
|
1117
1179
|
// then, hidden views
|
|
1118
1180
|
for (const index of indexes) {
|
|
1119
|
-
const viewItem = this.
|
|
1181
|
+
const viewItem = this.viewItems[index];
|
|
1120
1182
|
if (viewItem.visible &&
|
|
1121
1183
|
viewItem.maximumSize - viewItem.minimumSize > 0) {
|
|
1122
1184
|
return undefined;
|
|
@@ -1129,10 +1191,10 @@ class Splitview {
|
|
|
1129
1191
|
}
|
|
1130
1192
|
updateSashEnablement() {
|
|
1131
1193
|
let previous = false;
|
|
1132
|
-
const collapsesDown = this.
|
|
1194
|
+
const collapsesDown = this.viewItems.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
|
|
1133
1195
|
previous = false;
|
|
1134
|
-
const expandsDown = this.
|
|
1135
|
-
const reverseViews = [...this.
|
|
1196
|
+
const expandsDown = this.viewItems.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
|
|
1197
|
+
const reverseViews = [...this.viewItems].reverse();
|
|
1136
1198
|
previous = false;
|
|
1137
1199
|
const collapsesUp = reverseViews
|
|
1138
1200
|
.map((i) => (previous = i.size - i.minimumSize > 0 || previous))
|
|
@@ -1144,19 +1206,19 @@ class Splitview {
|
|
|
1144
1206
|
let position = 0;
|
|
1145
1207
|
for (let index = 0; index < this.sashes.length; index++) {
|
|
1146
1208
|
const sash = this.sashes[index];
|
|
1147
|
-
const viewItem = this.
|
|
1209
|
+
const viewItem = this.viewItems[index];
|
|
1148
1210
|
position += viewItem.size;
|
|
1149
1211
|
const min = !(collapsesDown[index] && expandsUp[index + 1]);
|
|
1150
1212
|
const max = !(expandsDown[index] && collapsesUp[index + 1]);
|
|
1151
1213
|
if (min && max) {
|
|
1152
1214
|
const upIndexes = range(index, -1);
|
|
1153
|
-
const downIndexes = range(index + 1, this.
|
|
1215
|
+
const downIndexes = range(index + 1, this.viewItems.length);
|
|
1154
1216
|
const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
|
|
1155
1217
|
const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
|
|
1156
1218
|
const snappedBefore = typeof snapBeforeIndex === 'number' &&
|
|
1157
|
-
!this.
|
|
1219
|
+
!this.viewItems[snapBeforeIndex].visible;
|
|
1158
1220
|
const snappedAfter = typeof snapAfterIndex === 'number' &&
|
|
1159
|
-
!this.
|
|
1221
|
+
!this.viewItems[snapAfterIndex].visible;
|
|
1160
1222
|
if (snappedBefore &&
|
|
1161
1223
|
collapsesUp[index] &&
|
|
1162
1224
|
(position > 0 || this.startSnappingEnabled)) {
|
|
@@ -1216,6 +1278,9 @@ class Splitview {
|
|
|
1216
1278
|
break;
|
|
1217
1279
|
}
|
|
1218
1280
|
}
|
|
1281
|
+
for (const viewItem of this.viewItems) {
|
|
1282
|
+
viewItem.dispose();
|
|
1283
|
+
}
|
|
1219
1284
|
this.element.remove();
|
|
1220
1285
|
}
|
|
1221
1286
|
}
|
|
@@ -1650,7 +1715,7 @@ class BranchNode extends CompositeDisposable {
|
|
|
1650
1715
|
throw new Error('Invalid index');
|
|
1651
1716
|
}
|
|
1652
1717
|
this.splitview.removeView(index, sizing);
|
|
1653
|
-
this._removeChild(index);
|
|
1718
|
+
return this._removeChild(index);
|
|
1654
1719
|
}
|
|
1655
1720
|
_addChild(node, index) {
|
|
1656
1721
|
this.children.splice(index, 0, node);
|
|
@@ -1672,10 +1737,10 @@ class BranchNode extends CompositeDisposable {
|
|
|
1672
1737
|
});
|
|
1673
1738
|
}
|
|
1674
1739
|
dispose() {
|
|
1675
|
-
super.dispose();
|
|
1676
1740
|
this._childrenDisposable.dispose();
|
|
1677
|
-
this.children.forEach((child) => child.dispose());
|
|
1678
1741
|
this.splitview.dispose();
|
|
1742
|
+
this.children.forEach((child) => child.dispose());
|
|
1743
|
+
super.dispose();
|
|
1679
1744
|
}
|
|
1680
1745
|
}
|
|
1681
1746
|
|
|
@@ -1905,7 +1970,8 @@ class Gridview {
|
|
|
1905
1970
|
if (oldRoot.children.length === 1) {
|
|
1906
1971
|
// can remove one level of redundant branching if there is only a single child
|
|
1907
1972
|
const childReference = oldRoot.children[0];
|
|
1908
|
-
oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
|
|
1973
|
+
const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
|
|
1974
|
+
child.dispose();
|
|
1909
1975
|
oldRoot.dispose();
|
|
1910
1976
|
this._root.addChild(
|
|
1911
1977
|
/**
|
|
@@ -2012,7 +2078,8 @@ class Gridview {
|
|
|
2012
2078
|
if (typeof newSiblingCachedVisibleSize === 'number') {
|
|
2013
2079
|
newSiblingSize = Sizing.Invisible(newSiblingCachedVisibleSize);
|
|
2014
2080
|
}
|
|
2015
|
-
grandParent.removeChild(parentIndex);
|
|
2081
|
+
const child = grandParent.removeChild(parentIndex);
|
|
2082
|
+
child.dispose();
|
|
2016
2083
|
const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
|
|
2017
2084
|
grandParent.addChild(newParent, parent.size, parentIndex);
|
|
2018
2085
|
const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
|
|
@@ -2038,30 +2105,36 @@ class Gridview {
|
|
|
2038
2105
|
if (!(node instanceof LeafNode)) {
|
|
2039
2106
|
throw new Error('Invalid location');
|
|
2040
2107
|
}
|
|
2041
|
-
|
|
2108
|
+
const view = node.view;
|
|
2109
|
+
node.dispose(); // dispose of node
|
|
2110
|
+
const child = parent.removeChild(index, sizing);
|
|
2111
|
+
child.dispose();
|
|
2042
2112
|
if (parent.children.length === 0) {
|
|
2043
|
-
return
|
|
2113
|
+
return view;
|
|
2044
2114
|
}
|
|
2045
2115
|
if (parent.children.length > 1) {
|
|
2046
|
-
return
|
|
2116
|
+
return view;
|
|
2047
2117
|
}
|
|
2048
2118
|
const sibling = parent.children[0];
|
|
2049
2119
|
if (pathToParent.length === 0) {
|
|
2050
2120
|
// parent is root
|
|
2051
2121
|
if (sibling instanceof LeafNode) {
|
|
2052
|
-
return
|
|
2122
|
+
return view;
|
|
2053
2123
|
}
|
|
2054
2124
|
// we must promote sibling to be the new root
|
|
2055
|
-
parent.removeChild(0, sizing);
|
|
2125
|
+
const child = parent.removeChild(0, sizing);
|
|
2126
|
+
child.dispose();
|
|
2056
2127
|
this.root = sibling;
|
|
2057
|
-
return
|
|
2128
|
+
return view;
|
|
2058
2129
|
}
|
|
2059
2130
|
const [grandParent, ..._] = [...pathToParent].reverse();
|
|
2060
2131
|
const [parentIndex, ...__] = [...rest].reverse();
|
|
2061
2132
|
const isSiblingVisible = parent.isChildVisible(0);
|
|
2062
|
-
parent.removeChild(0, sizing);
|
|
2133
|
+
const childNode = parent.removeChild(0, sizing);
|
|
2134
|
+
childNode.dispose();
|
|
2063
2135
|
const sizes = grandParent.children.map((_size, i) => grandParent.getChildSize(i));
|
|
2064
|
-
grandParent.removeChild(parentIndex, sizing);
|
|
2136
|
+
const parentNode = grandParent.removeChild(parentIndex, sizing);
|
|
2137
|
+
parentNode.dispose();
|
|
2065
2138
|
if (sibling instanceof BranchNode) {
|
|
2066
2139
|
sizes.splice(parentIndex, 1, ...sibling.children.map((c) => c.size));
|
|
2067
2140
|
for (let i = 0; i < sibling.children.length; i++) {
|
|
@@ -2079,7 +2152,7 @@ class Gridview {
|
|
|
2079
2152
|
for (let i = 0; i < sizes.length; i++) {
|
|
2080
2153
|
grandParent.resizeChild(i, sizes[i]);
|
|
2081
2154
|
}
|
|
2082
|
-
return
|
|
2155
|
+
return view;
|
|
2083
2156
|
}
|
|
2084
2157
|
layout(width, height) {
|
|
2085
2158
|
const [size, orthogonalSize] = this.root.orientation === Orientation.HORIZONTAL
|
|
@@ -2574,6 +2647,7 @@ class Droptarget extends CompositeDisposable {
|
|
|
2574
2647
|
}
|
|
2575
2648
|
dispose() {
|
|
2576
2649
|
this.removeDropTarget();
|
|
2650
|
+
super.dispose();
|
|
2577
2651
|
}
|
|
2578
2652
|
toggleClasses(quadrant, width, height) {
|
|
2579
2653
|
var _a, _b, _c, _d;
|
|
@@ -2751,8 +2825,8 @@ class ContentContainer extends CompositeDisposable {
|
|
|
2751
2825
|
if (this.panel.view) {
|
|
2752
2826
|
const _onDidFocus = this.panel.view.content.onDidFocus;
|
|
2753
2827
|
const _onDidBlur = this.panel.view.content.onDidBlur;
|
|
2754
|
-
const
|
|
2755
|
-
disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire()));
|
|
2828
|
+
const focusTracker = trackFocus(this._element);
|
|
2829
|
+
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
2756
2830
|
if (_onDidFocus) {
|
|
2757
2831
|
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
2758
2832
|
}
|
|
@@ -2795,6 +2869,7 @@ class DragHandler extends CompositeDisposable {
|
|
|
2795
2869
|
this._onDragStart = new Emitter();
|
|
2796
2870
|
this.onDragStart = this._onDragStart.event;
|
|
2797
2871
|
this.iframes = [];
|
|
2872
|
+
this.addDisposables(this._onDragStart);
|
|
2798
2873
|
this.configure();
|
|
2799
2874
|
}
|
|
2800
2875
|
configure() {
|
|
@@ -2845,13 +2920,12 @@ class Tab extends CompositeDisposable {
|
|
|
2845
2920
|
this.onChanged = this._onChanged.event;
|
|
2846
2921
|
this._onDropped = new Emitter();
|
|
2847
2922
|
this.onDrop = this._onDropped.event;
|
|
2848
|
-
this.addDisposables(this._onChanged, this._onDropped);
|
|
2849
2923
|
this._element = document.createElement('div');
|
|
2850
2924
|
this._element.className = 'tab';
|
|
2851
2925
|
this._element.tabIndex = 0;
|
|
2852
2926
|
this._element.draggable = true;
|
|
2853
2927
|
toggleClass(this.element, 'inactive-tab', true);
|
|
2854
|
-
this.addDisposables(new (class Handler extends DragHandler {
|
|
2928
|
+
this.addDisposables(this._onChanged, this._onDropped, new (class Handler extends DragHandler {
|
|
2855
2929
|
constructor() {
|
|
2856
2930
|
super(...arguments);
|
|
2857
2931
|
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
@@ -2864,9 +2938,6 @@ class Tab extends CompositeDisposable {
|
|
|
2864
2938
|
},
|
|
2865
2939
|
};
|
|
2866
2940
|
}
|
|
2867
|
-
dispose() {
|
|
2868
|
-
//
|
|
2869
|
-
}
|
|
2870
2941
|
})(this._element));
|
|
2871
2942
|
this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
|
|
2872
2943
|
if (event.defaultPrevented) {
|
|
@@ -2901,7 +2972,7 @@ class Tab extends CompositeDisposable {
|
|
|
2901
2972
|
});
|
|
2902
2973
|
this.addDisposables(this.droptarget.onDrop((event) => {
|
|
2903
2974
|
this._onDropped.fire(event);
|
|
2904
|
-
}));
|
|
2975
|
+
}), this.droptarget);
|
|
2905
2976
|
}
|
|
2906
2977
|
setActive(isActive) {
|
|
2907
2978
|
toggleClass(this.element, 'active-tab', isActive);
|
|
@@ -2916,7 +2987,6 @@ class Tab extends CompositeDisposable {
|
|
|
2916
2987
|
}
|
|
2917
2988
|
dispose() {
|
|
2918
2989
|
super.dispose();
|
|
2919
|
-
this.droptarget.dispose();
|
|
2920
2990
|
}
|
|
2921
2991
|
}
|
|
2922
2992
|
|
|
@@ -2962,9 +3032,6 @@ class GroupDragHandler extends DragHandler {
|
|
|
2962
3032
|
},
|
|
2963
3033
|
};
|
|
2964
3034
|
}
|
|
2965
|
-
dispose() {
|
|
2966
|
-
//
|
|
2967
|
-
}
|
|
2968
3035
|
}
|
|
2969
3036
|
|
|
2970
3037
|
class VoidContainer extends CompositeDisposable {
|
|
@@ -3120,6 +3187,7 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3120
3187
|
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
3121
3188
|
const { value, disposable } = tabToRemove;
|
|
3122
3189
|
disposable.dispose();
|
|
3190
|
+
value.dispose();
|
|
3123
3191
|
value.element.remove();
|
|
3124
3192
|
}
|
|
3125
3193
|
setActivePanel(panel) {
|
|
@@ -3163,9 +3231,10 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3163
3231
|
}
|
|
3164
3232
|
dispose() {
|
|
3165
3233
|
super.dispose();
|
|
3166
|
-
this.tabs
|
|
3167
|
-
|
|
3168
|
-
|
|
3234
|
+
for (const { value, disposable } of this.tabs) {
|
|
3235
|
+
disposable.dispose();
|
|
3236
|
+
value.dispose();
|
|
3237
|
+
}
|
|
3169
3238
|
this.tabs = [];
|
|
3170
3239
|
}
|
|
3171
3240
|
}
|
|
@@ -3263,7 +3332,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3263
3332
|
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
3264
3333
|
this.header.hidden = !!options.hideHeader;
|
|
3265
3334
|
this.locked = !!options.locked;
|
|
3266
|
-
this.addDisposables(this.
|
|
3335
|
+
this.addDisposables(this.tabsContainer.onDrop((event) => {
|
|
3267
3336
|
this.handleDropEvent(event.event, 'center', event.index);
|
|
3268
3337
|
}), this.contentContainer.onDidFocus(() => {
|
|
3269
3338
|
this.accessor.doSetGroupActive(this.groupPanel, true);
|
|
@@ -3271,7 +3340,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3271
3340
|
// noop
|
|
3272
3341
|
}), this.dropTarget.onDrop((event) => {
|
|
3273
3342
|
this.handleDropEvent(event.nativeEvent, event.position);
|
|
3274
|
-
}));
|
|
3343
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
3275
3344
|
}
|
|
3276
3345
|
initialize() {
|
|
3277
3346
|
var _a, _b;
|
|
@@ -3705,8 +3774,7 @@ class BaseGrid extends Resizable {
|
|
|
3705
3774
|
this.layout(0, 0, true); // set some elements height/widths
|
|
3706
3775
|
this.addDisposables(this.gridview.onDidChange(() => {
|
|
3707
3776
|
this._bufferOnDidLayoutChange.fire();
|
|
3708
|
-
}))
|
|
3709
|
-
this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3777
|
+
}), Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3710
3778
|
this._bufferOnDidLayoutChange.fire();
|
|
3711
3779
|
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
3712
3780
|
this._onDidLayoutChange.fire();
|
|
@@ -3809,7 +3877,6 @@ class BaseGrid extends Resizable {
|
|
|
3809
3877
|
this.gridview.layout(width, height);
|
|
3810
3878
|
}
|
|
3811
3879
|
dispose() {
|
|
3812
|
-
super.dispose();
|
|
3813
3880
|
this._onDidActiveGroupChange.dispose();
|
|
3814
3881
|
this._onDidAddGroup.dispose();
|
|
3815
3882
|
this._onDidRemoveGroup.dispose();
|
|
@@ -3818,6 +3885,7 @@ class BaseGrid extends Resizable {
|
|
|
3818
3885
|
group.dispose();
|
|
3819
3886
|
}
|
|
3820
3887
|
this.gridview.dispose();
|
|
3888
|
+
super.dispose();
|
|
3821
3889
|
}
|
|
3822
3890
|
}
|
|
3823
3891
|
|
|
@@ -3881,7 +3949,7 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3881
3949
|
//
|
|
3882
3950
|
this._onUpdateParameters = new Emitter();
|
|
3883
3951
|
this.onUpdateParameters = this._onUpdateParameters.event;
|
|
3884
|
-
this.addDisposables(this.
|
|
3952
|
+
this.addDisposables(this.onDidFocusChange((event) => {
|
|
3885
3953
|
this._isFocused = event.isFocused;
|
|
3886
3954
|
}), this.onDidActiveChange((event) => {
|
|
3887
3955
|
this._isActive = event.isActive;
|
|
@@ -3890,14 +3958,12 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3890
3958
|
}), this.onDidDimensionsChange((event) => {
|
|
3891
3959
|
this._width = event.width;
|
|
3892
3960
|
this._height = event.height;
|
|
3893
|
-
}));
|
|
3961
|
+
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
|
|
3894
3962
|
}
|
|
3895
3963
|
initialize(panel) {
|
|
3896
3964
|
this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
|
|
3897
3965
|
panel.update({
|
|
3898
|
-
params:
|
|
3899
|
-
params: parameters,
|
|
3900
|
-
},
|
|
3966
|
+
params: parameters,
|
|
3901
3967
|
});
|
|
3902
3968
|
});
|
|
3903
3969
|
}
|
|
@@ -3992,12 +4058,12 @@ class BasePanelView extends CompositeDisposable {
|
|
|
3992
4058
|
this._element.style.height = '100%';
|
|
3993
4059
|
this._element.style.width = '100%';
|
|
3994
4060
|
this._element.style.overflow = 'hidden';
|
|
3995
|
-
const
|
|
3996
|
-
this.addDisposables(this.api, onDidFocus(() => {
|
|
4061
|
+
const focusTracker = trackFocus(this._element);
|
|
4062
|
+
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
3997
4063
|
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
3998
|
-
}), onDidBlur(() => {
|
|
4064
|
+
}), focusTracker.onDidBlur(() => {
|
|
3999
4065
|
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
4000
|
-
}));
|
|
4066
|
+
}), focusTracker);
|
|
4001
4067
|
}
|
|
4002
4068
|
focus() {
|
|
4003
4069
|
this.api._onFocusEvent.fire();
|
|
@@ -4018,7 +4084,18 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4018
4084
|
}
|
|
4019
4085
|
update(event) {
|
|
4020
4086
|
var _a, _b;
|
|
4087
|
+
// merge the new parameters with the existing parameters
|
|
4021
4088
|
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) });
|
|
4089
|
+
/**
|
|
4090
|
+
* delete new keys that have a value of undefined,
|
|
4091
|
+
* allow values of null
|
|
4092
|
+
*/
|
|
4093
|
+
for (const key of Object.keys(event.params)) {
|
|
4094
|
+
if (event.params[key] === undefined) {
|
|
4095
|
+
delete this._params.params[key];
|
|
4096
|
+
}
|
|
4097
|
+
}
|
|
4098
|
+
// update the view with the updated props
|
|
4022
4099
|
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
4023
4100
|
}
|
|
4024
4101
|
toJSON() {
|
|
@@ -4032,9 +4109,9 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4032
4109
|
}
|
|
4033
4110
|
dispose() {
|
|
4034
4111
|
var _a;
|
|
4035
|
-
super.dispose();
|
|
4036
4112
|
this.api.dispose();
|
|
4037
4113
|
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
4114
|
+
super.dispose();
|
|
4038
4115
|
}
|
|
4039
4116
|
}
|
|
4040
4117
|
|
|
@@ -4413,7 +4490,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4413
4490
|
this._maximumHeight = options.maximumHeight;
|
|
4414
4491
|
}
|
|
4415
4492
|
this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
|
|
4416
|
-
this.addDisposables(this.
|
|
4493
|
+
this.addDisposables(this.api.onVisibilityChange((event) => {
|
|
4417
4494
|
const { isVisible } = event;
|
|
4418
4495
|
const { accessor } = this._params;
|
|
4419
4496
|
accessor.setVisible(this, isVisible);
|
|
@@ -4442,7 +4519,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4442
4519
|
height: event.height,
|
|
4443
4520
|
width: event.width,
|
|
4444
4521
|
});
|
|
4445
|
-
}));
|
|
4522
|
+
}), this._onDidChange);
|
|
4446
4523
|
}
|
|
4447
4524
|
setVisible(isVisible) {
|
|
4448
4525
|
this.api._onDidVisibilityChange.fire({ isVisible });
|
|
@@ -4599,7 +4676,7 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
4599
4676
|
this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
4600
4677
|
}
|
|
4601
4678
|
setTitle(title) {
|
|
4602
|
-
this.panel.
|
|
4679
|
+
this.panel.setTitle(title);
|
|
4603
4680
|
}
|
|
4604
4681
|
close() {
|
|
4605
4682
|
this.group.model.closePanel(this.panel);
|
|
@@ -4664,12 +4741,18 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
4664
4741
|
}
|
|
4665
4742
|
}
|
|
4666
4743
|
update(event) {
|
|
4667
|
-
|
|
4668
|
-
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4744
|
+
// merge the new parameters with the existing parameters
|
|
4745
|
+
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params);
|
|
4746
|
+
/**
|
|
4747
|
+
* delete new keys that have a value of undefined,
|
|
4748
|
+
* allow values of null
|
|
4749
|
+
*/
|
|
4750
|
+
for (const key of Object.keys(event.params)) {
|
|
4751
|
+
if (event.params[key] === undefined) {
|
|
4752
|
+
delete this._params[key];
|
|
4753
|
+
}
|
|
4672
4754
|
}
|
|
4755
|
+
// update the view with the updated props
|
|
4673
4756
|
this.view.update({
|
|
4674
4757
|
params: {
|
|
4675
4758
|
params: this._params,
|
|
@@ -5045,7 +5128,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5045
5128
|
size: { type: 'pixels', value: 20 },
|
|
5046
5129
|
},
|
|
5047
5130
|
});
|
|
5048
|
-
this.addDisposables(dropTarget
|
|
5131
|
+
this.addDisposables(dropTarget.onDrop((event) => {
|
|
5049
5132
|
const data = getPanelData();
|
|
5050
5133
|
if (data) {
|
|
5051
5134
|
this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
|
|
@@ -5053,7 +5136,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5053
5136
|
else {
|
|
5054
5137
|
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
|
|
5055
5138
|
}
|
|
5056
|
-
}));
|
|
5139
|
+
}), dropTarget);
|
|
5057
5140
|
this._api = new DockviewApi(this);
|
|
5058
5141
|
this.updateWatermark();
|
|
5059
5142
|
}
|
|
@@ -5377,31 +5460,33 @@ class DockviewComponent extends BaseGrid {
|
|
|
5377
5460
|
}
|
|
5378
5461
|
super.doRemoveGroup(group, { skipActive });
|
|
5379
5462
|
}
|
|
5380
|
-
moveGroupOrPanel(
|
|
5463
|
+
moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
|
|
5381
5464
|
var _a;
|
|
5382
|
-
const sourceGroup =
|
|
5383
|
-
? (_a = this._groups.get(
|
|
5465
|
+
const sourceGroup = sourceGroupId
|
|
5466
|
+
? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
|
|
5384
5467
|
: undefined;
|
|
5385
|
-
if (
|
|
5468
|
+
if (sourceItemId === undefined) {
|
|
5386
5469
|
if (sourceGroup) {
|
|
5387
|
-
this.moveGroup(sourceGroup,
|
|
5470
|
+
this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
|
|
5388
5471
|
}
|
|
5389
5472
|
return;
|
|
5390
5473
|
}
|
|
5391
|
-
if (!
|
|
5392
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5393
|
-
this.panels.find((panel) => panel.id ===
|
|
5474
|
+
if (!destinationTarget || destinationTarget === 'center') {
|
|
5475
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5476
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5394
5477
|
if (!groupItem) {
|
|
5395
|
-
throw new Error(`No panel with id ${
|
|
5478
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5396
5479
|
}
|
|
5397
5480
|
if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
|
|
5398
5481
|
this.doRemoveGroup(sourceGroup);
|
|
5399
5482
|
}
|
|
5400
|
-
|
|
5483
|
+
destinationGroup.model.openPanel(groupItem, {
|
|
5484
|
+
index: destinationIndex,
|
|
5485
|
+
});
|
|
5401
5486
|
}
|
|
5402
5487
|
else {
|
|
5403
|
-
const referenceLocation = getGridLocation(
|
|
5404
|
-
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5488
|
+
const referenceLocation = getGridLocation(destinationGroup.element);
|
|
5489
|
+
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5405
5490
|
if (sourceGroup && sourceGroup.size < 2) {
|
|
5406
5491
|
const [targetParentLocation, to] = tail(targetLocation);
|
|
5407
5492
|
const sourceLocation = getGridLocation(sourceGroup.element);
|
|
@@ -5419,18 +5504,18 @@ class DockviewComponent extends BaseGrid {
|
|
|
5419
5504
|
skipDispose: true,
|
|
5420
5505
|
});
|
|
5421
5506
|
// after deleting the group we need to re-evaulate the ref location
|
|
5422
|
-
const updatedReferenceLocation = getGridLocation(
|
|
5423
|
-
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation,
|
|
5507
|
+
const updatedReferenceLocation = getGridLocation(destinationGroup.element);
|
|
5508
|
+
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
|
|
5424
5509
|
this.doAddGroup(targetGroup, location);
|
|
5425
5510
|
}
|
|
5426
5511
|
}
|
|
5427
5512
|
else {
|
|
5428
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5429
|
-
this.panels.find((panel) => panel.id ===
|
|
5513
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5514
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5430
5515
|
if (!groupItem) {
|
|
5431
|
-
throw new Error(`No panel with id ${
|
|
5516
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5432
5517
|
}
|
|
5433
|
-
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5518
|
+
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5434
5519
|
const group = this.createGroupAtLocation(dropLocation);
|
|
5435
5520
|
group.model.openPanel(groupItem);
|
|
5436
5521
|
}
|
|
@@ -5524,11 +5609,11 @@ class DockviewComponent extends BaseGrid {
|
|
|
5524
5609
|
return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
|
|
5525
5610
|
}
|
|
5526
5611
|
dispose() {
|
|
5527
|
-
super.dispose();
|
|
5528
5612
|
this._onDidActivePanelChange.dispose();
|
|
5529
5613
|
this._onDidAddPanel.dispose();
|
|
5530
5614
|
this._onDidRemovePanel.dispose();
|
|
5531
5615
|
this._onDidLayoutFromJSON.dispose();
|
|
5616
|
+
super.dispose();
|
|
5532
5617
|
}
|
|
5533
5618
|
}
|
|
5534
5619
|
|
|
@@ -5786,7 +5871,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5786
5871
|
}
|
|
5787
5872
|
set splitview(value) {
|
|
5788
5873
|
this._splitview = value;
|
|
5789
|
-
this.
|
|
5874
|
+
this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
|
|
5790
5875
|
this._onDidLayoutChange.fire(undefined);
|
|
5791
5876
|
}), this._splitview.onDidAddView((e) => this._onDidAddView.fire(e)), this._splitview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
|
|
5792
5877
|
}
|
|
@@ -5808,7 +5893,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5808
5893
|
}
|
|
5809
5894
|
constructor(options) {
|
|
5810
5895
|
super(options.parentElement);
|
|
5811
|
-
this.
|
|
5896
|
+
this._splitviewChangeDisposable = new MutableDisposable();
|
|
5812
5897
|
this._panels = new Map();
|
|
5813
5898
|
this._onDidLayoutfromJSON = new Emitter();
|
|
5814
5899
|
this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
|
|
@@ -5826,7 +5911,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5826
5911
|
options.frameworkComponents = {};
|
|
5827
5912
|
}
|
|
5828
5913
|
this.splitview = new Splitview(this.element, options);
|
|
5829
|
-
this.addDisposables(this.
|
|
5914
|
+
this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
|
|
5830
5915
|
}
|
|
5831
5916
|
updateOptions(options) {
|
|
5832
5917
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
@@ -5864,15 +5949,15 @@ class SplitviewComponent extends Resizable {
|
|
|
5864
5949
|
}
|
|
5865
5950
|
}
|
|
5866
5951
|
removePanel(panel, sizing) {
|
|
5867
|
-
const
|
|
5868
|
-
if (!
|
|
5952
|
+
const item = this._panels.get(panel.id);
|
|
5953
|
+
if (!item) {
|
|
5869
5954
|
throw new Error(`unknown splitview panel ${panel.id}`);
|
|
5870
5955
|
}
|
|
5871
|
-
|
|
5872
|
-
disposable.value.dispose();
|
|
5956
|
+
item.dispose();
|
|
5873
5957
|
this._panels.delete(panel.id);
|
|
5874
5958
|
const index = this.panels.findIndex((_) => _ === panel);
|
|
5875
|
-
this.splitview.removeView(index, sizing);
|
|
5959
|
+
const removedView = this.splitview.removeView(index, sizing);
|
|
5960
|
+
removedView.dispose();
|
|
5876
5961
|
const panels = this.panels;
|
|
5877
5962
|
if (panels.length > 0) {
|
|
5878
5963
|
this.setActive(panels[panels.length - 1]);
|
|
@@ -5919,7 +6004,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5919
6004
|
}
|
|
5920
6005
|
this.setActive(view, true);
|
|
5921
6006
|
});
|
|
5922
|
-
this._panels.set(view.id,
|
|
6007
|
+
this._panels.set(view.id, disposable);
|
|
5923
6008
|
}
|
|
5924
6009
|
toJSON() {
|
|
5925
6010
|
var _a;
|
|
@@ -5992,20 +6077,26 @@ class SplitviewComponent extends Resizable {
|
|
|
5992
6077
|
this._onDidLayoutfromJSON.fire();
|
|
5993
6078
|
}
|
|
5994
6079
|
clear() {
|
|
5995
|
-
for (const
|
|
5996
|
-
|
|
5997
|
-
value.value.dispose();
|
|
6080
|
+
for (const disposable of this._panels.values()) {
|
|
6081
|
+
disposable.dispose();
|
|
5998
6082
|
}
|
|
5999
6083
|
this._panels.clear();
|
|
6000
|
-
this.splitview.
|
|
6084
|
+
while (this.splitview.length > 0) {
|
|
6085
|
+
const view = this.splitview.removeView(0, Sizing.Distribute, true);
|
|
6086
|
+
view.dispose();
|
|
6087
|
+
}
|
|
6001
6088
|
}
|
|
6002
6089
|
dispose() {
|
|
6003
|
-
for (const
|
|
6004
|
-
|
|
6005
|
-
value.value.dispose();
|
|
6090
|
+
for (const disposable of this._panels.values()) {
|
|
6091
|
+
disposable.dispose();
|
|
6006
6092
|
}
|
|
6007
6093
|
this._panels.clear();
|
|
6094
|
+
const views = this.splitview.getViews();
|
|
6095
|
+
this._splitviewChangeDisposable.dispose();
|
|
6008
6096
|
this.splitview.dispose();
|
|
6097
|
+
for (const view of views) {
|
|
6098
|
+
view.dispose();
|
|
6099
|
+
}
|
|
6009
6100
|
super.dispose();
|
|
6010
6101
|
}
|
|
6011
6102
|
}
|