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
|
*/
|
|
@@ -121,9 +121,49 @@ exports.DockviewEvent = void 0;
|
|
|
121
121
|
};
|
|
122
122
|
};
|
|
123
123
|
})(exports.DockviewEvent || (exports.DockviewEvent = {}));
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
class LeakageMonitor {
|
|
125
|
+
constructor() {
|
|
126
|
+
this.events = new Map();
|
|
127
|
+
}
|
|
128
|
+
get size() {
|
|
129
|
+
return this.events.size;
|
|
130
|
+
}
|
|
131
|
+
add(event, stacktrace) {
|
|
132
|
+
this.events.set(event, stacktrace);
|
|
133
|
+
}
|
|
134
|
+
delete(event) {
|
|
135
|
+
this.events.delete(event);
|
|
136
|
+
}
|
|
137
|
+
clear() {
|
|
138
|
+
this.events.clear();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
class Stacktrace {
|
|
142
|
+
static create() {
|
|
143
|
+
var _a;
|
|
144
|
+
return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
|
|
145
|
+
}
|
|
146
|
+
constructor(value) {
|
|
147
|
+
this.value = value;
|
|
148
|
+
}
|
|
149
|
+
print() {
|
|
150
|
+
console.warn(this.value);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
class Listener {
|
|
154
|
+
constructor(callback, stacktrace) {
|
|
155
|
+
this.callback = callback;
|
|
156
|
+
this.stacktrace = stacktrace;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
|
|
126
160
|
class Emitter {
|
|
161
|
+
static setLeakageMonitorEnabled(isEnabled) {
|
|
162
|
+
if (isEnabled !== Emitter.ENABLE_TRACKING) {
|
|
163
|
+
Emitter.MEMORY_LEAK_WATCHER.clear();
|
|
164
|
+
}
|
|
165
|
+
Emitter.ENABLE_TRACKING = isEnabled;
|
|
166
|
+
}
|
|
127
167
|
constructor(options) {
|
|
128
168
|
this.options = options;
|
|
129
169
|
this._listeners = [];
|
|
@@ -131,11 +171,12 @@ class Emitter {
|
|
|
131
171
|
}
|
|
132
172
|
get event() {
|
|
133
173
|
if (!this._event) {
|
|
134
|
-
this._event = (
|
|
174
|
+
this._event = (callback) => {
|
|
135
175
|
var _a;
|
|
136
176
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
|
|
137
|
-
|
|
177
|
+
callback(this._last);
|
|
138
178
|
}
|
|
179
|
+
const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
|
|
139
180
|
this._listeners.push(listener);
|
|
140
181
|
return {
|
|
141
182
|
dispose: () => {
|
|
@@ -143,28 +184,50 @@ class Emitter {
|
|
|
143
184
|
if (index > -1) {
|
|
144
185
|
this._listeners.splice(index, 1);
|
|
145
186
|
}
|
|
187
|
+
else if (Emitter.ENABLE_TRACKING) ;
|
|
146
188
|
},
|
|
147
189
|
};
|
|
148
190
|
};
|
|
191
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
192
|
+
Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
|
|
193
|
+
}
|
|
149
194
|
}
|
|
150
195
|
return this._event;
|
|
151
196
|
}
|
|
152
197
|
fire(e) {
|
|
153
198
|
this._last = e;
|
|
154
199
|
for (const listener of this._listeners) {
|
|
155
|
-
listener(e);
|
|
200
|
+
listener.callback(e);
|
|
156
201
|
}
|
|
157
202
|
}
|
|
158
203
|
dispose() {
|
|
159
|
-
this.
|
|
160
|
-
|
|
204
|
+
if (!this._disposed) {
|
|
205
|
+
this._disposed = true;
|
|
206
|
+
if (this._listeners.length > 0) {
|
|
207
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
208
|
+
queueMicrotask(() => {
|
|
209
|
+
var _a;
|
|
210
|
+
// don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
|
|
211
|
+
for (const listener of this._listeners) {
|
|
212
|
+
console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
this._listeners = [];
|
|
217
|
+
}
|
|
218
|
+
if (Emitter.ENABLE_TRACKING && this._event) {
|
|
219
|
+
Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
161
222
|
}
|
|
162
223
|
}
|
|
224
|
+
Emitter.ENABLE_TRACKING = false;
|
|
225
|
+
Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
|
|
163
226
|
function addDisposableWindowListener(element, type, listener, options) {
|
|
164
227
|
element.addEventListener(type, listener, options);
|
|
165
228
|
return {
|
|
166
229
|
dispose: () => {
|
|
167
|
-
element.removeEventListener(type, listener);
|
|
230
|
+
element.removeEventListener(type, listener, options);
|
|
168
231
|
},
|
|
169
232
|
};
|
|
170
233
|
}
|
|
@@ -172,7 +235,7 @@ function addDisposableListener(element, type, listener, options) {
|
|
|
172
235
|
element.addEventListener(type, listener, options);
|
|
173
236
|
return {
|
|
174
237
|
dispose: () => {
|
|
175
|
-
element.removeEventListener(type, listener);
|
|
238
|
+
element.removeEventListener(type, listener, options);
|
|
176
239
|
},
|
|
177
240
|
};
|
|
178
241
|
}
|
|
@@ -212,13 +275,13 @@ class CompositeDisposable {
|
|
|
212
275
|
}
|
|
213
276
|
constructor(...args) {
|
|
214
277
|
this._isDisposed = false;
|
|
215
|
-
this.
|
|
278
|
+
this._disposables = args;
|
|
216
279
|
}
|
|
217
280
|
addDisposables(...args) {
|
|
218
|
-
args.forEach((arg) => this.
|
|
281
|
+
args.forEach((arg) => this._disposables.push(arg));
|
|
219
282
|
}
|
|
220
283
|
dispose() {
|
|
221
|
-
this.
|
|
284
|
+
this._disposables.forEach((arg) => arg.dispose());
|
|
222
285
|
this._isDisposed = true;
|
|
223
286
|
}
|
|
224
287
|
}
|
|
@@ -308,6 +371,7 @@ class FocusTracker extends CompositeDisposable {
|
|
|
308
371
|
this.onDidFocus = this._onDidFocus.event;
|
|
309
372
|
this._onDidBlur = new Emitter();
|
|
310
373
|
this.onDidBlur = this._onDidBlur.event;
|
|
374
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
311
375
|
let hasFocus = isAncestor(document.activeElement, element);
|
|
312
376
|
let loosingFocus = false;
|
|
313
377
|
const onFocus = () => {
|
|
@@ -352,11 +416,6 @@ class FocusTracker extends CompositeDisposable {
|
|
|
352
416
|
refreshState() {
|
|
353
417
|
this._refreshStateHandler();
|
|
354
418
|
}
|
|
355
|
-
dispose() {
|
|
356
|
-
super.dispose();
|
|
357
|
-
this._onDidBlur.dispose();
|
|
358
|
-
this._onDidFocus.dispose();
|
|
359
|
-
}
|
|
360
419
|
}
|
|
361
420
|
|
|
362
421
|
function createComponent(id, componentName, components = {}, frameworkComponents = {}, createFrameworkComponent, fallback) {
|
|
@@ -585,7 +644,7 @@ class Splitview {
|
|
|
585
644
|
this._orthogonalSize = value;
|
|
586
645
|
}
|
|
587
646
|
get length() {
|
|
588
|
-
return this.
|
|
647
|
+
return this.viewItems.length;
|
|
589
648
|
}
|
|
590
649
|
get proportions() {
|
|
591
650
|
return this._proportions ? [...this._proportions] : undefined;
|
|
@@ -604,12 +663,12 @@ class Splitview {
|
|
|
604
663
|
: 'vertical');
|
|
605
664
|
}
|
|
606
665
|
get minimumSize() {
|
|
607
|
-
return this.
|
|
666
|
+
return this.viewItems.reduce((r, item) => r + item.minimumSize, 0);
|
|
608
667
|
}
|
|
609
668
|
get maximumSize() {
|
|
610
669
|
return this.length === 0
|
|
611
670
|
? Number.POSITIVE_INFINITY
|
|
612
|
-
: this.
|
|
671
|
+
: this.viewItems.reduce((r, item) => r + item.maximumSize, 0);
|
|
613
672
|
}
|
|
614
673
|
get startSnappingEnabled() {
|
|
615
674
|
return this._startSnappingEnabled;
|
|
@@ -633,7 +692,7 @@ class Splitview {
|
|
|
633
692
|
}
|
|
634
693
|
constructor(container, options) {
|
|
635
694
|
this.container = container;
|
|
636
|
-
this.
|
|
695
|
+
this.viewItems = [];
|
|
637
696
|
this.sashes = [];
|
|
638
697
|
this._size = 0;
|
|
639
698
|
this._orthogonalSize = 0;
|
|
@@ -647,12 +706,12 @@ class Splitview {
|
|
|
647
706
|
this.onDidAddView = this._onDidAddView.event;
|
|
648
707
|
this._onDidRemoveView = new Emitter();
|
|
649
708
|
this.onDidRemoveView = this._onDidRemoveView.event;
|
|
650
|
-
this.resize = (index, delta, sizes = this.
|
|
651
|
-
if (index < 0 || index > this.
|
|
709
|
+
this.resize = (index, delta, sizes = this.viewItems.map((x) => x.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) => {
|
|
710
|
+
if (index < 0 || index > this.viewItems.length) {
|
|
652
711
|
return 0;
|
|
653
712
|
}
|
|
654
713
|
const upIndexes = range(index, -1);
|
|
655
|
-
const downIndexes = range(index + 1, this.
|
|
714
|
+
const downIndexes = range(index + 1, this.viewItems.length);
|
|
656
715
|
//
|
|
657
716
|
if (highPriorityIndexes) {
|
|
658
717
|
for (const i of highPriorityIndexes) {
|
|
@@ -667,34 +726,34 @@ class Splitview {
|
|
|
667
726
|
}
|
|
668
727
|
}
|
|
669
728
|
//
|
|
670
|
-
const upItems = upIndexes.map((i) => this.
|
|
729
|
+
const upItems = upIndexes.map((i) => this.viewItems[i]);
|
|
671
730
|
const upSizes = upIndexes.map((i) => sizes[i]);
|
|
672
731
|
//
|
|
673
|
-
const downItems = downIndexes.map((i) => this.
|
|
732
|
+
const downItems = downIndexes.map((i) => this.viewItems[i]);
|
|
674
733
|
const downSizes = downIndexes.map((i) => sizes[i]);
|
|
675
734
|
//
|
|
676
|
-
const minDeltaUp = upIndexes.reduce((_, i) => _ + this.
|
|
677
|
-
const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.
|
|
735
|
+
const minDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].minimumSize - sizes[i], 0);
|
|
736
|
+
const maxDeltaUp = upIndexes.reduce((_, i) => _ + this.viewItems[i].maximumSize - sizes[i], 0);
|
|
678
737
|
//
|
|
679
738
|
const maxDeltaDown = downIndexes.length === 0
|
|
680
739
|
? Number.POSITIVE_INFINITY
|
|
681
|
-
: downIndexes.reduce((_, i) => _ + sizes[i] - this.
|
|
740
|
+
: downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].minimumSize, 0);
|
|
682
741
|
const minDeltaDown = downIndexes.length === 0
|
|
683
742
|
? Number.NEGATIVE_INFINITY
|
|
684
|
-
: downIndexes.reduce((_, i) => _ + sizes[i] - this.
|
|
743
|
+
: downIndexes.reduce((_, i) => _ + sizes[i] - this.viewItems[i].maximumSize, 0);
|
|
685
744
|
//
|
|
686
745
|
const minDelta = Math.max(minDeltaUp, minDeltaDown);
|
|
687
746
|
const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
|
|
688
747
|
//
|
|
689
748
|
let snapped = false;
|
|
690
749
|
if (snapBefore) {
|
|
691
|
-
const snapView = this.
|
|
750
|
+
const snapView = this.viewItems[snapBefore.index];
|
|
692
751
|
const visible = delta >= snapBefore.limitDelta;
|
|
693
752
|
snapped = visible !== snapView.visible;
|
|
694
753
|
snapView.setVisible(visible, snapBefore.size);
|
|
695
754
|
}
|
|
696
755
|
if (!snapped && snapAfter) {
|
|
697
|
-
const snapView = this.
|
|
756
|
+
const snapView = this.viewItems[snapAfter.index];
|
|
698
757
|
const visible = delta < snapAfter.limitDelta;
|
|
699
758
|
snapped = visible !== snapView.visible;
|
|
700
759
|
snapView.setVisible(visible, snapAfter.size);
|
|
@@ -756,7 +815,7 @@ class Splitview {
|
|
|
756
815
|
);
|
|
757
816
|
});
|
|
758
817
|
// Initialize content size and proportions for first layout
|
|
759
|
-
this.contentSize = this.
|
|
818
|
+
this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
760
819
|
this.saveProportions();
|
|
761
820
|
}
|
|
762
821
|
}
|
|
@@ -773,18 +832,18 @@ class Splitview {
|
|
|
773
832
|
}
|
|
774
833
|
}
|
|
775
834
|
isViewVisible(index) {
|
|
776
|
-
if (index < 0 || index >= this.
|
|
835
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
777
836
|
throw new Error('Index out of bounds');
|
|
778
837
|
}
|
|
779
|
-
const viewItem = this.
|
|
838
|
+
const viewItem = this.viewItems[index];
|
|
780
839
|
return viewItem.visible;
|
|
781
840
|
}
|
|
782
841
|
setViewVisible(index, visible) {
|
|
783
|
-
if (index < 0 || index >= this.
|
|
842
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
784
843
|
throw new Error('Index out of bounds');
|
|
785
844
|
}
|
|
786
845
|
toggleClass(this.container, 'visible', visible);
|
|
787
|
-
const viewItem = this.
|
|
846
|
+
const viewItem = this.viewItems[index];
|
|
788
847
|
toggleClass(this.container, 'visible', visible);
|
|
789
848
|
viewItem.setVisible(visible, viewItem.size);
|
|
790
849
|
this.distributeEmptySpace(index);
|
|
@@ -792,33 +851,33 @@ class Splitview {
|
|
|
792
851
|
this.saveProportions();
|
|
793
852
|
}
|
|
794
853
|
getViewSize(index) {
|
|
795
|
-
if (index < 0 || index >= this.
|
|
854
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
796
855
|
return -1;
|
|
797
856
|
}
|
|
798
|
-
return this.
|
|
857
|
+
return this.viewItems[index].size;
|
|
799
858
|
}
|
|
800
859
|
resizeView(index, size) {
|
|
801
|
-
if (index < 0 || index >= this.
|
|
860
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
802
861
|
return;
|
|
803
862
|
}
|
|
804
|
-
const indexes = range(this.
|
|
863
|
+
const indexes = range(this.viewItems.length).filter((i) => i !== index);
|
|
805
864
|
const lowPriorityIndexes = [
|
|
806
|
-
...indexes.filter((i) => this.
|
|
865
|
+
...indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low),
|
|
807
866
|
index,
|
|
808
867
|
];
|
|
809
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
810
|
-
const item = this.
|
|
868
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
|
|
869
|
+
const item = this.viewItems[index];
|
|
811
870
|
size = Math.round(size);
|
|
812
871
|
size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this._size));
|
|
813
872
|
item.size = size;
|
|
814
873
|
this.relayout(lowPriorityIndexes, highPriorityIndexes);
|
|
815
874
|
}
|
|
816
875
|
getViews() {
|
|
817
|
-
return this.
|
|
876
|
+
return this.viewItems.map((x) => x.view);
|
|
818
877
|
}
|
|
819
878
|
onDidChange(item, size) {
|
|
820
|
-
const index = this.
|
|
821
|
-
if (index < 0 || index >= this.
|
|
879
|
+
const index = this.viewItems.indexOf(item);
|
|
880
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
822
881
|
return;
|
|
823
882
|
}
|
|
824
883
|
size = typeof size === 'number' ? size : item.size;
|
|
@@ -826,7 +885,7 @@ class Splitview {
|
|
|
826
885
|
item.size = size;
|
|
827
886
|
this.relayout([index]);
|
|
828
887
|
}
|
|
829
|
-
addView(view, size = { type: 'distribute' }, index = this.
|
|
888
|
+
addView(view, size = { type: 'distribute' }, index = this.viewItems.length, skipLayout) {
|
|
830
889
|
const container = document.createElement('div');
|
|
831
890
|
container.className = 'view';
|
|
832
891
|
container.appendChild(view.element);
|
|
@@ -844,24 +903,25 @@ class Splitview {
|
|
|
844
903
|
viewSize = view.minimumSize;
|
|
845
904
|
}
|
|
846
905
|
const disposable = view.onDidChange((newSize) => this.onDidChange(viewItem, newSize.size));
|
|
847
|
-
const
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
906
|
+
const viewItem = new ViewItem(container, view, viewSize, {
|
|
907
|
+
dispose: () => {
|
|
908
|
+
disposable.dispose();
|
|
909
|
+
this.viewContainer.removeChild(container);
|
|
910
|
+
},
|
|
911
|
+
});
|
|
912
|
+
if (index === this.viewItems.length) {
|
|
853
913
|
this.viewContainer.appendChild(container);
|
|
854
914
|
}
|
|
855
915
|
else {
|
|
856
916
|
this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));
|
|
857
917
|
}
|
|
858
|
-
this.
|
|
859
|
-
if (this.
|
|
918
|
+
this.viewItems.splice(index, 0, viewItem);
|
|
919
|
+
if (this.viewItems.length > 1) {
|
|
860
920
|
//add sash
|
|
861
921
|
const sash = document.createElement('div');
|
|
862
922
|
sash.className = 'sash';
|
|
863
923
|
const onStart = (event) => {
|
|
864
|
-
for (const item of this.
|
|
924
|
+
for (const item of this.viewItems) {
|
|
865
925
|
item.enabled = false;
|
|
866
926
|
}
|
|
867
927
|
const iframes = [
|
|
@@ -876,27 +936,29 @@ class Splitview {
|
|
|
876
936
|
: event.clientY;
|
|
877
937
|
const sashIndex = firstIndex(this.sashes, (s) => s.container === sash);
|
|
878
938
|
//
|
|
879
|
-
const sizes = this.
|
|
939
|
+
const sizes = this.viewItems.map((x) => x.size);
|
|
880
940
|
//
|
|
881
941
|
let snapBefore;
|
|
882
942
|
let snapAfter;
|
|
883
943
|
const upIndexes = range(sashIndex, -1);
|
|
884
|
-
const downIndexes = range(sashIndex + 1, this.
|
|
885
|
-
const minDeltaUp = upIndexes.reduce((r, i) => r + (this.
|
|
886
|
-
const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.
|
|
944
|
+
const downIndexes = range(sashIndex + 1, this.viewItems.length);
|
|
945
|
+
const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);
|
|
946
|
+
const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].viewMaximumSize - sizes[i]), 0);
|
|
887
947
|
const maxDeltaDown = downIndexes.length === 0
|
|
888
948
|
? Number.POSITIVE_INFINITY
|
|
889
|
-
: downIndexes.reduce((r, i) => r +
|
|
949
|
+
: downIndexes.reduce((r, i) => r +
|
|
950
|
+
(sizes[i] - this.viewItems[i].minimumSize), 0);
|
|
890
951
|
const minDeltaDown = downIndexes.length === 0
|
|
891
952
|
? Number.NEGATIVE_INFINITY
|
|
892
953
|
: downIndexes.reduce((r, i) => r +
|
|
893
|
-
(sizes[i] -
|
|
954
|
+
(sizes[i] -
|
|
955
|
+
this.viewItems[i].viewMaximumSize), 0);
|
|
894
956
|
const minDelta = Math.max(minDeltaUp, minDeltaDown);
|
|
895
957
|
const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);
|
|
896
958
|
const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
|
|
897
959
|
const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
|
|
898
960
|
if (typeof snapBeforeIndex === 'number') {
|
|
899
|
-
const snappedViewItem = this.
|
|
961
|
+
const snappedViewItem = this.viewItems[snapBeforeIndex];
|
|
900
962
|
const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
|
|
901
963
|
snapBefore = {
|
|
902
964
|
index: snapBeforeIndex,
|
|
@@ -907,7 +969,7 @@ class Splitview {
|
|
|
907
969
|
};
|
|
908
970
|
}
|
|
909
971
|
if (typeof snapAfterIndex === 'number') {
|
|
910
|
-
const snappedViewItem = this.
|
|
972
|
+
const snappedViewItem = this.viewItems[snapAfterIndex];
|
|
911
973
|
const halfSize = Math.floor(snappedViewItem.viewMinimumSize / 2);
|
|
912
974
|
snapAfter = {
|
|
913
975
|
index: snapAfterIndex,
|
|
@@ -928,7 +990,7 @@ class Splitview {
|
|
|
928
990
|
this.layoutViews();
|
|
929
991
|
};
|
|
930
992
|
const end = () => {
|
|
931
|
-
for (const item of this.
|
|
993
|
+
for (const item of this.viewItems) {
|
|
932
994
|
item.enabled = true;
|
|
933
995
|
}
|
|
934
996
|
for (const iframe of iframes) {
|
|
@@ -937,12 +999,10 @@ class Splitview {
|
|
|
937
999
|
this.saveProportions();
|
|
938
1000
|
document.removeEventListener('mousemove', mousemove);
|
|
939
1001
|
document.removeEventListener('mouseup', end);
|
|
940
|
-
document.removeEventListener('mouseend', end);
|
|
941
1002
|
this._onDidSashEnd.fire(undefined);
|
|
942
1003
|
};
|
|
943
1004
|
document.addEventListener('mousemove', mousemove);
|
|
944
1005
|
document.addEventListener('mouseup', end);
|
|
945
|
-
document.addEventListener('mouseend', end);
|
|
946
1006
|
};
|
|
947
1007
|
sash.addEventListener('mousedown', onStart);
|
|
948
1008
|
const sashItem = {
|
|
@@ -968,7 +1028,7 @@ class Splitview {
|
|
|
968
1028
|
distributeViewSizes() {
|
|
969
1029
|
const flexibleViewItems = [];
|
|
970
1030
|
let flexibleSize = 0;
|
|
971
|
-
for (const item of this.
|
|
1031
|
+
for (const item of this.viewItems) {
|
|
972
1032
|
if (item.maximumSize - item.minimumSize > 0) {
|
|
973
1033
|
flexibleViewItems.push(item);
|
|
974
1034
|
flexibleSize += item.size;
|
|
@@ -978,17 +1038,17 @@ class Splitview {
|
|
|
978
1038
|
for (const item of flexibleViewItems) {
|
|
979
1039
|
item.size = clamp(size, item.minimumSize, item.maximumSize);
|
|
980
1040
|
}
|
|
981
|
-
const indexes = range(this.
|
|
982
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
983
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1041
|
+
const indexes = range(this.viewItems.length);
|
|
1042
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low);
|
|
1043
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
|
|
984
1044
|
this.relayout(lowPriorityIndexes, highPriorityIndexes);
|
|
985
1045
|
}
|
|
986
1046
|
removeView(index, sizing, skipLayout = false) {
|
|
987
1047
|
// Remove view
|
|
988
|
-
const viewItem = this.
|
|
1048
|
+
const viewItem = this.viewItems.splice(index, 1)[0];
|
|
989
1049
|
viewItem.dispose();
|
|
990
1050
|
// Remove sash
|
|
991
|
-
if (this.
|
|
1051
|
+
if (this.viewItems.length >= 1) {
|
|
992
1052
|
const sashIndex = Math.max(index - 1, 0);
|
|
993
1053
|
const sashItem = this.sashes.splice(sashIndex, 1)[0];
|
|
994
1054
|
sashItem.disposable();
|
|
@@ -1003,10 +1063,10 @@ class Splitview {
|
|
|
1003
1063
|
return viewItem.view;
|
|
1004
1064
|
}
|
|
1005
1065
|
getViewCachedVisibleSize(index) {
|
|
1006
|
-
if (index < 0 || index >= this.
|
|
1066
|
+
if (index < 0 || index >= this.viewItems.length) {
|
|
1007
1067
|
throw new Error('Index out of bounds');
|
|
1008
1068
|
}
|
|
1009
|
-
const viewItem = this.
|
|
1069
|
+
const viewItem = this.viewItems[index];
|
|
1010
1070
|
return viewItem.cachedVisibleSize;
|
|
1011
1071
|
}
|
|
1012
1072
|
moveView(from, to) {
|
|
@@ -1022,14 +1082,14 @@ class Splitview {
|
|
|
1022
1082
|
this.size = size;
|
|
1023
1083
|
this.orthogonalSize = orthogonalSize;
|
|
1024
1084
|
if (!this.proportions) {
|
|
1025
|
-
const indexes = range(this.
|
|
1026
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
1027
|
-
const highPriorityIndexes = indexes.filter((i) => this.
|
|
1028
|
-
this.resize(this.
|
|
1085
|
+
const indexes = range(this.viewItems.length);
|
|
1086
|
+
const lowPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.Low);
|
|
1087
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
|
|
1088
|
+
this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);
|
|
1029
1089
|
}
|
|
1030
1090
|
else {
|
|
1031
|
-
for (let i = 0; i < this.
|
|
1032
|
-
const item = this.
|
|
1091
|
+
for (let i = 0; i < this.viewItems.length; i++) {
|
|
1092
|
+
const item = this.viewItems[i];
|
|
1033
1093
|
item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);
|
|
1034
1094
|
}
|
|
1035
1095
|
}
|
|
@@ -1037,18 +1097,18 @@ class Splitview {
|
|
|
1037
1097
|
this.layoutViews();
|
|
1038
1098
|
}
|
|
1039
1099
|
relayout(lowPriorityIndexes, highPriorityIndexes) {
|
|
1040
|
-
const contentSize = this.
|
|
1041
|
-
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);
|
|
1042
1102
|
this.distributeEmptySpace();
|
|
1043
1103
|
this.layoutViews();
|
|
1044
1104
|
this.saveProportions();
|
|
1045
1105
|
}
|
|
1046
1106
|
distributeEmptySpace(lowPriorityIndex) {
|
|
1047
|
-
const contentSize = this.
|
|
1107
|
+
const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1048
1108
|
let emptyDelta = this.size - contentSize;
|
|
1049
|
-
const indexes = range(this.
|
|
1050
|
-
const lowPriorityIndexes = indexes.filter((i) => this.
|
|
1051
|
-
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 === exports.LayoutPriority.Low);
|
|
1111
|
+
const highPriorityIndexes = indexes.filter((i) => this.viewItems[i].priority === exports.LayoutPriority.High);
|
|
1052
1112
|
for (const index of highPriorityIndexes) {
|
|
1053
1113
|
pushToStart(indexes, index);
|
|
1054
1114
|
}
|
|
@@ -1059,7 +1119,7 @@ class Splitview {
|
|
|
1059
1119
|
pushToEnd(indexes, lowPriorityIndex);
|
|
1060
1120
|
}
|
|
1061
1121
|
for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {
|
|
1062
|
-
const item = this.
|
|
1122
|
+
const item = this.viewItems[indexes[i]];
|
|
1063
1123
|
const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);
|
|
1064
1124
|
const viewDelta = size - item.size;
|
|
1065
1125
|
emptyDelta -= viewDelta;
|
|
@@ -1068,16 +1128,16 @@ class Splitview {
|
|
|
1068
1128
|
}
|
|
1069
1129
|
saveProportions() {
|
|
1070
1130
|
if (this.proportionalLayout && this.contentSize > 0) {
|
|
1071
|
-
this._proportions = this.
|
|
1131
|
+
this._proportions = this.viewItems.map((i) => i.size / this.contentSize);
|
|
1072
1132
|
}
|
|
1073
1133
|
}
|
|
1074
1134
|
layoutViews() {
|
|
1075
|
-
this.contentSize = this.
|
|
1135
|
+
this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);
|
|
1076
1136
|
let sum = 0;
|
|
1077
1137
|
const x = [];
|
|
1078
1138
|
this.updateSashEnablement();
|
|
1079
|
-
for (let i = 0; i < this.
|
|
1080
|
-
sum += this.
|
|
1139
|
+
for (let i = 0; i < this.viewItems.length - 1; i++) {
|
|
1140
|
+
sum += this.viewItems[i].size;
|
|
1081
1141
|
x.push(sum);
|
|
1082
1142
|
const offset = Math.min(Math.max(0, sum - 2), this.size - 4);
|
|
1083
1143
|
if (this._orientation === exports.Orientation.HORIZONTAL) {
|
|
@@ -1089,7 +1149,7 @@ class Splitview {
|
|
|
1089
1149
|
this.sashes[i].container.style.top = `${offset}px`;
|
|
1090
1150
|
}
|
|
1091
1151
|
}
|
|
1092
|
-
this.
|
|
1152
|
+
this.viewItems.forEach((view, i) => {
|
|
1093
1153
|
if (this._orientation === exports.Orientation.HORIZONTAL) {
|
|
1094
1154
|
view.container.style.width = `${view.size}px`;
|
|
1095
1155
|
view.container.style.left = i == 0 ? '0px' : `${x[i - 1]}px`;
|
|
@@ -1108,7 +1168,7 @@ class Splitview {
|
|
|
1108
1168
|
findFirstSnapIndex(indexes) {
|
|
1109
1169
|
// visible views first
|
|
1110
1170
|
for (const index of indexes) {
|
|
1111
|
-
const viewItem = this.
|
|
1171
|
+
const viewItem = this.viewItems[index];
|
|
1112
1172
|
if (!viewItem.visible) {
|
|
1113
1173
|
continue;
|
|
1114
1174
|
}
|
|
@@ -1118,7 +1178,7 @@ class Splitview {
|
|
|
1118
1178
|
}
|
|
1119
1179
|
// then, hidden views
|
|
1120
1180
|
for (const index of indexes) {
|
|
1121
|
-
const viewItem = this.
|
|
1181
|
+
const viewItem = this.viewItems[index];
|
|
1122
1182
|
if (viewItem.visible &&
|
|
1123
1183
|
viewItem.maximumSize - viewItem.minimumSize > 0) {
|
|
1124
1184
|
return undefined;
|
|
@@ -1131,10 +1191,10 @@ class Splitview {
|
|
|
1131
1191
|
}
|
|
1132
1192
|
updateSashEnablement() {
|
|
1133
1193
|
let previous = false;
|
|
1134
|
-
const collapsesDown = this.
|
|
1194
|
+
const collapsesDown = this.viewItems.map((i) => (previous = i.size - i.minimumSize > 0 || previous));
|
|
1135
1195
|
previous = false;
|
|
1136
|
-
const expandsDown = this.
|
|
1137
|
-
const reverseViews = [...this.
|
|
1196
|
+
const expandsDown = this.viewItems.map((i) => (previous = i.maximumSize - i.size > 0 || previous));
|
|
1197
|
+
const reverseViews = [...this.viewItems].reverse();
|
|
1138
1198
|
previous = false;
|
|
1139
1199
|
const collapsesUp = reverseViews
|
|
1140
1200
|
.map((i) => (previous = i.size - i.minimumSize > 0 || previous))
|
|
@@ -1146,19 +1206,19 @@ class Splitview {
|
|
|
1146
1206
|
let position = 0;
|
|
1147
1207
|
for (let index = 0; index < this.sashes.length; index++) {
|
|
1148
1208
|
const sash = this.sashes[index];
|
|
1149
|
-
const viewItem = this.
|
|
1209
|
+
const viewItem = this.viewItems[index];
|
|
1150
1210
|
position += viewItem.size;
|
|
1151
1211
|
const min = !(collapsesDown[index] && expandsUp[index + 1]);
|
|
1152
1212
|
const max = !(expandsDown[index] && collapsesUp[index + 1]);
|
|
1153
1213
|
if (min && max) {
|
|
1154
1214
|
const upIndexes = range(index, -1);
|
|
1155
|
-
const downIndexes = range(index + 1, this.
|
|
1215
|
+
const downIndexes = range(index + 1, this.viewItems.length);
|
|
1156
1216
|
const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);
|
|
1157
1217
|
const snapAfterIndex = this.findFirstSnapIndex(downIndexes);
|
|
1158
1218
|
const snappedBefore = typeof snapBeforeIndex === 'number' &&
|
|
1159
|
-
!this.
|
|
1219
|
+
!this.viewItems[snapBeforeIndex].visible;
|
|
1160
1220
|
const snappedAfter = typeof snapAfterIndex === 'number' &&
|
|
1161
|
-
!this.
|
|
1221
|
+
!this.viewItems[snapAfterIndex].visible;
|
|
1162
1222
|
if (snappedBefore &&
|
|
1163
1223
|
collapsesUp[index] &&
|
|
1164
1224
|
(position > 0 || this.startSnappingEnabled)) {
|
|
@@ -1218,6 +1278,9 @@ class Splitview {
|
|
|
1218
1278
|
break;
|
|
1219
1279
|
}
|
|
1220
1280
|
}
|
|
1281
|
+
for (const viewItem of this.viewItems) {
|
|
1282
|
+
viewItem.dispose();
|
|
1283
|
+
}
|
|
1221
1284
|
this.element.remove();
|
|
1222
1285
|
}
|
|
1223
1286
|
}
|
|
@@ -1652,7 +1715,7 @@ class BranchNode extends CompositeDisposable {
|
|
|
1652
1715
|
throw new Error('Invalid index');
|
|
1653
1716
|
}
|
|
1654
1717
|
this.splitview.removeView(index, sizing);
|
|
1655
|
-
this._removeChild(index);
|
|
1718
|
+
return this._removeChild(index);
|
|
1656
1719
|
}
|
|
1657
1720
|
_addChild(node, index) {
|
|
1658
1721
|
this.children.splice(index, 0, node);
|
|
@@ -1674,10 +1737,10 @@ class BranchNode extends CompositeDisposable {
|
|
|
1674
1737
|
});
|
|
1675
1738
|
}
|
|
1676
1739
|
dispose() {
|
|
1677
|
-
super.dispose();
|
|
1678
1740
|
this._childrenDisposable.dispose();
|
|
1679
|
-
this.children.forEach((child) => child.dispose());
|
|
1680
1741
|
this.splitview.dispose();
|
|
1742
|
+
this.children.forEach((child) => child.dispose());
|
|
1743
|
+
super.dispose();
|
|
1681
1744
|
}
|
|
1682
1745
|
}
|
|
1683
1746
|
|
|
@@ -1907,7 +1970,8 @@ class Gridview {
|
|
|
1907
1970
|
if (oldRoot.children.length === 1) {
|
|
1908
1971
|
// can remove one level of redundant branching if there is only a single child
|
|
1909
1972
|
const childReference = oldRoot.children[0];
|
|
1910
|
-
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();
|
|
1911
1975
|
oldRoot.dispose();
|
|
1912
1976
|
this._root.addChild(
|
|
1913
1977
|
/**
|
|
@@ -2014,7 +2078,8 @@ class Gridview {
|
|
|
2014
2078
|
if (typeof newSiblingCachedVisibleSize === 'number') {
|
|
2015
2079
|
newSiblingSize = exports.Sizing.Invisible(newSiblingCachedVisibleSize);
|
|
2016
2080
|
}
|
|
2017
|
-
grandParent.removeChild(parentIndex);
|
|
2081
|
+
const child = grandParent.removeChild(parentIndex);
|
|
2082
|
+
child.dispose();
|
|
2018
2083
|
const newParent = new BranchNode(parent.orientation, this.proportionalLayout, this.styles, parent.size, parent.orthogonalSize);
|
|
2019
2084
|
grandParent.addChild(newParent, parent.size, parentIndex);
|
|
2020
2085
|
const newSibling = new LeafNode(parent.view, grandParent.orientation, parent.size);
|
|
@@ -2576,6 +2641,7 @@ class Droptarget extends CompositeDisposable {
|
|
|
2576
2641
|
}
|
|
2577
2642
|
dispose() {
|
|
2578
2643
|
this.removeDropTarget();
|
|
2644
|
+
super.dispose();
|
|
2579
2645
|
}
|
|
2580
2646
|
toggleClasses(quadrant, width, height) {
|
|
2581
2647
|
var _a, _b, _c, _d;
|
|
@@ -2753,8 +2819,8 @@ class ContentContainer extends CompositeDisposable {
|
|
|
2753
2819
|
if (this.panel.view) {
|
|
2754
2820
|
const _onDidFocus = this.panel.view.content.onDidFocus;
|
|
2755
2821
|
const _onDidBlur = this.panel.view.content.onDidBlur;
|
|
2756
|
-
const
|
|
2757
|
-
disposable.addDisposables(onDidFocus(() => this._onDidFocus.fire()), onDidBlur(() => this._onDidBlur.fire()));
|
|
2822
|
+
const focusTracker = trackFocus(this._element);
|
|
2823
|
+
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
2758
2824
|
if (_onDidFocus) {
|
|
2759
2825
|
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
2760
2826
|
}
|
|
@@ -2793,24 +2859,32 @@ class DragHandler extends CompositeDisposable {
|
|
|
2793
2859
|
constructor(el) {
|
|
2794
2860
|
super();
|
|
2795
2861
|
this.el = el;
|
|
2796
|
-
this.
|
|
2862
|
+
this.dataDisposable = new MutableDisposable();
|
|
2863
|
+
this.pointerEventsDisposable = new MutableDisposable();
|
|
2797
2864
|
this._onDragStart = new Emitter();
|
|
2798
2865
|
this.onDragStart = this._onDragStart.event;
|
|
2799
|
-
this.
|
|
2866
|
+
this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
|
|
2800
2867
|
this.configure();
|
|
2801
2868
|
}
|
|
2802
2869
|
configure() {
|
|
2803
2870
|
this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
|
|
2804
|
-
|
|
2871
|
+
const iframes = [
|
|
2805
2872
|
...getElementsByTagName('iframe'),
|
|
2806
2873
|
...getElementsByTagName('webview'),
|
|
2807
2874
|
];
|
|
2808
|
-
|
|
2875
|
+
this.pointerEventsDisposable.value = {
|
|
2876
|
+
dispose: () => {
|
|
2877
|
+
for (const iframe of iframes) {
|
|
2878
|
+
iframe.style.pointerEvents = 'auto';
|
|
2879
|
+
}
|
|
2880
|
+
},
|
|
2881
|
+
};
|
|
2882
|
+
for (const iframe of iframes) {
|
|
2809
2883
|
iframe.style.pointerEvents = 'none';
|
|
2810
2884
|
}
|
|
2811
2885
|
this.el.classList.add('dv-dragged');
|
|
2812
2886
|
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
2813
|
-
this.
|
|
2887
|
+
this.dataDisposable.value = this.getData(event.dataTransfer);
|
|
2814
2888
|
if (event.dataTransfer) {
|
|
2815
2889
|
event.dataTransfer.effectAllowed = 'move';
|
|
2816
2890
|
/**
|
|
@@ -2825,11 +2899,8 @@ class DragHandler extends CompositeDisposable {
|
|
|
2825
2899
|
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
2826
2900
|
}
|
|
2827
2901
|
}), addDisposableListener(this.el, 'dragend', () => {
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
}
|
|
2831
|
-
this.iframes = [];
|
|
2832
|
-
this.disposable.dispose();
|
|
2902
|
+
this.pointerEventsDisposable.dispose();
|
|
2903
|
+
this.dataDisposable.dispose();
|
|
2833
2904
|
}));
|
|
2834
2905
|
}
|
|
2835
2906
|
}
|
|
@@ -2847,13 +2918,12 @@ class Tab extends CompositeDisposable {
|
|
|
2847
2918
|
this.onChanged = this._onChanged.event;
|
|
2848
2919
|
this._onDropped = new Emitter();
|
|
2849
2920
|
this.onDrop = this._onDropped.event;
|
|
2850
|
-
this.addDisposables(this._onChanged, this._onDropped);
|
|
2851
2921
|
this._element = document.createElement('div');
|
|
2852
2922
|
this._element.className = 'tab';
|
|
2853
2923
|
this._element.tabIndex = 0;
|
|
2854
2924
|
this._element.draggable = true;
|
|
2855
2925
|
toggleClass(this.element, 'inactive-tab', true);
|
|
2856
|
-
this.addDisposables(new (class Handler extends DragHandler {
|
|
2926
|
+
this.addDisposables(this._onChanged, this._onDropped, new (class Handler extends DragHandler {
|
|
2857
2927
|
constructor() {
|
|
2858
2928
|
super(...arguments);
|
|
2859
2929
|
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
@@ -2866,9 +2936,6 @@ class Tab extends CompositeDisposable {
|
|
|
2866
2936
|
},
|
|
2867
2937
|
};
|
|
2868
2938
|
}
|
|
2869
|
-
dispose() {
|
|
2870
|
-
//
|
|
2871
|
-
}
|
|
2872
2939
|
})(this._element));
|
|
2873
2940
|
this.addDisposables(addDisposableListener(this._element, 'mousedown', (event) => {
|
|
2874
2941
|
if (event.defaultPrevented) {
|
|
@@ -2903,7 +2970,7 @@ class Tab extends CompositeDisposable {
|
|
|
2903
2970
|
});
|
|
2904
2971
|
this.addDisposables(this.droptarget.onDrop((event) => {
|
|
2905
2972
|
this._onDropped.fire(event);
|
|
2906
|
-
}));
|
|
2973
|
+
}), this.droptarget);
|
|
2907
2974
|
}
|
|
2908
2975
|
setActive(isActive) {
|
|
2909
2976
|
toggleClass(this.element, 'active-tab', isActive);
|
|
@@ -2918,7 +2985,6 @@ class Tab extends CompositeDisposable {
|
|
|
2918
2985
|
}
|
|
2919
2986
|
dispose() {
|
|
2920
2987
|
super.dispose();
|
|
2921
|
-
this.droptarget.dispose();
|
|
2922
2988
|
}
|
|
2923
2989
|
}
|
|
2924
2990
|
|
|
@@ -2964,9 +3030,6 @@ class GroupDragHandler extends DragHandler {
|
|
|
2964
3030
|
},
|
|
2965
3031
|
};
|
|
2966
3032
|
}
|
|
2967
|
-
dispose() {
|
|
2968
|
-
//
|
|
2969
|
-
}
|
|
2970
3033
|
}
|
|
2971
3034
|
|
|
2972
3035
|
class VoidContainer extends CompositeDisposable {
|
|
@@ -3122,6 +3185,7 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3122
3185
|
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
3123
3186
|
const { value, disposable } = tabToRemove;
|
|
3124
3187
|
disposable.dispose();
|
|
3188
|
+
value.dispose();
|
|
3125
3189
|
value.element.remove();
|
|
3126
3190
|
}
|
|
3127
3191
|
setActivePanel(panel) {
|
|
@@ -3165,9 +3229,10 @@ class TabsContainer extends CompositeDisposable {
|
|
|
3165
3229
|
}
|
|
3166
3230
|
dispose() {
|
|
3167
3231
|
super.dispose();
|
|
3168
|
-
this.tabs
|
|
3169
|
-
|
|
3170
|
-
|
|
3232
|
+
for (const { value, disposable } of this.tabs) {
|
|
3233
|
+
disposable.dispose();
|
|
3234
|
+
value.dispose();
|
|
3235
|
+
}
|
|
3171
3236
|
this.tabs = [];
|
|
3172
3237
|
}
|
|
3173
3238
|
}
|
|
@@ -3265,7 +3330,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3265
3330
|
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
3266
3331
|
this.header.hidden = !!options.hideHeader;
|
|
3267
3332
|
this.locked = !!options.locked;
|
|
3268
|
-
this.addDisposables(this.
|
|
3333
|
+
this.addDisposables(this.tabsContainer.onDrop((event) => {
|
|
3269
3334
|
this.handleDropEvent(event.event, 'center', event.index);
|
|
3270
3335
|
}), this.contentContainer.onDidFocus(() => {
|
|
3271
3336
|
this.accessor.doSetGroupActive(this.groupPanel, true);
|
|
@@ -3273,7 +3338,7 @@ class DockviewGroupPanelModel extends CompositeDisposable {
|
|
|
3273
3338
|
// noop
|
|
3274
3339
|
}), this.dropTarget.onDrop((event) => {
|
|
3275
3340
|
this.handleDropEvent(event.nativeEvent, event.position);
|
|
3276
|
-
}));
|
|
3341
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
3277
3342
|
}
|
|
3278
3343
|
initialize() {
|
|
3279
3344
|
var _a, _b;
|
|
@@ -3707,8 +3772,7 @@ class BaseGrid extends Resizable {
|
|
|
3707
3772
|
this.layout(0, 0, true); // set some elements height/widths
|
|
3708
3773
|
this.addDisposables(this.gridview.onDidChange(() => {
|
|
3709
3774
|
this._bufferOnDidLayoutChange.fire();
|
|
3710
|
-
}))
|
|
3711
|
-
this.addDisposables(exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3775
|
+
}), exports.DockviewEvent.any(this.onDidAddGroup, this.onDidRemoveGroup, this.onDidActiveGroupChange)(() => {
|
|
3712
3776
|
this._bufferOnDidLayoutChange.fire();
|
|
3713
3777
|
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
3714
3778
|
this._onDidLayoutChange.fire();
|
|
@@ -3811,7 +3875,6 @@ class BaseGrid extends Resizable {
|
|
|
3811
3875
|
this.gridview.layout(width, height);
|
|
3812
3876
|
}
|
|
3813
3877
|
dispose() {
|
|
3814
|
-
super.dispose();
|
|
3815
3878
|
this._onDidActiveGroupChange.dispose();
|
|
3816
3879
|
this._onDidAddGroup.dispose();
|
|
3817
3880
|
this._onDidRemoveGroup.dispose();
|
|
@@ -3820,6 +3883,7 @@ class BaseGrid extends Resizable {
|
|
|
3820
3883
|
group.dispose();
|
|
3821
3884
|
}
|
|
3822
3885
|
this.gridview.dispose();
|
|
3886
|
+
super.dispose();
|
|
3823
3887
|
}
|
|
3824
3888
|
}
|
|
3825
3889
|
|
|
@@ -3883,7 +3947,7 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3883
3947
|
//
|
|
3884
3948
|
this._onUpdateParameters = new Emitter();
|
|
3885
3949
|
this.onUpdateParameters = this._onUpdateParameters.event;
|
|
3886
|
-
this.addDisposables(this.
|
|
3950
|
+
this.addDisposables(this.onDidFocusChange((event) => {
|
|
3887
3951
|
this._isFocused = event.isFocused;
|
|
3888
3952
|
}), this.onDidActiveChange((event) => {
|
|
3889
3953
|
this._isActive = event.isActive;
|
|
@@ -3892,14 +3956,12 @@ class PanelApiImpl extends CompositeDisposable {
|
|
|
3892
3956
|
}), this.onDidDimensionsChange((event) => {
|
|
3893
3957
|
this._width = event.width;
|
|
3894
3958
|
this._height = event.height;
|
|
3895
|
-
}));
|
|
3959
|
+
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onFocusEvent, this._onActiveChange, this._onVisibilityChange, this._onUpdateParameters);
|
|
3896
3960
|
}
|
|
3897
3961
|
initialize(panel) {
|
|
3898
3962
|
this.panelUpdatesDisposable.value = this._onUpdateParameters.event((parameters) => {
|
|
3899
3963
|
panel.update({
|
|
3900
|
-
params:
|
|
3901
|
-
params: parameters,
|
|
3902
|
-
},
|
|
3964
|
+
params: parameters,
|
|
3903
3965
|
});
|
|
3904
3966
|
});
|
|
3905
3967
|
}
|
|
@@ -3994,12 +4056,12 @@ class BasePanelView extends CompositeDisposable {
|
|
|
3994
4056
|
this._element.style.height = '100%';
|
|
3995
4057
|
this._element.style.width = '100%';
|
|
3996
4058
|
this._element.style.overflow = 'hidden';
|
|
3997
|
-
const
|
|
3998
|
-
this.addDisposables(this.api, onDidFocus(() => {
|
|
4059
|
+
const focusTracker = trackFocus(this._element);
|
|
4060
|
+
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
3999
4061
|
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
4000
|
-
}), onDidBlur(() => {
|
|
4062
|
+
}), focusTracker.onDidBlur(() => {
|
|
4001
4063
|
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
4002
|
-
}));
|
|
4064
|
+
}), focusTracker);
|
|
4003
4065
|
}
|
|
4004
4066
|
focus() {
|
|
4005
4067
|
this.api._onFocusEvent.fire();
|
|
@@ -4020,7 +4082,18 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4020
4082
|
}
|
|
4021
4083
|
update(event) {
|
|
4022
4084
|
var _a, _b;
|
|
4085
|
+
// merge the new parameters with the existing parameters
|
|
4023
4086
|
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) });
|
|
4087
|
+
/**
|
|
4088
|
+
* delete new keys that have a value of undefined,
|
|
4089
|
+
* allow values of null
|
|
4090
|
+
*/
|
|
4091
|
+
for (const key of Object.keys(event.params)) {
|
|
4092
|
+
if (event.params[key] === undefined) {
|
|
4093
|
+
delete this._params.params[key];
|
|
4094
|
+
}
|
|
4095
|
+
}
|
|
4096
|
+
// update the view with the updated props
|
|
4024
4097
|
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
4025
4098
|
}
|
|
4026
4099
|
toJSON() {
|
|
@@ -4034,9 +4107,9 @@ class BasePanelView extends CompositeDisposable {
|
|
|
4034
4107
|
}
|
|
4035
4108
|
dispose() {
|
|
4036
4109
|
var _a;
|
|
4037
|
-
super.dispose();
|
|
4038
4110
|
this.api.dispose();
|
|
4039
4111
|
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
4112
|
+
super.dispose();
|
|
4040
4113
|
}
|
|
4041
4114
|
}
|
|
4042
4115
|
|
|
@@ -4415,7 +4488,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4415
4488
|
this._maximumHeight = options.maximumHeight;
|
|
4416
4489
|
}
|
|
4417
4490
|
this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
|
|
4418
|
-
this.addDisposables(this.
|
|
4491
|
+
this.addDisposables(this.api.onVisibilityChange((event) => {
|
|
4419
4492
|
const { isVisible } = event;
|
|
4420
4493
|
const { accessor } = this._params;
|
|
4421
4494
|
accessor.setVisible(this, isVisible);
|
|
@@ -4444,7 +4517,7 @@ class GridviewPanel extends BasePanelView {
|
|
|
4444
4517
|
height: event.height,
|
|
4445
4518
|
width: event.width,
|
|
4446
4519
|
});
|
|
4447
|
-
}));
|
|
4520
|
+
}), this._onDidChange);
|
|
4448
4521
|
}
|
|
4449
4522
|
setVisible(isVisible) {
|
|
4450
4523
|
this.api._onDidVisibilityChange.fire({ isVisible });
|
|
@@ -4601,7 +4674,7 @@ class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
|
4601
4674
|
this.addDisposables(this.disposable, this._onDidTitleChange, this._onDidGroupChange, this._onDidActiveGroupChange);
|
|
4602
4675
|
}
|
|
4603
4676
|
setTitle(title) {
|
|
4604
|
-
this.panel.
|
|
4677
|
+
this.panel.setTitle(title);
|
|
4605
4678
|
}
|
|
4606
4679
|
close() {
|
|
4607
4680
|
this.group.model.closePanel(this.panel);
|
|
@@ -4666,12 +4739,18 @@ class DockviewPanel extends CompositeDisposable {
|
|
|
4666
4739
|
}
|
|
4667
4740
|
}
|
|
4668
4741
|
update(event) {
|
|
4669
|
-
|
|
4670
|
-
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4742
|
+
// merge the new parameters with the existing parameters
|
|
4743
|
+
this._params = Object.assign(Object.assign({}, (this._params || {})), event.params);
|
|
4744
|
+
/**
|
|
4745
|
+
* delete new keys that have a value of undefined,
|
|
4746
|
+
* allow values of null
|
|
4747
|
+
*/
|
|
4748
|
+
for (const key of Object.keys(event.params)) {
|
|
4749
|
+
if (event.params[key] === undefined) {
|
|
4750
|
+
delete this._params[key];
|
|
4751
|
+
}
|
|
4674
4752
|
}
|
|
4753
|
+
// update the view with the updated props
|
|
4675
4754
|
this.view.update({
|
|
4676
4755
|
params: {
|
|
4677
4756
|
params: this._params,
|
|
@@ -5047,7 +5126,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5047
5126
|
size: { type: 'pixels', value: 20 },
|
|
5048
5127
|
},
|
|
5049
5128
|
});
|
|
5050
|
-
this.addDisposables(dropTarget
|
|
5129
|
+
this.addDisposables(dropTarget.onDrop((event) => {
|
|
5051
5130
|
const data = getPanelData();
|
|
5052
5131
|
if (data) {
|
|
5053
5132
|
this.moveGroupOrPanel(this.orthogonalize(event.position), data.groupId, data.panelId || undefined, 'center');
|
|
@@ -5055,7 +5134,7 @@ class DockviewComponent extends BaseGrid {
|
|
|
5055
5134
|
else {
|
|
5056
5135
|
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api, group: null, getData: getPanelData }));
|
|
5057
5136
|
}
|
|
5058
|
-
}));
|
|
5137
|
+
}), dropTarget);
|
|
5059
5138
|
this._api = new DockviewApi(this);
|
|
5060
5139
|
this.updateWatermark();
|
|
5061
5140
|
}
|
|
@@ -5379,31 +5458,33 @@ class DockviewComponent extends BaseGrid {
|
|
|
5379
5458
|
}
|
|
5380
5459
|
super.doRemoveGroup(group, { skipActive });
|
|
5381
5460
|
}
|
|
5382
|
-
moveGroupOrPanel(
|
|
5461
|
+
moveGroupOrPanel(destinationGroup, sourceGroupId, sourceItemId, destinationTarget, destinationIndex) {
|
|
5383
5462
|
var _a;
|
|
5384
|
-
const sourceGroup =
|
|
5385
|
-
? (_a = this._groups.get(
|
|
5463
|
+
const sourceGroup = sourceGroupId
|
|
5464
|
+
? (_a = this._groups.get(sourceGroupId)) === null || _a === void 0 ? void 0 : _a.value
|
|
5386
5465
|
: undefined;
|
|
5387
|
-
if (
|
|
5466
|
+
if (sourceItemId === undefined) {
|
|
5388
5467
|
if (sourceGroup) {
|
|
5389
|
-
this.moveGroup(sourceGroup,
|
|
5468
|
+
this.moveGroup(sourceGroup, destinationGroup, destinationTarget);
|
|
5390
5469
|
}
|
|
5391
5470
|
return;
|
|
5392
5471
|
}
|
|
5393
|
-
if (!
|
|
5394
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5395
|
-
this.panels.find((panel) => panel.id ===
|
|
5472
|
+
if (!destinationTarget || destinationTarget === 'center') {
|
|
5473
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5474
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5396
5475
|
if (!groupItem) {
|
|
5397
|
-
throw new Error(`No panel with id ${
|
|
5476
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5398
5477
|
}
|
|
5399
5478
|
if ((sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.size) === 0) {
|
|
5400
5479
|
this.doRemoveGroup(sourceGroup);
|
|
5401
5480
|
}
|
|
5402
|
-
|
|
5481
|
+
destinationGroup.model.openPanel(groupItem, {
|
|
5482
|
+
index: destinationIndex,
|
|
5483
|
+
});
|
|
5403
5484
|
}
|
|
5404
5485
|
else {
|
|
5405
|
-
const referenceLocation = getGridLocation(
|
|
5406
|
-
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5486
|
+
const referenceLocation = getGridLocation(destinationGroup.element);
|
|
5487
|
+
const targetLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5407
5488
|
if (sourceGroup && sourceGroup.size < 2) {
|
|
5408
5489
|
const [targetParentLocation, to] = tail(targetLocation);
|
|
5409
5490
|
const sourceLocation = getGridLocation(sourceGroup.element);
|
|
@@ -5421,18 +5502,18 @@ class DockviewComponent extends BaseGrid {
|
|
|
5421
5502
|
skipDispose: true,
|
|
5422
5503
|
});
|
|
5423
5504
|
// after deleting the group we need to re-evaulate the ref location
|
|
5424
|
-
const updatedReferenceLocation = getGridLocation(
|
|
5425
|
-
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation,
|
|
5505
|
+
const updatedReferenceLocation = getGridLocation(destinationGroup.element);
|
|
5506
|
+
const location = getRelativeLocation(this.gridview.orientation, updatedReferenceLocation, destinationTarget);
|
|
5426
5507
|
this.doAddGroup(targetGroup, location);
|
|
5427
5508
|
}
|
|
5428
5509
|
}
|
|
5429
5510
|
else {
|
|
5430
|
-
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(
|
|
5431
|
-
this.panels.find((panel) => panel.id ===
|
|
5511
|
+
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(sourceItemId)) ||
|
|
5512
|
+
this.panels.find((panel) => panel.id === sourceItemId);
|
|
5432
5513
|
if (!groupItem) {
|
|
5433
|
-
throw new Error(`No panel with id ${
|
|
5514
|
+
throw new Error(`No panel with id ${sourceItemId}`);
|
|
5434
5515
|
}
|
|
5435
|
-
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation,
|
|
5516
|
+
const dropLocation = getRelativeLocation(this.gridview.orientation, referenceLocation, destinationTarget);
|
|
5436
5517
|
const group = this.createGroupAtLocation(dropLocation);
|
|
5437
5518
|
group.model.openPanel(groupItem);
|
|
5438
5519
|
}
|
|
@@ -5526,11 +5607,11 @@ class DockviewComponent extends BaseGrid {
|
|
|
5526
5607
|
return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
|
|
5527
5608
|
}
|
|
5528
5609
|
dispose() {
|
|
5529
|
-
super.dispose();
|
|
5530
5610
|
this._onDidActivePanelChange.dispose();
|
|
5531
5611
|
this._onDidAddPanel.dispose();
|
|
5532
5612
|
this._onDidRemovePanel.dispose();
|
|
5533
5613
|
this._onDidLayoutFromJSON.dispose();
|
|
5614
|
+
super.dispose();
|
|
5534
5615
|
}
|
|
5535
5616
|
}
|
|
5536
5617
|
|
|
@@ -5788,7 +5869,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5788
5869
|
}
|
|
5789
5870
|
set splitview(value) {
|
|
5790
5871
|
this._splitview = value;
|
|
5791
|
-
this.
|
|
5872
|
+
this._splitviewChangeDisposable.value = new CompositeDisposable(this._splitview.onDidSashEnd(() => {
|
|
5792
5873
|
this._onDidLayoutChange.fire(undefined);
|
|
5793
5874
|
}), this._splitview.onDidAddView((e) => this._onDidAddView.fire(e)), this._splitview.onDidRemoveView((e) => this._onDidRemoveView.fire(e)));
|
|
5794
5875
|
}
|
|
@@ -5810,7 +5891,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5810
5891
|
}
|
|
5811
5892
|
constructor(options) {
|
|
5812
5893
|
super(options.parentElement);
|
|
5813
|
-
this.
|
|
5894
|
+
this._splitviewChangeDisposable = new MutableDisposable();
|
|
5814
5895
|
this._panels = new Map();
|
|
5815
5896
|
this._onDidLayoutfromJSON = new Emitter();
|
|
5816
5897
|
this.onDidLayoutFromJSON = this._onDidLayoutfromJSON.event;
|
|
@@ -5828,7 +5909,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5828
5909
|
options.frameworkComponents = {};
|
|
5829
5910
|
}
|
|
5830
5911
|
this.splitview = new Splitview(this.element, options);
|
|
5831
|
-
this.addDisposables(this.
|
|
5912
|
+
this.addDisposables(this._onDidAddView, this._onDidLayoutfromJSON, this._onDidRemoveView, this._onDidLayoutChange);
|
|
5832
5913
|
}
|
|
5833
5914
|
updateOptions(options) {
|
|
5834
5915
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
@@ -5866,15 +5947,15 @@ class SplitviewComponent extends Resizable {
|
|
|
5866
5947
|
}
|
|
5867
5948
|
}
|
|
5868
5949
|
removePanel(panel, sizing) {
|
|
5869
|
-
const
|
|
5870
|
-
if (!
|
|
5950
|
+
const item = this._panels.get(panel.id);
|
|
5951
|
+
if (!item) {
|
|
5871
5952
|
throw new Error(`unknown splitview panel ${panel.id}`);
|
|
5872
5953
|
}
|
|
5873
|
-
|
|
5874
|
-
disposable.value.dispose();
|
|
5954
|
+
item.dispose();
|
|
5875
5955
|
this._panels.delete(panel.id);
|
|
5876
5956
|
const index = this.panels.findIndex((_) => _ === panel);
|
|
5877
|
-
this.splitview.removeView(index, sizing);
|
|
5957
|
+
const removedView = this.splitview.removeView(index, sizing);
|
|
5958
|
+
removedView.dispose();
|
|
5878
5959
|
const panels = this.panels;
|
|
5879
5960
|
if (panels.length > 0) {
|
|
5880
5961
|
this.setActive(panels[panels.length - 1]);
|
|
@@ -5921,7 +6002,7 @@ class SplitviewComponent extends Resizable {
|
|
|
5921
6002
|
}
|
|
5922
6003
|
this.setActive(view, true);
|
|
5923
6004
|
});
|
|
5924
|
-
this._panels.set(view.id,
|
|
6005
|
+
this._panels.set(view.id, disposable);
|
|
5925
6006
|
}
|
|
5926
6007
|
toJSON() {
|
|
5927
6008
|
var _a;
|
|
@@ -5994,20 +6075,26 @@ class SplitviewComponent extends Resizable {
|
|
|
5994
6075
|
this._onDidLayoutfromJSON.fire();
|
|
5995
6076
|
}
|
|
5996
6077
|
clear() {
|
|
5997
|
-
for (const
|
|
5998
|
-
|
|
5999
|
-
value.value.dispose();
|
|
6078
|
+
for (const disposable of this._panels.values()) {
|
|
6079
|
+
disposable.dispose();
|
|
6000
6080
|
}
|
|
6001
6081
|
this._panels.clear();
|
|
6002
|
-
this.splitview.
|
|
6082
|
+
while (this.splitview.length > 0) {
|
|
6083
|
+
const view = this.splitview.removeView(0, exports.Sizing.Distribute, true);
|
|
6084
|
+
view.dispose();
|
|
6085
|
+
}
|
|
6003
6086
|
}
|
|
6004
6087
|
dispose() {
|
|
6005
|
-
for (const
|
|
6006
|
-
|
|
6007
|
-
value.value.dispose();
|
|
6088
|
+
for (const disposable of this._panels.values()) {
|
|
6089
|
+
disposable.dispose();
|
|
6008
6090
|
}
|
|
6009
6091
|
this._panels.clear();
|
|
6092
|
+
const views = this.splitview.getViews();
|
|
6093
|
+
this._splitviewChangeDisposable.dispose();
|
|
6010
6094
|
this.splitview.dispose();
|
|
6095
|
+
for (const view of views) {
|
|
6096
|
+
view.dispose();
|
|
6097
|
+
}
|
|
6011
6098
|
super.dispose();
|
|
6012
6099
|
}
|
|
6013
6100
|
}
|