dockview-core 1.7.3 → 1.7.5
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 +2 -2
- package/dist/cjs/dnd/abstractDragHandler.d.ts.map +1 -1
- package/dist/cjs/dnd/abstractDragHandler.js +28 -23
- 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 +96 -9
- 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 +4 -2
- 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 -86
- 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 +281 -194
- 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 +281 -194
- package/dist/dockview-core.cjs.js +281 -194
- package/dist/dockview-core.esm.js +281 -194
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.js +281 -194
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.noStyle.js +281 -194
- 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 +2 -2
- package/dist/esm/dnd/abstractDragHandler.d.ts.map +1 -1
- package/dist/esm/dnd/abstractDragHandler.js +15 -10
- 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 +77 -9
- 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 +4 -2
- 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 -86
- 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.5
|
|
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,28 +182,50 @@ 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 {
|
|
164
227
|
dispose: () => {
|
|
165
|
-
element.removeEventListener(type, listener);
|
|
228
|
+
element.removeEventListener(type, listener, options);
|
|
166
229
|
},
|
|
167
230
|
};
|
|
168
231
|
}
|
|
@@ -170,7 +233,7 @@ function addDisposableListener(element, type, listener, options) {
|
|
|
170
233
|
element.addEventListener(type, listener, options);
|
|
171
234
|
return {
|
|
172
235
|
dispose: () => {
|
|
173
|
-
element.removeEventListener(type, listener);
|
|
236
|
+
element.removeEventListener(type, listener, options);
|
|
174
237
|
},
|
|
175
238
|
};
|
|
176
239
|
}
|
|
@@ -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) {
|
|
@@ -935,12 +997,10 @@ class Splitview {
|
|
|
935
997
|
this.saveProportions();
|
|
936
998
|
document.removeEventListener('mousemove', mousemove);
|
|
937
999
|
document.removeEventListener('mouseup', end);
|
|
938
|
-
document.removeEventListener('mouseend', end);
|
|
939
1000
|
this._onDidSashEnd.fire(undefined);
|
|
940
1001
|
};
|
|
941
1002
|
document.addEventListener('mousemove', mousemove);
|
|
942
1003
|
document.addEventListener('mouseup', end);
|
|
943
|
-
document.addEventListener('mouseend', end);
|
|
944
1004
|
};
|
|
945
1005
|
sash.addEventListener('mousedown', onStart);
|
|
946
1006
|
const sashItem = {
|
|
@@ -966,7 +1026,7 @@ class Splitview {
|
|
|
966
1026
|
distributeViewSizes() {
|
|
967
1027
|
const flexibleViewItems = [];
|
|
968
1028
|
let flexibleSize = 0;
|
|
969
|
-
for (const item of this.
|
|
1029
|
+
for (const item of this.viewItems) {
|
|
970
1030
|
if (item.maximumSize - item.minimumSize > 0) {
|
|
971
1031
|
flexibleViewItems.push(item);
|
|
972
1032
|
flexibleSize += item.size;
|
|
@@ -976,17 +1036,17 @@ class Splitview {
|
|
|
976
1036
|
for (const item of flexibleViewItems) {
|
|
977
1037
|
item.size = clamp(size, item.minimumSize, item.maximumSize);
|
|
978
1038
|
}
|
|
979
|
-
const indexes = range(this.
|
|
980
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
981
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1039
|
+
const indexes = range(this.viewItems.length);
|
|
1040
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1041
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
982
1042
|
this.relayout(lowPriorityIndexes, highPriorityIndexes);
|
|
983
1043
|
}
|
|
984
1044
|
removeView(index, sizing, skipLayout = false) {
|
|
985
1045
|
// Remove view
|
|
986
|
-
const viewItem = this.
|
|
1046
|
+
const viewItem = this.viewItems.splice(index, 1)[0];
|
|
987
1047
|
viewItem.dispose();
|
|
988
1048
|
// Remove sash
|
|
989
|
-
if (this.
|
|
1049
|
+
if (this.viewItems.length >= 1) {
|
|
990
1050
|
const sashIndex = Math.max(index - 1, 0);
|
|
991
1051
|
const sashItem = this.sashes.splice(sashIndex, 1)[0];
|
|
992
1052
|
sashItem.disposable();
|
|
@@ -1001,10 +1061,10 @@ class Splitview {
|
|
|
1001
1061
|
return viewItem.view;
|
|
1002
1062
|
}
|
|
1003
1063
|
getViewCachedVisibleSize(index) {
|
|
1004
|
-
if (index < 0 || index >= this.
|
|
1064
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
1005
1065
|
throw new Error('Index out of bounds');
|
|
1006
1066
|
}
|
|
1007
|
-
const viewItem = this.
|
|
1067
|
+
const viewItem = this.viewItems[index];
|
|
1008
1068
|
return viewItem.cachedVisibleSize;
|
|
1009
1069
|
}
|
|
1010
1070
|
moveView(from, to) {
|
|
@@ -1020,14 +1080,14 @@ class Splitview {
|
|
|
1020
1080
|
this.size = size;
|
|
1021
1081
|
this.orthogonalSize = orthogonalSize;
|
|
1022
1082
|
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.
|
|
1083
|
+
const indexes = range(this.viewItems.length);
|
|
1084
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1085
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
1086
|
+
this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1027
1087
|
}
|
|
1028
1088
|
else {
|
|
1029
|
-
for (let i = 0; i < this.
|
|
1030
|
-
const item = this.
|
|
1089
|
+
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1090
|
+
const item = this.viewItems[i];
|
|
1031
1091
|
item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
|
|
1032
1092
|
}
|
|
1033
1093
|
}
|
|
@@ -1035,18 +1095,18 @@ class Splitview {
|
|
|
1035
1095
|
this.layoutViews();
|
|
1036
1096
|
}
|
|
1037
1097
|
relayout(lowPriorityIndexes, highPriorityIndexes) {
|
|
1038
|
-
const contentSize = this.
|
|
1039
|
-
this.resize(this.
|
|
1098
|
+
const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1099
|
+
this.resize(this.viewItems.length - 1, this._size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1040
1100
|
this.distributeEmptySpace();
|
|
1041
1101
|
this.layoutViews();
|
|
1042
1102
|
this.saveProportions();
|
|
1043
1103
|
}
|
|
1044
1104
|
distributeEmptySpace(lowPriorityIndex) {
|
|
1045
|
-
const contentSize = this.
|
|
1105
|
+
const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1046
1106
|
let emptyDelta = this.size - contentSize;
|
|
1047
|
-
const indexes = range(this.
|
|
1048
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
1049
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1107
|
+
const indexes = range(this.viewItems.length - 1, -1);
|
|
1108
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.Low);
|
|
1109
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === LayoutPriority.High);
|
|
1050
1110
|
for (const index of highPriorityIndexes) {
|
|
1051
1111
|
pushToStart(indexes, index);
|
|
1052
1112
|
}
|
|
@@ -1057,7 +1117,7 @@ class Splitview {
|
|
|
1057
1117
|
pushToEnd(indexes, lowPriorityIndex);
|
|
1058
1118
|
}
|
|
1059
1119
|
for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
|
|
1060
|
-
const item = this.
|
|
1120
|
+
const item = this.viewItems[indexes[i]];
|
|
1061
1121
|
const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
|
|
1062
1122
|
const viewDelta = size - item.size;
|
|
1063
1123
|
emptyDelta -= viewDelta;
|
|
@@ -1066,16 +1126,16 @@ class Splitview {
|
|
|
1066
1126
|
}
|
|
1067
1127
|
saveProportions() {
|
|
1068
1128
|
if (this.proportionalLayout && this.contentSize > 0) {
|
|
1069
|
-
this._proportions = this.
|
|
1129
|
+
this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
|
|
1070
1130
|
}
|
|
1071
1131
|
}
|
|
1072
1132
|
layoutViews() {
|
|
1073
|
-
this.contentSize = this.
|
|
1133
|
+
this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1074
1134
|
let sum = 0;
|
|
1075
1135
|
const x = [];
|
|
1076
1136
|
this.updateSashEnablement();
|
|
1077
|
-
for (let i = 0; i < this.
|
|
1078
|
-
sum += this.
|
|
1137
|
+
for (let i = 0; i < this.viewItems.length - 1; i++) {
|
|
1138
|
+
sum += this.viewItems[i].size;
|
|
1079
1139
|
x.push(sum);
|
|
1080
1140
|
const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
|
|
1081
1141
|
if (this._orientation === Orientation.HORIZONTAL) {
|
|
@@ -1087,7 +1147,7 @@ class Splitview {
|
|
|
1087
1147
|
this.sashes[i].container.style.top = `${offset}px`;
|
|
1088
1148
|
}
|
|
1089
1149
|
}
|
|
1090
|
-
this.
|
|
1150
|
+
this.viewItems.forEach((view, i) => {
|
|
1091
1151
|
if (this._orientation === Orientation.HORIZONTAL) {
|
|
1092
1152
|
view.container.style.width = `${view.size}px`;
|
|
1093
1153
|
view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
|
|
@@ -1106,7 +1166,7 @@ class Splitview {
|
|
|
1106
1166
|
findFirstSnapIndex(indexes) {
|
|
1107
1167
|
// visible views first
|
|
1108
1168
|
for (const index of indexes) {
|
|
1109
|
-
const viewItem = this.
|
|
1169
|
+
const viewItem = this.viewItems[index];
|
|
1110
1170
|
if (!viewItem.visible) {
|
|
1111
1171
|
continue;
|
|
1112
1172
|
}
|
|
@@ -1116,7 +1176,7 @@ class Splitview {
|
|
|
1116
1176
|
}
|
|
1117
1177
|
// then, hidden views
|
|
1118
1178
|
for (const index of indexes) {
|
|
1119
|
-
const viewItem = this.
|
|
1179
|
+
const viewItem = this.viewItems[index];
|
|
1120
1180
|
if (viewItem.visible &&
|
|
1121
1181
|
viewItem.maximumSize - viewItem.minimumSize > 0) {
|
|
1122
1182
|
return undefined;
|
|
@@ -1129,10 +1189,10 @@ class Splitview {
|
|
|
1129
1189
|
}
|
|
1130
1190
|
updateSashEnablement() {
|
|
1131
1191
|
let previous = false;
|
|
1132
|
-
const collapsesDown = this.
|
|
1192
|
+
const collapsesDown = this.viewItems.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
|
|
1133
1193
|
previous = false;
|
|
1134
|
-
const expandsDown = this.
|
|
1135
|
-
const reverseViews = [...this.
|
|
1194
|
+
const expandsDown = this.viewItems.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
|
|
1195
|
+
const reverseViews = [...this.viewItems].reverse();
|
|
1136
1196
|
previous = false;
|
|
1137
1197
|
const collapsesUp = reverseViews
|
|
1138
1198
|
.map((i) => (previous = i.size - i.minimumSize > 0 || previous))
|
|
@@ -1144,19 +1204,19 @@ class Splitview {
|
|
|
1144
1204
|
let position = 0;
|
|
1145
1205
|
for (let index = 0; index < this.sashes.length; index++) {
|
|
1146
1206
|
const sash = this.sashes[index];
|
|
1147
|
-
const viewItem = this.
|
|
1207
|
+
const viewItem = this.viewItems[index];
|
|
1148
1208
|
position += viewItem.size;
|
|
1149
1209
|
const min = !(collapsesDown[index] && expandsUp[index + 1]);
|
|
1150
1210
|
const max = !(expandsDown[index] && collapsesUp[index + 1]);
|
|
1151
1211
|
if (min && max) {
|
|
1152
1212
|
const upIndexes = range(index, -1);
|
|
1153
|
-
const downIndexes = range(index + 1, this.
|
|
1213
|
+
const downIndexes = range(index + 1, this.viewItems.length);
|
|
1154
1214
|
const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
|
|
1155
1215
|
const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
|
|
1156
1216
|
const snappedBefore = typeof snapBeforeIndex === 'number' &&
|
|
1157
|
-
!this.
|
|
1217
|
+
!this.viewItems[snapBeforeIndex].visible;
|
|
1158
1218
|
const snappedAfter = typeof snapAfterIndex === 'number' &&
|
|
1159
|
-
!this.
|
|
1219
|
+
!this.viewItems[snapAfterIndex].visible;
|
|
1160
1220
|
if (snappedBefore &&
|
|
1161
1221
|
collapsesUp[index] &&
|
|
1162
1222
|
(position > 0 || this.startSnappingEnabled)) {
|
|
@@ -1216,6 +1276,9 @@ class Splitview {
|
|
|
1216
1276
|
break;
|
|
1217
1277
|
}
|
|
1218
1278
|
}
|
|
1279
|
+
for (const viewItem of this.viewItems) {
|
|
1280
|
+
viewItem.dispose();
|
|
1281
|
+
}
|
|
1219
1282
|
this.element.remove();
|
|
1220
1283
|
}
|
|
1221
1284
|
}
|
|
@@ -1650,7 +1713,7 @@ class BranchNode extends CompositeDisposable {
|
|
|
1650
1713
|
throw new Error('Invalid index');
|
|
1651
1714
|
}
|
|
1652
1715
|
this.splitview.removeView(index, sizing);
|
|
1653
|
-
this._removeChild(index);
|
|
1716
|
+
return this._removeChild(index);
|
|
1654
1717
|
}
|
|
1655
1718
|
_addChild(node, index) {
|
|
1656
1719
|
this.children.splice(index, 0, node);
|
|
@@ -1672,10 +1735,10 @@ class BranchNode extends CompositeDisposable {
|
|
|
1672
1735
|
});
|
|
1673
1736
|
}
|
|
1674
1737
|
dispose() {
|
|
1675
|
-
super.dispose();
|
|
1676
1738
|
this._childrenDisposable.dispose();
|
|
1677
|
-
this.children.forEach((child) => child.dispose());
|
|
1678
1739
|
this.splitview.dispose();
|
|
1740
|
+
this.children.forEach((child) => child.dispose());
|
|
1741
|
+
super.dispose();
|
|
1679
1742
|
}
|
|
1680
1743
|
}
|
|
1681
1744
|
|
|
@@ -1905,7 +1968,8 @@ class Gridview {
|
|
|
1905
1968
|
if (oldRoot.children.length === 1) {
|
|
1906
1969
|
// can remove one level of redundant branching if there is only a single child
|
|
1907
1970
|
const childReference = oldRoot.children[0];
|
|
1908
|
-
oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
|
|
1971
|
+
const child = oldRoot.removeChild(0); // remove to prevent disposal when disposing of unwanted root
|
|
1972
|
+
child.dispose();
|
|
1909
1973
|
oldRoot.dispose();
|
|
1910
1974
|
this._root.addChild(
|
|
1911
1975
|
/**
|
|
@@ -2012,7 +2076,8 @@ class Gridview {
|
|
|
2012
2076
|
if (typeof newSiblingCachedVisibleSize === 'number') {
|
|
2013
2077
|
newSiblingSize = Sizing.Invisible(newSiblingCachedVisibleSize);
|
|
2014
2078
|
}
|
|
2015
|
-
grandParent.removeChild(parentIndex);
|
|
2079
|
+
const child = grandParent.removeChild(parentIndex);
|
|
2080
|
+
child.dispose();
|
|
2016
2081
|
const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
|
|
2017
2082
|
grandParent.addChild(newParent, parent.size, parentIndex);
|
|
2018
2083
|
const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
|
|
@@ -2574,6 +2639,7 @@ class Droptarget extends CompositeDisposable {
|
|
|
2574
2639
|
}
|
|
2575
2640
|
dispose() {
|
|
2576
2641
|
this.removeDropTarget();
|
|
2642
|
+
super.dispose();
|
|
2577
2643
|
}
|
|
2578
2644
|
toggleClasses(quadrant, width, height) {
|
|
2579
2645
|
var _a, _b, _c, _d;
|
|
@@ -2751,8 +2817,8 @@ class ContentContainer extends CompositeDisposable {
|
|
|
2751
2817
|
if (this.panel.view) {
|
|
2752
2818
|
const _onDidFocus = this.panel.view.content.onDidFocus;
|
|
2753
2819
|
const _onDidBlur = this.panel.view.content.onDidBlur;
|
|
2754
|
-
const
|
|
2755
|
-
disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire()));
|
|
2820
|
+
const focusTracker = trackFocus(this._element);
|
|
2821
|
+
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
2756
2822
|
if (_onDidFocus) {
|
|
2757
2823
|
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
2758
2824
|
}
|
|
@@ -2791,24 +2857,32 @@ class DragHandler extends CompositeDisposable {
|
|
|
2791
2857
|
constructor(el) {
|
|
2792
2858
|
super();
|
|
2793
2859
|
this.el = el;
|
|
2794
|
-
this.
|
|
2860
|
+
this.dataDisposable = new MutableDisposable();
|
|
2861
|
+
this.pointerEventsDisposable = new MutableDisposable();
|
|
2795
2862
|
this._onDragStart = new Emitter();
|
|
2796
2863
|
this.onDragStart = this._onDragStart.event;
|
|
2797
|
-
this.
|
|
2864
|
+
this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
|
|
2798
2865
|
this.configure();
|
|
2799
2866
|
}
|
|
2800
2867
|
configure() {
|
|
2801
2868
|
this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
|
|
2802
|
-
|
|
2869
|
+
const iframes = [
|
|
2803
2870
|
...getElementsByTagName('iframe'),
|
|
2804
2871
|
...getElementsByTagName('webview'),
|
|
2805
2872
|
];
|
|
2806
|
-
|
|
2873
|
+
this.pointerEventsDisposable.value = {
|
|
2874
|
+
dispose: () => {
|
|
2875
|
+
for (const iframe of iframes) {
|
|
2876
|
+
iframe.style.pointerEvents = 'auto';
|
|
2877
|
+
}
|
|
2878
|
+
},
|
|
2879
|
+
};
|
|
2880
|
+
for (const iframe of iframes) {
|
|
2807
2881
|
iframe.style.pointerEvents = 'none';
|
|
2808
2882
|
}
|
|
2809
2883
|
this.el.classList.add('dv-dragged');
|
|
2810
2884
|
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
2811
|
-
this.
|
|
2885
|
+
this.dataDisposable.value = this.getData(event.dataTransfer);
|
|
2812
2886
|
if (event.dataTransfer) {
|
|
2813
2887
|
event.dataTransfer.effectAllowed = 'move';
|
|
2814
2888
|
/**
|
|
@@ -2823,11 +2897,8 @@ class DragHandler extends CompositeDisposable {
|
|
|
2823
2897
|
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
2824
2898
|
}
|
|
2825
2899
|
}), addDisposableListener(this.el, 'dragend', () => {
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
}
|
|
2829
|
-
this.iframes = [];
|
|
2830
|
-
this.disposable.dispose();
|
|
2900
|
+
this.pointerEventsDisposable.dispose();
|
|
2901
|
+
this.dataDisposable.dispose();
|
|
2831
2902
|
}));
|
|
2832
2903
|
}
|
|
2833
2904
|
}
|
|
@@ -2845,13 +2916,12 @@ class Tab extends CompositeDisposable {
|
|
|
2845
2916
|
this.onChanged = this._onChanged.event;
|
|
2846
2917
|
this._onDropped = new Emitter();
|
|
2847
2918
|
this.onDrop = this._onDropped.event;
|
|
2848
|
-
this.addDisposables(this._onChanged, this._onDropped);
|
|
2849
2919
|
this._element = document.createElement('div');
|
|
2850
2920
|
this._element.className = 'tab';
|
|
2851
2921
|
this._element.tabIndex = 0;
|
|
2852
2922
|
this._element.draggable = true;
|
|
2853
2923
|
toggleClass(this.element, 'inactive-tab', true);
|
|
2854
|
-
this.addDisposables(new (class Handler extends DragHandler {
|
|
2924
|
+
this.addDisposables(this._onChanged, this._onDropped, new (class Handler extends DragHandler {
|
|
2855
2925
|
constructor() {
|
|
2856
2926
|
super(...arguments);
|
|
2857
2927
|
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
@@ -2864,9 +2934,6 @@ class Tab extends CompositeDisposable {
|
|
|
2864
2934
|
},
|
|
2865
2935
|
};
|
|
2866
2936
|
}
|
|
2867
|
-
dispose() {
|
|
2868
|
-
//
|
|
2869
|
-
}
|
|
2870
2937
|
})(this._element));
|
|
2871
2938
|
this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
|
|
2872
2939
|
if (event.defaultPrevented) {
|
|
@@ -2901,7 +2968,7 @@ class Tab extends CompositeDisposable {
|
|
|
2901
2968
|
});
|
|
2902
2969
|
this.addDisposables(this.droptarget.onDrop((event) => {
|
|
2903
2970
|
this._onDropped.fire(event);
|
|
2904
|
-
}));
|
|
2971
|
+
}), this.droptarget);
|
|
2905
2972
|
}
|
|
2906
2973
|
setActive(isActive) {
|
|
2907
2974
|
toggleClass(this.element, 'active-tab', isActive);
|
|
@@ -2916,7 +2983,6 @@ class Tab extends CompositeDisposable {
|
|
|
2916
2983
|
}
|
|
2917
2984
|
dispose() {
|
|
2918
2985
|
super.dispose();
|
|
2919
|
-
this.droptarget.dispose();
|
|
2920
2986
|
}
|
|
2921
2987
|
}
|
|
2922
2988
|
|
|
@@ -2962,9 +3028,6 @@ class GroupDragHandler extends DragHandler {
|
|
|
2962
3028
|
},
|
|
2963
3029
|
};
|
|
2964
3030
|
}
|
|
2965
|
-
dispose() {
|
|
2966
|
-
//
|
|
2967
|
-
}
|
|
2968
3031
|
}
|
|
2969
3032
|
|
|
2970
3033
|
class VoidContainer extends CompositeDisposable {
|
|
@@ -3120,6 +3183,7 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3120
3183
|
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
3121
3184
|
const { value, disposable } = tabToRemove;
|
|
3122
3185
|
disposable.dispose();
|
|
3186
|
+
value.dispose();
|
|
3123
3187
|
value.element.remove();
|
|
3124
3188
|
}
|
|
3125
3189
|
setActivePanel(panel) {
|
|
@@ -3163,9 +3227,10 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3163
3227
|
}
|
|
3164
3228
|
dispose() {
|
|
3165
3229
|
super.dispose();
|
|
3166
|
-
this.tabs
|
|
3167
|
-
|
|
3168
|
-
|
|
3230
|
+
for (const { value, disposable } of this.tabs) {
|
|
3231
|
+
disposable.dispose();
|
|
3232
|
+
value.dispose();
|
|
3233
|
+
}
|
|
3169
3234
|
this.tabs = [];
|
|
3170
3235
|
}
|
|
3171
3236
|
}
|
|
@@ -3263,7 +3328,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3263
3328
|
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
3264
3329
|
this.header.hidden = !!options.hideHeader;
|
|
3265
3330
|
this.locked = !!options.locked;
|
|
3266
|
-
this.addDisposables(this.
|
|
3331
|
+
this.addDisposables(this.tabsContainer.onDrop((event) => {
|
|
3267
3332
|
this.handleDropEvent(event.event, 'center', event.index);
|
|
3268
3333
|
}), this.contentContainer.onDidFocus(() => {
|
|
3269
3334
|
this.accessor.doSetGroupActive(this.groupPanel, true);
|
|
@@ -3271,7 +3336,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3271
3336
|
// noop
|
|
3272
3337
|
}), this.dropTarget.onDrop((event) => {
|
|
3273
3338
|
this.handleDropEvent(event.nativeEvent, event.position);
|
|
3274
|
-
}));
|
|
3339
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
3275
3340
|
}
|
|
3276
3341
|
initialize() {
|
|
3277
3342
|
var _a, _b;
|
|
@@ -3705,8 +3770,7 @@ class BaseGrid extends Resizable {
|
|
|
3705
3770
|
this.layout(0, 0, true); // set some elements height/widths
|
|
3706
3771
|
this.addDisposables(this.gridview.onDidChange(() => {
|
|
3707
3772
|
this._bufferOnDidLayoutChange.fire();
|
|
3708
|
-
}))
|
|
3709
|
-
this.addDisposables(Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3773
|
+
}), Event.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3710
3774
|
this._bufferOnDidLayoutChange.fire();
|
|
3711
3775
|
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
3712
3776
|
this._onDidLayoutChange.fire();
|
|
@@ -3809,7 +3873,6 @@ class BaseGrid extends Resizable {
|
|
|
3809
3873
|
this.gridview.layout(width, height);
|
|
3810
3874
|
}
|
|
3811
3875
|
dispose() {
|
|
3812
|
-
super.dispose();
|
|
3813
3876
|
this._onDidActiveGroupChange.dispose();
|
|
3814
3877
|
this._onDidAddGroup.dispose();
|
|
3815
3878
|
this._onDidRemoveGroup.dispose();
|
|
@@ -3818,6 +3881,7 @@ class BaseGrid extends Resizable {
|
|
|
3818
3881
|
group.dispose();
|
|
3819
3882
|
}
|
|
3820
3883
|
this.gridview.dispose();
|
|
3884
|
+
super.dispose();
|
|
3821
3885
|
}
|
|
3822
3886
|
}
|
|
3823
3887
|
|
|
@@ -3881,7 +3945,7 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3881
3945
|
//
|
|
3882
3946
|
this._onUpdateParameters = new Emitter();
|
|
3883
3947
|
this.onUpdateParameters = this._onUpdateParameters.event;
|
|
3884
|
-
this.addDisposables(this.
|
|
3948
|
+
this.addDisposables(this.onDidFocusChange((event) => {
|
|
3885
3949
|
this._isFocused = event.isFocused;
|
|
3886
3950
|
}), this.onDidActiveChange((event) => {
|
|
3887
3951
|
this._isActive = event.isActive;
|
|
@@ -3890,14 +3954,12 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3890
3954
|
}), this.onDidDimensionsChange((event) => {
|
|
3891
3955
|
this._width = event.width;
|
|
3892
3956
|
this._height = event.height;
|
|
3893
|
-
}));
|
|
3957
|
+
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
|
|
3894
3958
|
}
|
|
3895
3959
|
initialize(panel) {
|
|
3896
3960
|
this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
|
|
3897
3961
|
panel.update({
|
|
3898
|
-
params:
|
|
3899
|
-
params: parameters,
|
|
3900
|
-
},
|
|
3962
|
+
params: parameters,
|
|
3901
3963
|
});
|
|
3902
3964
|
});
|
|
3903
3965
|
}
|
|
@@ -3992,12 +4054,12 @@ class BasePanelView extends CompositeDisposable {
|
|
|
3992
4054
|
this._element.style.height = '100%';
|
|
3993
4055
|
this._element.style.width = '100%';
|
|
3994
4056
|
this._element.style.overflow = 'hidden';
|
|
3995
|
-
const
|
|
3996
|
-
this.addDisposables(this.api, onDidFocus(() => {
|
|
4057
|
+
const focusTracker = trackFocus(this._element);
|
|
4058
|
+
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
3997
4059
|
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
3998
|
-
}), onDidBlur(() => {
|
|
4060
|
+
}), focusTracker.onDidBlur(() => {
|
|
3999
4061
|
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
4000
|
-
}));
|
|
4062
|
+
}), focusTracker);
|
|
4001
4063
|
}
|
|
4002
4064
|
focus() {
|
|
4003
4065
|
this.api._onFocusEvent.fire();
|
|
@@ -4018,7 +4080,18 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4018
4080
|
}
|
|
4019
4081
|
update(event) {
|
|
4020
4082
|
var _a, _b;
|
|
4083
|
+
// merge the new parameters with the existing parameters
|
|
4021
4084
|
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) });
|
|
4085
|
+
/**
|
|
4086
|
+
* delete new keys that have a value of undefined,
|
|
4087
|
+
* allow values of null
|
|
4088
|
+
*/
|
|
4089
|
+
for (const key of Object.keys(event.params)) {
|
|
4090
|
+
if (event.params[key] === undefined) {
|
|
4091
|
+
delete this._params.params[key];
|
|
4092
|
+
}
|
|
4093
|
+
}
|
|
4094
|
+
// update the view with the updated props
|
|
4022
4095
|
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
4023
4096
|
}
|
|
4024
4097
|
toJSON() {
|
|
@@ -4032,9 +4105,9 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4032
4105
|
}
|
|
4033
4106
|
dispose() {
|
|
4034
4107
|
var _a;
|
|
4035
|
-
super.dispose();
|
|
4036
4108
|
this.api.dispose();
|
|
4037
4109
|
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
4110
|
+
super.dispose();
|
|
4038
4111
|
}
|
|
4039
4112
|
}
|
|
4040
4113
|
|
|
@@ -4413,7 +4486,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4413
4486
|
this._maximumHeight = options.maximumHeight;
|
|
4414
4487
|
}
|
|
4415
4488
|
this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
|
|
4416
|
-
this.addDisposables(this.
|
|
4489
|
+
this.addDisposables(this.api.onVisibilityChange((event) => {
|
|
4417
4490
|
const { isVisible } = event;
|
|
4418
4491
|
const { accessor } = this._params;
|
|
4419
4492
|
accessor.setVisible(this, isVisible);
|
|
@@ -4442,7 +4515,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4442
4515
|
height: event.height,
|
|
4443
4516
|
width: event.width,
|
|
4444
4517
|
});
|
|
4445
|
-
}));
|
|
4518
|
+
}), this._onDidChange);
|
|
4446
4519
|
}
|
|
4447
4520
|
setVisible(isVisible) {
|
|
4448
4521
|
this.api._onDidVisibilityChange.fire({ isVisible });
|
|
@@ -4599,7 +4672,7 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
4599
4672
|
this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
4600
4673
|
}
|
|
4601
4674
|
setTitle(title) {
|
|
4602
|
-
this.panel.
|
|
4675
|
+
this.panel.setTitle(title);
|
|
4603
4676
|
}
|
|
4604
4677
|
close() {
|
|
4605
4678
|
this.group.model.closePanel(this.panel);
|
|
@@ -4664,12 +4737,18 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
4664
4737
|
}
|
|
4665
4738
|
}
|
|
4666
4739
|
update(event) {
|
|
4667
|
-
|
|
4668
|
-
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4740
|
+
// merge the new parameters with the existing parameters
|
|
4741
|
+
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params);
|
|
4742
|
+
/**
|
|
4743
|
+
* delete new keys that have a value of undefined,
|
|
4744
|
+
* allow values of null
|
|
4745
|
+
*/
|
|
4746
|
+
for (const key of Object.keys(event.params)) {
|
|
4747
|
+
if (event.params[key] === undefined) {
|
|
4748
|
+
delete this._params[key];
|
|
4749
|
+
}
|
|
4672
4750
|
}
|
|
4751
|
+
// update the view with the updated props
|
|
4673
4752
|
this.view.update({
|
|
4674
4753
|
params: {
|
|
4675
4754
|
params: this._params,
|
|
@@ -5045,7 +5124,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5045
5124
|
size: { type: 'pixels', value: 20 },
|
|
5046
5125
|
},
|
|
5047
5126
|
});
|
|
5048
|
-
this.addDisposables(dropTarget
|
|
5127
|
+
this.addDisposables(dropTarget.onDrop((event) => {
|
|
5049
5128
|
const data = getPanelData();
|
|
5050
5129
|
if (data) {
|
|
5051
5130
|
this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
|
|
@@ -5053,7 +5132,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5053
5132
|
else {
|
|
5054
5133
|
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
|
|
5055
5134
|
}
|
|
5056
|
-
}));
|
|
5135
|
+
}), dropTarget);
|
|
5057
5136
|
this._api = new DockviewApi(this);
|
|
5058
5137
|
this.updateWatermark();
|
|
5059
5138
|
}
|
|
@@ -5377,31 +5456,33 @@ class DockviewComponent extends BaseGrid {
|
|
|
5377
5456
|
}
|
|
5378
5457
|
super.doRemoveGroup(group, { skipActive });
|
|
5379
5458
|
}
|
|
5380
|
-
moveGroupOrPanel(
|
|
5459
|
+
moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
|
|
5381
5460
|
var _a;
|
|
5382
|
-
const sourceGroup =
|
|
5383
|
-
? (_a = this._groups.get(
|
|
5461
|
+
const sourceGroup = sourceGroupId
|
|
5462
|
+
? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
|
|
5384
5463
|
: undefined;
|
|
5385
|
-
if (
|
|
5464
|
+
if (sourceItemId === undefined) {
|
|
5386
5465
|
if (sourceGroup) {
|
|
5387
|
-
this.moveGroup(sourceGroup,
|
|
5466
|
+
this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
|
|
5388
5467
|
}
|
|
5389
5468
|
return;
|
|
5390
5469
|
}
|
|
5391
|
-
if (!
|
|
5392
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5393
|
-
this.panels.find((panel) => panel.id ===
|
|
5470
|
+
if (!destinationTarget || destinationTarget === 'center') {
|
|
5471
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5472
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5394
5473
|
if (!groupItem) {
|
|
5395
|
-
throw new Error(`No panel with id ${
|
|
5474
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5396
5475
|
}
|
|
5397
5476
|
if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
|
|
5398
5477
|
this.doRemoveGroup(sourceGroup);
|
|
5399
5478
|
}
|
|
5400
|
-
|
|
5479
|
+
destinationGroup.model.openPanel(groupItem, {
|
|
5480
|
+
index: destinationIndex,
|
|
5481
|
+
});
|
|
5401
5482
|
}
|
|
5402
5483
|
else {
|
|
5403
|
-
const referenceLocation = getGridLocation(
|
|
5404
|
-
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5484
|
+
const referenceLocation = getGridLocation(destinationGroup.element);
|
|
5485
|
+
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5405
5486
|
if (sourceGroup && sourceGroup.size < 2) {
|
|
5406
5487
|
const [targetParentLocation, to] = tail(targetLocation);
|
|
5407
5488
|
const sourceLocation = getGridLocation(sourceGroup.element);
|
|
@@ -5419,18 +5500,18 @@ class DockviewComponent extends BaseGrid {
|
|
|
5419
5500
|
skipDispose: true,
|
|
5420
5501
|
});
|
|
5421
5502
|
// after deleting the group we need to re-evaulate the ref location
|
|
5422
|
-
const updatedReferenceLocation = getGridLocation(
|
|
5423
|
-
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation,
|
|
5503
|
+
const updatedReferenceLocation = getGridLocation(destinationGroup.element);
|
|
5504
|
+
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
|
|
5424
5505
|
this.doAddGroup(targetGroup, location);
|
|
5425
5506
|
}
|
|
5426
5507
|
}
|
|
5427
5508
|
else {
|
|
5428
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5429
|
-
this.panels.find((panel) => panel.id ===
|
|
5509
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5510
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5430
5511
|
if (!groupItem) {
|
|
5431
|
-
throw new Error(`No panel with id ${
|
|
5512
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5432
5513
|
}
|
|
5433
|
-
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5514
|
+
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5434
5515
|
const group = this.createGroupAtLocation(dropLocation);
|
|
5435
5516
|
group.model.openPanel(groupItem);
|
|
5436
5517
|
}
|
|
@@ -5524,11 +5605,11 @@ class DockviewComponent extends BaseGrid {
|
|
|
5524
5605
|
return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
|
|
5525
5606
|
}
|
|
5526
5607
|
dispose() {
|
|
5527
|
-
super.dispose();
|
|
5528
5608
|
this._onDidActivePanelChange.dispose();
|
|
5529
5609
|
this._onDidAddPanel.dispose();
|
|
5530
5610
|
this._onDidRemovePanel.dispose();
|
|
5531
5611
|
this._onDidLayoutFromJSON.dispose();
|
|
5612
|
+
super.dispose();
|
|
5532
5613
|
}
|
|
5533
5614
|
}
|
|
5534
5615
|
|
|
@@ -5786,7 +5867,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5786
5867
|
}
|
|
5787
5868
|
set splitview(value) {
|
|
5788
5869
|
this._splitview = value;
|
|
5789
|
-
this.
|
|
5870
|
+
this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
|
|
5790
5871
|
this._onDidLayoutChange.fire(undefined);
|
|
5791
5872
|
}), this._splitview.onDidAddView((e) => this._onDidAddView.fire(e)), this._splitview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
|
|
5792
5873
|
}
|
|
@@ -5808,7 +5889,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5808
5889
|
}
|
|
5809
5890
|
constructor(options) {
|
|
5810
5891
|
super(options.parentElement);
|
|
5811
|
-
this.
|
|
5892
|
+
this._splitviewChangeDisposable = new MutableDisposable();
|
|
5812
5893
|
this._panels = new Map();
|
|
5813
5894
|
this._onDidLayoutfromJSON = new Emitter();
|
|
5814
5895
|
this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
|
|
@@ -5826,7 +5907,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5826
5907
|
options.frameworkComponents = {};
|
|
5827
5908
|
}
|
|
5828
5909
|
this.splitview = new Splitview(this.element, options);
|
|
5829
|
-
this.addDisposables(this.
|
|
5910
|
+
this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
|
|
5830
5911
|
}
|
|
5831
5912
|
updateOptions(options) {
|
|
5832
5913
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
@@ -5864,15 +5945,15 @@ class SplitviewComponent extends Resizable {
|
|
|
5864
5945
|
}
|
|
5865
5946
|
}
|
|
5866
5947
|
removePanel(panel, sizing) {
|
|
5867
|
-
const
|
|
5868
|
-
if (!
|
|
5948
|
+
const item = this._panels.get(panel.id);
|
|
5949
|
+
if (!item) {
|
|
5869
5950
|
throw new Error(`unknown splitview panel ${panel.id}`);
|
|
5870
5951
|
}
|
|
5871
|
-
|
|
5872
|
-
disposable.value.dispose();
|
|
5952
|
+
item.dispose();
|
|
5873
5953
|
this._panels.delete(panel.id);
|
|
5874
5954
|
const index = this.panels.findIndex((_) => _ === panel);
|
|
5875
|
-
this.splitview.removeView(index, sizing);
|
|
5955
|
+
const removedView = this.splitview.removeView(index, sizing);
|
|
5956
|
+
removedView.dispose();
|
|
5876
5957
|
const panels = this.panels;
|
|
5877
5958
|
if (panels.length > 0) {
|
|
5878
5959
|
this.setActive(panels[panels.length - 1]);
|
|
@@ -5919,7 +6000,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5919
6000
|
}
|
|
5920
6001
|
this.setActive(view, true);
|
|
5921
6002
|
});
|
|
5922
|
-
this._panels.set(view.id,
|
|
6003
|
+
this._panels.set(view.id, disposable);
|
|
5923
6004
|
}
|
|
5924
6005
|
toJSON() {
|
|
5925
6006
|
var _a;
|
|
@@ -5992,20 +6073,26 @@ class SplitviewComponent extends Resizable {
|
|
|
5992
6073
|
this._onDidLayoutfromJSON.fire();
|
|
5993
6074
|
}
|
|
5994
6075
|
clear() {
|
|
5995
|
-
for (const
|
|
5996
|
-
|
|
5997
|
-
value.value.dispose();
|
|
6076
|
+
for (const disposable of this._panels.values()) {
|
|
6077
|
+
disposable.dispose();
|
|
5998
6078
|
}
|
|
5999
6079
|
this._panels.clear();
|
|
6000
|
-
this.splitview.
|
|
6080
|
+
while (this.splitview.length > 0) {
|
|
6081
|
+
const view = this.splitview.removeView(0, Sizing.Distribute, true);
|
|
6082
|
+
view.dispose();
|
|
6083
|
+
}
|
|
6001
6084
|
}
|
|
6002
6085
|
dispose() {
|
|
6003
|
-
for (const
|
|
6004
|
-
|
|
6005
|
-
value.value.dispose();
|
|
6086
|
+
for (const disposable of this._panels.values()) {
|
|
6087
|
+
disposable.dispose();
|
|
6006
6088
|
}
|
|
6007
6089
|
this._panels.clear();
|
|
6090
|
+
const views = this.splitview.getViews();
|
|
6091
|
+
this._splitviewChangeDisposable.dispose();
|
|
6008
6092
|
this.splitview.dispose();
|
|
6093
|
+
for (const view of views) {
|
|
6094
|
+
view.dispose();
|
|
6095
|
+
}
|
|
6009
6096
|
super.dispose();
|
|
6010
6097
|
}
|
|
6011
6098
|
}
|