dockview-core 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/component.api.d.ts +2 -1
- package/dist/cjs/api/component.api.js +7 -0
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +5 -1
- package/dist/cjs/api/dockviewGroupPanelApi.js +19 -1
- package/dist/cjs/dnd/droptarget.d.ts +1 -1
- package/dist/cjs/dnd/droptarget.js +4 -10
- package/dist/cjs/dockview/components/panel/content.js +0 -8
- package/dist/cjs/dockview/dockviewComponent.d.ts +6 -4
- package/dist/cjs/dockview/dockviewComponent.js +71 -67
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +3 -0
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +18 -19
- package/dist/cjs/dockview/dockviewPanelModel.js +21 -24
- package/dist/cjs/dockview/framework.d.ts +38 -0
- package/dist/cjs/dockview/framework.js +2 -0
- package/dist/cjs/dockview/options.d.ts +68 -46
- package/dist/cjs/dockview/options.js +43 -1
- package/dist/cjs/dockview/types.d.ts +4 -10
- package/dist/cjs/framwork.d.ts +4 -0
- package/dist/cjs/framwork.js +2 -0
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +1 -1
- package/dist/dockview-core.amd.js +1973 -1920
- package/dist/dockview-core.amd.js.map +1 -1
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.js.map +1 -1
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
- package/dist/dockview-core.amd.noStyle.js +1973 -1920
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +1973 -1920
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +1972 -1921
- package/dist/dockview-core.esm.js.map +1 -1
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.esm.min.js.map +1 -1
- package/dist/dockview-core.js +1973 -1920
- package/dist/dockview-core.js.map +1 -1
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +1973 -1920
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +2 -1
- package/dist/esm/api/component.api.js +3 -0
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +5 -1
- package/dist/esm/api/dockviewGroupPanelApi.js +18 -1
- package/dist/esm/dnd/droptarget.d.ts +1 -1
- package/dist/esm/dnd/droptarget.js +4 -10
- package/dist/esm/dockview/components/panel/content.js +0 -8
- package/dist/esm/dockview/dockviewComponent.d.ts +6 -4
- package/dist/esm/dockview/dockviewComponent.js +70 -68
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +3 -0
- package/dist/esm/dockview/dockviewGroupPanelModel.js +18 -19
- package/dist/esm/dockview/dockviewPanelModel.js +21 -13
- package/dist/esm/dockview/framework.d.ts +38 -0
- package/dist/esm/dockview/framework.js +1 -0
- package/dist/esm/dockview/options.d.ts +68 -46
- package/dist/esm/dockview/options.js +36 -0
- package/dist/esm/dockview/types.d.ts +4 -10
- package/dist/esm/framwork.d.ts +4 -0
- package/dist/esm/framwork.js +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +1 -1
- package/package.json +2 -2
package/dist/dockview-core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* dockview-core
|
|
3
|
-
* @version 1.
|
|
3
|
+
* @version 1.13.0
|
|
4
4
|
* @link https://github.com/mathuo/dockview
|
|
5
5
|
* @license MIT
|
|
6
6
|
*/
|
|
@@ -2472,6 +2472,261 @@
|
|
|
2472
2472
|
}
|
|
2473
2473
|
}
|
|
2474
2474
|
|
|
2475
|
+
class Resizable extends CompositeDisposable {
|
|
2476
|
+
get element() {
|
|
2477
|
+
return this._element;
|
|
2478
|
+
}
|
|
2479
|
+
get disableResizing() {
|
|
2480
|
+
return this._disableResizing;
|
|
2481
|
+
}
|
|
2482
|
+
set disableResizing(value) {
|
|
2483
|
+
this._disableResizing = value;
|
|
2484
|
+
}
|
|
2485
|
+
constructor(parentElement, disableResizing = false) {
|
|
2486
|
+
super();
|
|
2487
|
+
this._disableResizing = disableResizing;
|
|
2488
|
+
this._element = parentElement;
|
|
2489
|
+
this.addDisposables(watchElementResize(this._element, (entry) => {
|
|
2490
|
+
if (this.isDisposed) {
|
|
2491
|
+
/**
|
|
2492
|
+
* resize is delayed through requestAnimationFrame so there is a small chance
|
|
2493
|
+
* the component has already been disposed of
|
|
2494
|
+
*/
|
|
2495
|
+
return;
|
|
2496
|
+
}
|
|
2497
|
+
if (this.disableResizing) {
|
|
2498
|
+
return;
|
|
2499
|
+
}
|
|
2500
|
+
if (!this._element.offsetParent) {
|
|
2501
|
+
/**
|
|
2502
|
+
* offsetParent === null is equivalent to display: none being set on the element or one
|
|
2503
|
+
* of it's parents. In the display: none case the size will become (0, 0) which we do
|
|
2504
|
+
* not want to propagate.
|
|
2505
|
+
*
|
|
2506
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent
|
|
2507
|
+
*
|
|
2508
|
+
* You could use checkVisibility() but at the time of writing it's not supported across
|
|
2509
|
+
* all Browsers
|
|
2510
|
+
*
|
|
2511
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Element/checkVisibility
|
|
2512
|
+
*/
|
|
2513
|
+
return;
|
|
2514
|
+
}
|
|
2515
|
+
if (!isInDocument(this._element)) {
|
|
2516
|
+
/**
|
|
2517
|
+
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
2518
|
+
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
2519
|
+
* are mostly likely all zero and meaningless. we should skip this case.
|
|
2520
|
+
*/
|
|
2521
|
+
return;
|
|
2522
|
+
}
|
|
2523
|
+
const { width, height } = entry.contentRect;
|
|
2524
|
+
this.layout(width, height);
|
|
2525
|
+
}));
|
|
2526
|
+
}
|
|
2527
|
+
}
|
|
2528
|
+
|
|
2529
|
+
const nextLayoutId$1 = sequentialNumberGenerator();
|
|
2530
|
+
function toTarget(direction) {
|
|
2531
|
+
switch (direction) {
|
|
2532
|
+
case 'left':
|
|
2533
|
+
return 'left';
|
|
2534
|
+
case 'right':
|
|
2535
|
+
return 'right';
|
|
2536
|
+
case 'above':
|
|
2537
|
+
return 'top';
|
|
2538
|
+
case 'below':
|
|
2539
|
+
return 'bottom';
|
|
2540
|
+
case 'within':
|
|
2541
|
+
default:
|
|
2542
|
+
return 'center';
|
|
2543
|
+
}
|
|
2544
|
+
}
|
|
2545
|
+
class BaseGrid extends Resizable {
|
|
2546
|
+
get id() {
|
|
2547
|
+
return this._id;
|
|
2548
|
+
}
|
|
2549
|
+
get size() {
|
|
2550
|
+
return this._groups.size;
|
|
2551
|
+
}
|
|
2552
|
+
get groups() {
|
|
2553
|
+
return Array.from(this._groups.values()).map((_) => _.value);
|
|
2554
|
+
}
|
|
2555
|
+
get width() {
|
|
2556
|
+
return this.gridview.width;
|
|
2557
|
+
}
|
|
2558
|
+
get height() {
|
|
2559
|
+
return this.gridview.height;
|
|
2560
|
+
}
|
|
2561
|
+
get minimumHeight() {
|
|
2562
|
+
return this.gridview.minimumHeight;
|
|
2563
|
+
}
|
|
2564
|
+
get maximumHeight() {
|
|
2565
|
+
return this.gridview.maximumHeight;
|
|
2566
|
+
}
|
|
2567
|
+
get minimumWidth() {
|
|
2568
|
+
return this.gridview.minimumWidth;
|
|
2569
|
+
}
|
|
2570
|
+
get maximumWidth() {
|
|
2571
|
+
return this.gridview.maximumWidth;
|
|
2572
|
+
}
|
|
2573
|
+
get activeGroup() {
|
|
2574
|
+
return this._activeGroup;
|
|
2575
|
+
}
|
|
2576
|
+
get locked() {
|
|
2577
|
+
return this.gridview.locked;
|
|
2578
|
+
}
|
|
2579
|
+
set locked(value) {
|
|
2580
|
+
this.gridview.locked = value;
|
|
2581
|
+
}
|
|
2582
|
+
constructor(options) {
|
|
2583
|
+
super(document.createElement('div'), options.disableAutoResizing);
|
|
2584
|
+
this._id = nextLayoutId$1.next();
|
|
2585
|
+
this._groups = new Map();
|
|
2586
|
+
this._onDidLayoutChange = new Emitter();
|
|
2587
|
+
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
2588
|
+
this._onDidRemove = new Emitter();
|
|
2589
|
+
this.onDidRemove = this._onDidRemove.event;
|
|
2590
|
+
this._onDidAdd = new Emitter();
|
|
2591
|
+
this.onDidAdd = this._onDidAdd.event;
|
|
2592
|
+
this._onDidActiveChange = new Emitter();
|
|
2593
|
+
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
2594
|
+
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
2595
|
+
this.element.style.height = '100%';
|
|
2596
|
+
this.element.style.width = '100%';
|
|
2597
|
+
options.parentElement.appendChild(this.element);
|
|
2598
|
+
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
2599
|
+
this.gridview.locked = !!options.locked;
|
|
2600
|
+
this.element.appendChild(this.gridview.element);
|
|
2601
|
+
this.layout(0, 0, true); // set some elements height/widths
|
|
2602
|
+
this.addDisposables(Disposable.from(() => {
|
|
2603
|
+
var _a;
|
|
2604
|
+
(_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
|
|
2605
|
+
}), this.gridview.onDidChange(() => {
|
|
2606
|
+
this._bufferOnDidLayoutChange.fire();
|
|
2607
|
+
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
2608
|
+
this._bufferOnDidLayoutChange.fire();
|
|
2609
|
+
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
2610
|
+
this._onDidLayoutChange.fire();
|
|
2611
|
+
}), this._bufferOnDidLayoutChange);
|
|
2612
|
+
}
|
|
2613
|
+
setVisible(panel, visible) {
|
|
2614
|
+
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
2615
|
+
this._onDidLayoutChange.fire();
|
|
2616
|
+
}
|
|
2617
|
+
isVisible(panel) {
|
|
2618
|
+
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
2619
|
+
}
|
|
2620
|
+
maximizeGroup(panel) {
|
|
2621
|
+
this.gridview.maximizeView(panel);
|
|
2622
|
+
this.doSetGroupActive(panel);
|
|
2623
|
+
}
|
|
2624
|
+
isMaximizedGroup(panel) {
|
|
2625
|
+
return this.gridview.maximizedView() === panel;
|
|
2626
|
+
}
|
|
2627
|
+
exitMaximizedGroup() {
|
|
2628
|
+
this.gridview.exitMaximizedView();
|
|
2629
|
+
}
|
|
2630
|
+
hasMaximizedGroup() {
|
|
2631
|
+
return this.gridview.hasMaximizedView();
|
|
2632
|
+
}
|
|
2633
|
+
get onDidMaximizedGroupChange() {
|
|
2634
|
+
return this.gridview.onDidMaximizedNodeChange;
|
|
2635
|
+
}
|
|
2636
|
+
doAddGroup(group, location = [0], size) {
|
|
2637
|
+
this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
|
|
2638
|
+
this._onDidAdd.fire(group);
|
|
2639
|
+
}
|
|
2640
|
+
doRemoveGroup(group, options) {
|
|
2641
|
+
if (!this._groups.has(group.id)) {
|
|
2642
|
+
throw new Error('invalid operation');
|
|
2643
|
+
}
|
|
2644
|
+
const item = this._groups.get(group.id);
|
|
2645
|
+
const view = this.gridview.remove(group, exports.Sizing.Distribute);
|
|
2646
|
+
if (item && !(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
2647
|
+
item.disposable.dispose();
|
|
2648
|
+
item.value.dispose();
|
|
2649
|
+
this._groups.delete(group.id);
|
|
2650
|
+
this._onDidRemove.fire(group);
|
|
2651
|
+
}
|
|
2652
|
+
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
2653
|
+
const groups = Array.from(this._groups.values());
|
|
2654
|
+
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
2655
|
+
}
|
|
2656
|
+
return view;
|
|
2657
|
+
}
|
|
2658
|
+
getPanel(id) {
|
|
2659
|
+
var _a;
|
|
2660
|
+
return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
2661
|
+
}
|
|
2662
|
+
doSetGroupActive(group) {
|
|
2663
|
+
if (this._activeGroup === group) {
|
|
2664
|
+
return;
|
|
2665
|
+
}
|
|
2666
|
+
if (this._activeGroup) {
|
|
2667
|
+
this._activeGroup.setActive(false);
|
|
2668
|
+
}
|
|
2669
|
+
if (group) {
|
|
2670
|
+
group.setActive(true);
|
|
2671
|
+
}
|
|
2672
|
+
this._activeGroup = group;
|
|
2673
|
+
this._onDidActiveChange.fire(group);
|
|
2674
|
+
}
|
|
2675
|
+
removeGroup(group) {
|
|
2676
|
+
this.doRemoveGroup(group);
|
|
2677
|
+
}
|
|
2678
|
+
moveToNext(options) {
|
|
2679
|
+
var _a;
|
|
2680
|
+
if (!options) {
|
|
2681
|
+
options = {};
|
|
2682
|
+
}
|
|
2683
|
+
if (!options.group) {
|
|
2684
|
+
if (!this.activeGroup) {
|
|
2685
|
+
return;
|
|
2686
|
+
}
|
|
2687
|
+
options.group = this.activeGroup;
|
|
2688
|
+
}
|
|
2689
|
+
const location = getGridLocation(options.group.element);
|
|
2690
|
+
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
2691
|
+
this.doSetGroupActive(next);
|
|
2692
|
+
}
|
|
2693
|
+
moveToPrevious(options) {
|
|
2694
|
+
var _a;
|
|
2695
|
+
if (!options) {
|
|
2696
|
+
options = {};
|
|
2697
|
+
}
|
|
2698
|
+
if (!options.group) {
|
|
2699
|
+
if (!this.activeGroup) {
|
|
2700
|
+
return;
|
|
2701
|
+
}
|
|
2702
|
+
options.group = this.activeGroup;
|
|
2703
|
+
}
|
|
2704
|
+
const location = getGridLocation(options.group.element);
|
|
2705
|
+
const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
2706
|
+
this.doSetGroupActive(next);
|
|
2707
|
+
}
|
|
2708
|
+
layout(width, height, forceResize) {
|
|
2709
|
+
const different = forceResize !== null && forceResize !== void 0 ? forceResize : (width !== this.width || height !== this.height);
|
|
2710
|
+
if (!different) {
|
|
2711
|
+
return;
|
|
2712
|
+
}
|
|
2713
|
+
this.gridview.element.style.height = `${height}px`;
|
|
2714
|
+
this.gridview.element.style.width = `${width}px`;
|
|
2715
|
+
this.gridview.layout(width, height);
|
|
2716
|
+
}
|
|
2717
|
+
dispose() {
|
|
2718
|
+
this._onDidActiveChange.dispose();
|
|
2719
|
+
this._onDidAdd.dispose();
|
|
2720
|
+
this._onDidRemove.dispose();
|
|
2721
|
+
this._onDidLayoutChange.dispose();
|
|
2722
|
+
for (const group of this.groups) {
|
|
2723
|
+
group.dispose();
|
|
2724
|
+
}
|
|
2725
|
+
this.gridview.dispose();
|
|
2726
|
+
super.dispose();
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2475
2730
|
class SplitviewApi {
|
|
2476
2731
|
/**
|
|
2477
2732
|
* The minimum size the component can reach where size is measured in the direction of orientation provided.
|
|
@@ -3014,6 +3269,9 @@
|
|
|
3014
3269
|
get onWillDragPanel() {
|
|
3015
3270
|
return this.component.onWillDragPanel;
|
|
3016
3271
|
}
|
|
3272
|
+
get onUnhandledDragOverEvent() {
|
|
3273
|
+
return this.component.onUnhandledDragOverEvent;
|
|
3274
|
+
}
|
|
3017
3275
|
/**
|
|
3018
3276
|
* All panel objects.
|
|
3019
3277
|
*/
|
|
@@ -3151,6 +3409,67 @@
|
|
|
3151
3409
|
}
|
|
3152
3410
|
}
|
|
3153
3411
|
|
|
3412
|
+
class DragHandler extends CompositeDisposable {
|
|
3413
|
+
constructor(el) {
|
|
3414
|
+
super();
|
|
3415
|
+
this.el = el;
|
|
3416
|
+
this.dataDisposable = new MutableDisposable();
|
|
3417
|
+
this.pointerEventsDisposable = new MutableDisposable();
|
|
3418
|
+
this._onDragStart = new Emitter();
|
|
3419
|
+
this.onDragStart = this._onDragStart.event;
|
|
3420
|
+
this.addDisposables(this._onDragStart, this.dataDisposable, this.pointerEventsDisposable);
|
|
3421
|
+
this.configure();
|
|
3422
|
+
}
|
|
3423
|
+
isCancelled(_event) {
|
|
3424
|
+
return false;
|
|
3425
|
+
}
|
|
3426
|
+
configure() {
|
|
3427
|
+
this.addDisposables(this._onDragStart, addDisposableListener(this.el, 'dragstart', (event) => {
|
|
3428
|
+
if (event.defaultPrevented || this.isCancelled(event)) {
|
|
3429
|
+
event.preventDefault();
|
|
3430
|
+
return;
|
|
3431
|
+
}
|
|
3432
|
+
const iframes = [
|
|
3433
|
+
...getElementsByTagName('iframe'),
|
|
3434
|
+
...getElementsByTagName('webview'),
|
|
3435
|
+
];
|
|
3436
|
+
this.pointerEventsDisposable.value = {
|
|
3437
|
+
dispose: () => {
|
|
3438
|
+
for (const iframe of iframes) {
|
|
3439
|
+
iframe.style.pointerEvents = 'auto';
|
|
3440
|
+
}
|
|
3441
|
+
},
|
|
3442
|
+
};
|
|
3443
|
+
for (const iframe of iframes) {
|
|
3444
|
+
iframe.style.pointerEvents = 'none';
|
|
3445
|
+
}
|
|
3446
|
+
this.el.classList.add('dv-dragged');
|
|
3447
|
+
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
3448
|
+
this.dataDisposable.value = this.getData(event);
|
|
3449
|
+
this._onDragStart.fire(event);
|
|
3450
|
+
if (event.dataTransfer) {
|
|
3451
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
3452
|
+
const hasData = event.dataTransfer.items.length > 0;
|
|
3453
|
+
if (!hasData) {
|
|
3454
|
+
/**
|
|
3455
|
+
* Although this is not used by dockview many third party dnd libraries will check
|
|
3456
|
+
* dataTransfer.types to determine valid drag events.
|
|
3457
|
+
*
|
|
3458
|
+
* For example: in react-dnd if dataTransfer.types is not set then the dragStart event will be cancelled
|
|
3459
|
+
* through .preventDefault(). Since this is applied globally to all drag events this would break dockviews
|
|
3460
|
+
* dnd logic. You can see the code at
|
|
3461
|
+
* https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
|
|
3462
|
+
*/
|
|
3463
|
+
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
}), addDisposableListener(this.el, 'dragend', () => {
|
|
3467
|
+
this.pointerEventsDisposable.dispose();
|
|
3468
|
+
this.dataDisposable.dispose();
|
|
3469
|
+
}));
|
|
3470
|
+
}
|
|
3471
|
+
}
|
|
3472
|
+
|
|
3154
3473
|
class DragAndDropObserver extends CompositeDisposable {
|
|
3155
3474
|
constructor(element, callbacks) {
|
|
3156
3475
|
super();
|
|
@@ -3295,6 +3614,10 @@
|
|
|
3295
3614
|
this.removeDropTarget();
|
|
3296
3615
|
return;
|
|
3297
3616
|
}
|
|
3617
|
+
if (!this.options.canDisplayOverlay(e, quadrant)) {
|
|
3618
|
+
this.removeDropTarget();
|
|
3619
|
+
return;
|
|
3620
|
+
}
|
|
3298
3621
|
const willShowOverlayEvent = new WillShowOverlayEvent({
|
|
3299
3622
|
nativeEvent: e,
|
|
3300
3623
|
position: quadrant,
|
|
@@ -3308,16 +3631,6 @@
|
|
|
3308
3631
|
this.removeDropTarget();
|
|
3309
3632
|
return;
|
|
3310
3633
|
}
|
|
3311
|
-
if (typeof this.options.canDisplayOverlay === 'boolean') {
|
|
3312
|
-
if (!this.options.canDisplayOverlay) {
|
|
3313
|
-
this.removeDropTarget();
|
|
3314
|
-
return;
|
|
3315
|
-
}
|
|
3316
|
-
}
|
|
3317
|
-
else if (!this.options.canDisplayOverlay(e, quadrant)) {
|
|
3318
|
-
this.removeDropTarget();
|
|
3319
|
-
return;
|
|
3320
|
-
}
|
|
3321
3634
|
this.markAsUsed(e);
|
|
3322
3635
|
if (!this.targetElement) {
|
|
3323
3636
|
this.targetElement = document.createElement('div');
|
|
@@ -3508,2023 +3821,1758 @@
|
|
|
3508
3821
|
return 'center';
|
|
3509
3822
|
}
|
|
3510
3823
|
|
|
3511
|
-
class
|
|
3512
|
-
|
|
3513
|
-
return this._element;
|
|
3514
|
-
}
|
|
3515
|
-
constructor(accessor, group) {
|
|
3824
|
+
class WillFocusEvent extends DockviewEvent {
|
|
3825
|
+
constructor() {
|
|
3516
3826
|
super();
|
|
3517
|
-
this.accessor = accessor;
|
|
3518
|
-
this.group = group;
|
|
3519
|
-
this.disposable = new MutableDisposable();
|
|
3520
|
-
this._onDidFocus = new Emitter();
|
|
3521
|
-
this.onDidFocus = this._onDidFocus.event;
|
|
3522
|
-
this._onDidBlur = new Emitter();
|
|
3523
|
-
this.onDidBlur = this._onDidBlur.event;
|
|
3524
|
-
this._element = document.createElement('div');
|
|
3525
|
-
this._element.className = 'content-container';
|
|
3526
|
-
this._element.tabIndex = -1;
|
|
3527
|
-
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
3528
|
-
this.dropTarget = new Droptarget(this.element, {
|
|
3529
|
-
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
3530
|
-
canDisplayOverlay: (event, position) => {
|
|
3531
|
-
if (this.group.locked === 'no-drop-target' ||
|
|
3532
|
-
(this.group.locked && position === 'center')) {
|
|
3533
|
-
return false;
|
|
3534
|
-
}
|
|
3535
|
-
const data = getPanelData();
|
|
3536
|
-
if (!data &&
|
|
3537
|
-
event.shiftKey &&
|
|
3538
|
-
this.group.location.type !== 'floating') {
|
|
3539
|
-
return false;
|
|
3540
|
-
}
|
|
3541
|
-
if (data && data.viewId === this.accessor.id) {
|
|
3542
|
-
if (data.groupId === this.group.id) {
|
|
3543
|
-
if (position === 'center') {
|
|
3544
|
-
// don't allow to drop on self for center position
|
|
3545
|
-
return false;
|
|
3546
|
-
}
|
|
3547
|
-
if (data.panelId === null) {
|
|
3548
|
-
// don't allow group move to drop anywhere on self
|
|
3549
|
-
return false;
|
|
3550
|
-
}
|
|
3551
|
-
}
|
|
3552
|
-
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
3553
|
-
data.groupId === this.group.id;
|
|
3554
|
-
return !groupHasOnePanelAndIsActiveDragElement;
|
|
3555
|
-
}
|
|
3556
|
-
return this.group.canDisplayOverlay(event, position, 'content');
|
|
3557
|
-
},
|
|
3558
|
-
});
|
|
3559
|
-
this.addDisposables(this.dropTarget);
|
|
3560
3827
|
}
|
|
3561
|
-
|
|
3562
|
-
|
|
3828
|
+
}
|
|
3829
|
+
/**
|
|
3830
|
+
* A core api implementation that should be used across all panel-like objects
|
|
3831
|
+
*/
|
|
3832
|
+
class PanelApiImpl extends CompositeDisposable {
|
|
3833
|
+
get isFocused() {
|
|
3834
|
+
return this._isFocused;
|
|
3563
3835
|
}
|
|
3564
|
-
|
|
3565
|
-
this.
|
|
3836
|
+
get isActive() {
|
|
3837
|
+
return this._isActive;
|
|
3566
3838
|
}
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
(this.panel && this.group.isPanelActive(this.panel));
|
|
3570
|
-
if (this.panel &&
|
|
3571
|
-
this.panel.view.content.element.parentElement === this._element) {
|
|
3572
|
-
/**
|
|
3573
|
-
* If the currently attached panel is mounted directly to the content then remove it
|
|
3574
|
-
*/
|
|
3575
|
-
this._element.removeChild(this.panel.view.content.element);
|
|
3576
|
-
}
|
|
3577
|
-
this.panel = panel;
|
|
3578
|
-
let container;
|
|
3579
|
-
switch (panel.api.renderer) {
|
|
3580
|
-
case 'onlyWhenVisible':
|
|
3581
|
-
this.group.renderContainer.detatch(panel);
|
|
3582
|
-
if (this.panel) {
|
|
3583
|
-
if (doRender) {
|
|
3584
|
-
this._element.appendChild(this.panel.view.content.element);
|
|
3585
|
-
}
|
|
3586
|
-
}
|
|
3587
|
-
container = this._element;
|
|
3588
|
-
break;
|
|
3589
|
-
case 'always':
|
|
3590
|
-
if (panel.view.content.element.parentElement === this._element) {
|
|
3591
|
-
this._element.removeChild(panel.view.content.element);
|
|
3592
|
-
}
|
|
3593
|
-
container = this.group.renderContainer.attach({
|
|
3594
|
-
panel,
|
|
3595
|
-
referenceContainer: this,
|
|
3596
|
-
});
|
|
3597
|
-
break;
|
|
3598
|
-
}
|
|
3599
|
-
if (doRender) {
|
|
3600
|
-
const _onDidFocus = panel.view.content.onDidFocus;
|
|
3601
|
-
const _onDidBlur = panel.view.content.onDidBlur;
|
|
3602
|
-
const focusTracker = trackFocus(container);
|
|
3603
|
-
const disposable = new CompositeDisposable();
|
|
3604
|
-
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
3605
|
-
if (_onDidFocus) {
|
|
3606
|
-
disposable.addDisposables(_onDidFocus(() => this._onDidFocus.fire()));
|
|
3607
|
-
}
|
|
3608
|
-
if (_onDidBlur) {
|
|
3609
|
-
disposable.addDisposables(_onDidBlur(() => this._onDidBlur.fire()));
|
|
3610
|
-
}
|
|
3611
|
-
this.disposable.value = disposable;
|
|
3612
|
-
}
|
|
3839
|
+
get isVisible() {
|
|
3840
|
+
return this._isVisible;
|
|
3613
3841
|
}
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
return;
|
|
3617
|
-
}
|
|
3618
|
-
this.renderPanel(panel);
|
|
3842
|
+
get width() {
|
|
3843
|
+
return this._width;
|
|
3619
3844
|
}
|
|
3620
|
-
|
|
3621
|
-
|
|
3845
|
+
get height() {
|
|
3846
|
+
return this._height;
|
|
3622
3847
|
}
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3626
|
-
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
this.
|
|
3848
|
+
constructor(id, component) {
|
|
3849
|
+
super();
|
|
3850
|
+
this.id = id;
|
|
3851
|
+
this.component = component;
|
|
3852
|
+
this._isFocused = false;
|
|
3853
|
+
this._isActive = false;
|
|
3854
|
+
this._isVisible = true;
|
|
3855
|
+
this._width = 0;
|
|
3856
|
+
this._height = 0;
|
|
3857
|
+
this._parameters = {};
|
|
3858
|
+
this.panelUpdatesDisposable = new MutableDisposable();
|
|
3859
|
+
this._onDidDimensionChange = new Emitter();
|
|
3860
|
+
this.onDidDimensionsChange = this._onDidDimensionChange.event;
|
|
3861
|
+
this._onDidChangeFocus = new Emitter();
|
|
3862
|
+
this.onDidFocusChange = this._onDidChangeFocus.event;
|
|
3863
|
+
//
|
|
3864
|
+
this._onWillFocus = new Emitter();
|
|
3865
|
+
this.onWillFocus = this._onWillFocus.event;
|
|
3866
|
+
//
|
|
3867
|
+
this._onDidVisibilityChange = new Emitter();
|
|
3868
|
+
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
3869
|
+
this._onWillVisibilityChange = new Emitter();
|
|
3870
|
+
this.onWillVisibilityChange = this._onWillVisibilityChange.event;
|
|
3871
|
+
this._onDidActiveChange = new Emitter();
|
|
3872
|
+
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
3873
|
+
this._onActiveChange = new Emitter();
|
|
3874
|
+
this.onActiveChange = this._onActiveChange.event;
|
|
3875
|
+
this._onDidParametersChange = new Emitter();
|
|
3876
|
+
this.onDidParametersChange = this._onDidParametersChange.event;
|
|
3877
|
+
this.addDisposables(this.onDidFocusChange((event) => {
|
|
3878
|
+
this._isFocused = event.isFocused;
|
|
3879
|
+
}), this.onDidActiveChange((event) => {
|
|
3880
|
+
this._isActive = event.isActive;
|
|
3881
|
+
}), this.onDidVisibilityChange((event) => {
|
|
3882
|
+
this._isVisible = event.isVisible;
|
|
3883
|
+
}), this.onDidDimensionsChange((event) => {
|
|
3884
|
+
this._width = event.width;
|
|
3885
|
+
this._height = event.height;
|
|
3886
|
+
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onWillFocus, this._onWillVisibilityChange, this._onDidParametersChange);
|
|
3631
3887
|
}
|
|
3632
|
-
|
|
3633
|
-
this.
|
|
3634
|
-
|
|
3888
|
+
getParameters() {
|
|
3889
|
+
return this._parameters;
|
|
3890
|
+
}
|
|
3891
|
+
initialize(panel) {
|
|
3892
|
+
this.panelUpdatesDisposable.value = this._onDidParametersChange.event((parameters) => {
|
|
3893
|
+
this._parameters = parameters;
|
|
3894
|
+
panel.update({
|
|
3895
|
+
params: parameters,
|
|
3896
|
+
});
|
|
3897
|
+
});
|
|
3898
|
+
}
|
|
3899
|
+
setVisible(isVisible) {
|
|
3900
|
+
this._onWillVisibilityChange.fire({ isVisible });
|
|
3901
|
+
}
|
|
3902
|
+
setActive() {
|
|
3903
|
+
this._onActiveChange.fire();
|
|
3904
|
+
}
|
|
3905
|
+
updateParameters(parameters) {
|
|
3906
|
+
this._onDidParametersChange.fire(parameters);
|
|
3635
3907
|
}
|
|
3636
3908
|
}
|
|
3637
3909
|
|
|
3638
|
-
class
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
this.
|
|
3643
|
-
this.
|
|
3644
|
-
|
|
3645
|
-
this.
|
|
3646
|
-
|
|
3647
|
-
|
|
3910
|
+
class SplitviewPanelApiImpl extends PanelApiImpl {
|
|
3911
|
+
//
|
|
3912
|
+
constructor(id, component) {
|
|
3913
|
+
super(id, component);
|
|
3914
|
+
this._onDidConstraintsChangeInternal = new Emitter();
|
|
3915
|
+
this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
|
|
3916
|
+
//
|
|
3917
|
+
this._onDidConstraintsChange = new Emitter({
|
|
3918
|
+
replay: true,
|
|
3919
|
+
});
|
|
3920
|
+
this.onDidConstraintsChange = this._onDidConstraintsChange.event;
|
|
3921
|
+
//
|
|
3922
|
+
this._onDidSizeChange = new Emitter();
|
|
3923
|
+
this.onDidSizeChange = this._onDidSizeChange.event;
|
|
3924
|
+
this.addDisposables(this._onDidConstraintsChangeInternal, this._onDidConstraintsChange, this._onDidSizeChange);
|
|
3648
3925
|
}
|
|
3649
|
-
|
|
3650
|
-
|
|
3926
|
+
setConstraints(value) {
|
|
3927
|
+
this._onDidConstraintsChangeInternal.fire(value);
|
|
3651
3928
|
}
|
|
3652
|
-
|
|
3653
|
-
this.
|
|
3654
|
-
if (event.defaultPrevented || this.isCancelled(event)) {
|
|
3655
|
-
event.preventDefault();
|
|
3656
|
-
return;
|
|
3657
|
-
}
|
|
3658
|
-
const iframes = [
|
|
3659
|
-
...getElementsByTagName('iframe'),
|
|
3660
|
-
...getElementsByTagName('webview'),
|
|
3661
|
-
];
|
|
3662
|
-
this.pointerEventsDisposable.value = {
|
|
3663
|
-
dispose: () => {
|
|
3664
|
-
for (const iframe of iframes) {
|
|
3665
|
-
iframe.style.pointerEvents = 'auto';
|
|
3666
|
-
}
|
|
3667
|
-
},
|
|
3668
|
-
};
|
|
3669
|
-
for (const iframe of iframes) {
|
|
3670
|
-
iframe.style.pointerEvents = 'none';
|
|
3671
|
-
}
|
|
3672
|
-
this.el.classList.add('dv-dragged');
|
|
3673
|
-
setTimeout(() => this.el.classList.remove('dv-dragged'), 0);
|
|
3674
|
-
this.dataDisposable.value = this.getData(event);
|
|
3675
|
-
this._onDragStart.fire(event);
|
|
3676
|
-
if (event.dataTransfer) {
|
|
3677
|
-
event.dataTransfer.effectAllowed = 'move';
|
|
3678
|
-
const hasData = event.dataTransfer.items.length > 0;
|
|
3679
|
-
if (!hasData) {
|
|
3680
|
-
/**
|
|
3681
|
-
* Although this is not used by dockview many third party dnd libraries will check
|
|
3682
|
-
* dataTransfer.types to determine valid drag events.
|
|
3683
|
-
*
|
|
3684
|
-
* For example: in react-dnd if dataTransfer.types is not set then the dragStart event will be cancelled
|
|
3685
|
-
* through .preventDefault(). Since this is applied globally to all drag events this would break dockviews
|
|
3686
|
-
* dnd logic. You can see the code at
|
|
3687
|
-
* https://github.com/react-dnd/react-dnd/blob/main/packages/backend-html5/src/HTML5BackendImpl.ts#L542
|
|
3688
|
-
*/
|
|
3689
|
-
event.dataTransfer.setData('text/plain', '__dockview_internal_drag_event__');
|
|
3690
|
-
}
|
|
3691
|
-
}
|
|
3692
|
-
}), addDisposableListener(this.el, 'dragend', () => {
|
|
3693
|
-
this.pointerEventsDisposable.dispose();
|
|
3694
|
-
this.dataDisposable.dispose();
|
|
3695
|
-
}));
|
|
3929
|
+
setSize(event) {
|
|
3930
|
+
this._onDidSizeChange.fire(event);
|
|
3696
3931
|
}
|
|
3697
3932
|
}
|
|
3698
3933
|
|
|
3699
|
-
class
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
this.accessor = accessor;
|
|
3703
|
-
this.group = group;
|
|
3704
|
-
this.panel = panel;
|
|
3705
|
-
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
3934
|
+
class PaneviewPanelApiImpl extends SplitviewPanelApiImpl {
|
|
3935
|
+
set pane(pane) {
|
|
3936
|
+
this._pane = pane;
|
|
3706
3937
|
}
|
|
3707
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
3710
|
-
|
|
3711
|
-
|
|
3712
|
-
|
|
3713
|
-
};
|
|
3938
|
+
constructor(id, component) {
|
|
3939
|
+
super(id, component);
|
|
3940
|
+
this._onDidExpansionChange = new Emitter({
|
|
3941
|
+
replay: true,
|
|
3942
|
+
});
|
|
3943
|
+
this.onDidExpansionChange = this._onDidExpansionChange.event;
|
|
3944
|
+
this._onMouseEnter = new Emitter({});
|
|
3945
|
+
this.onMouseEnter = this._onMouseEnter.event;
|
|
3946
|
+
this._onMouseLeave = new Emitter({});
|
|
3947
|
+
this.onMouseLeave = this._onMouseLeave.event;
|
|
3948
|
+
this.addDisposables(this._onDidExpansionChange, this._onMouseEnter, this._onMouseLeave);
|
|
3949
|
+
}
|
|
3950
|
+
setExpanded(isExpanded) {
|
|
3951
|
+
var _a;
|
|
3952
|
+
(_a = this._pane) === null || _a === void 0 ? void 0 : _a.setExpanded(isExpanded);
|
|
3953
|
+
}
|
|
3954
|
+
get isExpanded() {
|
|
3955
|
+
var _a;
|
|
3956
|
+
return !!((_a = this._pane) === null || _a === void 0 ? void 0 : _a.isExpanded());
|
|
3714
3957
|
}
|
|
3715
3958
|
}
|
|
3716
|
-
|
|
3959
|
+
|
|
3960
|
+
class BasePanelView extends CompositeDisposable {
|
|
3717
3961
|
get element() {
|
|
3718
3962
|
return this._element;
|
|
3719
3963
|
}
|
|
3720
|
-
|
|
3964
|
+
get width() {
|
|
3965
|
+
return this._width;
|
|
3966
|
+
}
|
|
3967
|
+
get height() {
|
|
3968
|
+
return this._height;
|
|
3969
|
+
}
|
|
3970
|
+
get params() {
|
|
3971
|
+
var _a;
|
|
3972
|
+
return (_a = this._params) === null || _a === void 0 ? void 0 : _a.params;
|
|
3973
|
+
}
|
|
3974
|
+
constructor(id, component, api) {
|
|
3721
3975
|
super();
|
|
3722
|
-
this.
|
|
3723
|
-
this.
|
|
3724
|
-
this.
|
|
3725
|
-
this.
|
|
3726
|
-
this.
|
|
3727
|
-
this.onChanged = this._onChanged.event;
|
|
3728
|
-
this._onDropped = new Emitter();
|
|
3729
|
-
this.onDrop = this._onDropped.event;
|
|
3730
|
-
this._onDragStart = new Emitter();
|
|
3731
|
-
this.onDragStart = this._onDragStart.event;
|
|
3976
|
+
this.id = id;
|
|
3977
|
+
this.component = component;
|
|
3978
|
+
this.api = api;
|
|
3979
|
+
this._height = 0;
|
|
3980
|
+
this._width = 0;
|
|
3732
3981
|
this._element = document.createElement('div');
|
|
3733
|
-
this._element.
|
|
3734
|
-
this._element.
|
|
3735
|
-
this._element.
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
this.
|
|
3757
|
-
|
|
3758
|
-
this.
|
|
3759
|
-
|
|
3760
|
-
if (event.defaultPrevented) {
|
|
3761
|
-
return;
|
|
3982
|
+
this._element.tabIndex = -1;
|
|
3983
|
+
this._element.style.outline = 'none';
|
|
3984
|
+
this._element.style.height = '100%';
|
|
3985
|
+
this._element.style.width = '100%';
|
|
3986
|
+
this._element.style.overflow = 'hidden';
|
|
3987
|
+
const focusTracker = trackFocus(this._element);
|
|
3988
|
+
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
3989
|
+
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
3990
|
+
}), focusTracker.onDidBlur(() => {
|
|
3991
|
+
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
3992
|
+
}), focusTracker);
|
|
3993
|
+
}
|
|
3994
|
+
focus() {
|
|
3995
|
+
const event = new WillFocusEvent();
|
|
3996
|
+
this.api._onWillFocus.fire(event);
|
|
3997
|
+
if (event.defaultPrevented) {
|
|
3998
|
+
return;
|
|
3999
|
+
}
|
|
4000
|
+
this._element.focus();
|
|
4001
|
+
}
|
|
4002
|
+
layout(width, height) {
|
|
4003
|
+
this._width = width;
|
|
4004
|
+
this._height = height;
|
|
4005
|
+
this.api._onDidDimensionChange.fire({ width, height });
|
|
4006
|
+
if (this.part) {
|
|
4007
|
+
if (this._params) {
|
|
4008
|
+
this.part.update(this._params.params);
|
|
3762
4009
|
}
|
|
3763
|
-
|
|
3764
|
-
}), this.dropTarget.onDrop((event) => {
|
|
3765
|
-
this._onDropped.fire(event);
|
|
3766
|
-
}), this.dropTarget);
|
|
4010
|
+
}
|
|
3767
4011
|
}
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
4012
|
+
init(parameters) {
|
|
4013
|
+
this._params = parameters;
|
|
4014
|
+
this.part = this.getComponent();
|
|
3771
4015
|
}
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
4016
|
+
update(event) {
|
|
4017
|
+
var _a, _b;
|
|
4018
|
+
// merge the new parameters with the existing parameters
|
|
4019
|
+
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) });
|
|
4020
|
+
/**
|
|
4021
|
+
* delete new keys that have a value of undefined,
|
|
4022
|
+
* allow values of null
|
|
4023
|
+
*/
|
|
4024
|
+
for (const key of Object.keys(event.params)) {
|
|
4025
|
+
if (event.params[key] === undefined) {
|
|
4026
|
+
delete this._params.params[key];
|
|
4027
|
+
}
|
|
3775
4028
|
}
|
|
3776
|
-
|
|
3777
|
-
this.
|
|
4029
|
+
// update the view with the updated props
|
|
4030
|
+
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
4031
|
+
}
|
|
4032
|
+
toJSON() {
|
|
4033
|
+
var _a, _b;
|
|
4034
|
+
const params = (_b = (_a = this._params) === null || _a === void 0 ? void 0 : _a.params) !== null && _b !== void 0 ? _b : {};
|
|
4035
|
+
return {
|
|
4036
|
+
id: this.id,
|
|
4037
|
+
component: this.component,
|
|
4038
|
+
params: Object.keys(params).length > 0 ? params : undefined,
|
|
4039
|
+
};
|
|
3778
4040
|
}
|
|
3779
4041
|
dispose() {
|
|
4042
|
+
var _a;
|
|
4043
|
+
this.api.dispose();
|
|
4044
|
+
(_a = this.part) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
3780
4045
|
super.dispose();
|
|
3781
4046
|
}
|
|
3782
4047
|
}
|
|
3783
4048
|
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
document.body.appendChild(ghostElement);
|
|
3788
|
-
dataTransfer.setDragImage(ghostElement, 0, 0);
|
|
3789
|
-
setTimeout(() => {
|
|
3790
|
-
removeClasses(ghostElement, 'dv-dragged');
|
|
3791
|
-
ghostElement.remove();
|
|
3792
|
-
}, 0);
|
|
3793
|
-
}
|
|
3794
|
-
|
|
3795
|
-
class GroupDragHandler extends DragHandler {
|
|
3796
|
-
constructor(element, accessor, group) {
|
|
3797
|
-
super(element);
|
|
3798
|
-
this.accessor = accessor;
|
|
3799
|
-
this.group = group;
|
|
3800
|
-
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
3801
|
-
this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
|
|
3802
|
-
if (e.shiftKey) {
|
|
3803
|
-
/**
|
|
3804
|
-
* You cannot call e.preventDefault() because that will prevent drag events from firing
|
|
3805
|
-
* but we also need to stop any group overlay drag events from occuring
|
|
3806
|
-
* Use a custom event marker that can be checked by the overlay drag events
|
|
3807
|
-
*/
|
|
3808
|
-
quasiPreventDefault(e);
|
|
3809
|
-
}
|
|
3810
|
-
}, true));
|
|
4049
|
+
class PaneviewPanel extends BasePanelView {
|
|
4050
|
+
set orientation(value) {
|
|
4051
|
+
this._orientation = value;
|
|
3811
4052
|
}
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
return true;
|
|
3815
|
-
}
|
|
3816
|
-
return false;
|
|
4053
|
+
get orientation() {
|
|
4054
|
+
return this._orientation;
|
|
3817
4055
|
}
|
|
3818
|
-
|
|
3819
|
-
const
|
|
3820
|
-
|
|
3821
|
-
const
|
|
3822
|
-
|
|
3823
|
-
const color = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-color');
|
|
3824
|
-
if (dataTransfer) {
|
|
3825
|
-
const ghostElement = document.createElement('div');
|
|
3826
|
-
ghostElement.style.backgroundColor = bgColor;
|
|
3827
|
-
ghostElement.style.color = color;
|
|
3828
|
-
ghostElement.style.padding = '2px 8px';
|
|
3829
|
-
ghostElement.style.height = '24px';
|
|
3830
|
-
ghostElement.style.fontSize = '11px';
|
|
3831
|
-
ghostElement.style.lineHeight = '20px';
|
|
3832
|
-
ghostElement.style.borderRadius = '12px';
|
|
3833
|
-
ghostElement.style.position = 'absolute';
|
|
3834
|
-
ghostElement.textContent = `Multiple Panels (${this.group.size})`;
|
|
3835
|
-
addGhostImage(dataTransfer, ghostElement);
|
|
3836
|
-
}
|
|
3837
|
-
return {
|
|
3838
|
-
dispose: () => {
|
|
3839
|
-
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
3840
|
-
},
|
|
3841
|
-
};
|
|
4056
|
+
get minimumSize() {
|
|
4057
|
+
const headerSize = this.headerSize;
|
|
4058
|
+
const expanded = this.isExpanded();
|
|
4059
|
+
const minimumBodySize = expanded ? this._minimumBodySize : 0;
|
|
4060
|
+
return headerSize + minimumBodySize;
|
|
3842
4061
|
}
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
return
|
|
4062
|
+
get maximumSize() {
|
|
4063
|
+
const headerSize = this.headerSize;
|
|
4064
|
+
const expanded = this.isExpanded();
|
|
4065
|
+
const maximumBodySize = expanded ? this._maximumBodySize : 0;
|
|
4066
|
+
return headerSize + maximumBodySize;
|
|
3848
4067
|
}
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
this.accessor = accessor;
|
|
3852
|
-
this.group = group;
|
|
3853
|
-
this._onDrop = new Emitter();
|
|
3854
|
-
this.onDrop = this._onDrop.event;
|
|
3855
|
-
this._onDragStart = new Emitter();
|
|
3856
|
-
this.onDragStart = this._onDragStart.event;
|
|
3857
|
-
this._element = document.createElement('div');
|
|
3858
|
-
this._element.className = 'void-container';
|
|
3859
|
-
this._element.tabIndex = 0;
|
|
3860
|
-
this._element.draggable = true;
|
|
3861
|
-
this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
|
|
3862
|
-
this.accessor.doSetGroupActive(this.group);
|
|
3863
|
-
}));
|
|
3864
|
-
const handler = new GroupDragHandler(this._element, accessor, group);
|
|
3865
|
-
this.dropTraget = new Droptarget(this._element, {
|
|
3866
|
-
acceptedTargetZones: ['center'],
|
|
3867
|
-
canDisplayOverlay: (event, position) => {
|
|
3868
|
-
var _a;
|
|
3869
|
-
const data = getPanelData();
|
|
3870
|
-
if (data && this.accessor.id === data.viewId) {
|
|
3871
|
-
if (data.panelId === null &&
|
|
3872
|
-
data.groupId === this.group.id) {
|
|
3873
|
-
// don't allow group move to drop on self
|
|
3874
|
-
return false;
|
|
3875
|
-
}
|
|
3876
|
-
// don't show the overlay if the tab being dragged is the last panel of this group
|
|
3877
|
-
return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
|
|
3878
|
-
}
|
|
3879
|
-
return group.model.canDisplayOverlay(event, position, 'header_space');
|
|
3880
|
-
},
|
|
3881
|
-
});
|
|
3882
|
-
this.onWillShowOverlay = this.dropTraget.onWillShowOverlay;
|
|
3883
|
-
this.addDisposables(handler, handler.onDragStart((event) => {
|
|
3884
|
-
this._onDragStart.fire(event);
|
|
3885
|
-
}), this.dropTraget.onDrop((event) => {
|
|
3886
|
-
this._onDrop.fire(event);
|
|
3887
|
-
}), this.dropTraget);
|
|
4068
|
+
get size() {
|
|
4069
|
+
return this._size;
|
|
3888
4070
|
}
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
class TabsContainer extends CompositeDisposable {
|
|
3892
|
-
get panels() {
|
|
3893
|
-
return this.tabs.map((_) => _.value.panel.id);
|
|
4071
|
+
get orthogonalSize() {
|
|
4072
|
+
return this._orthogonalSize;
|
|
3894
4073
|
}
|
|
3895
|
-
|
|
3896
|
-
|
|
4074
|
+
set orthogonalSize(size) {
|
|
4075
|
+
this._orthogonalSize = size;
|
|
3897
4076
|
}
|
|
3898
|
-
get
|
|
3899
|
-
return this.
|
|
4077
|
+
get minimumBodySize() {
|
|
4078
|
+
return this._minimumBodySize;
|
|
3900
4079
|
}
|
|
3901
|
-
set
|
|
3902
|
-
this.
|
|
3903
|
-
this.element.style.display = value ? 'none' : '';
|
|
4080
|
+
set minimumBodySize(value) {
|
|
4081
|
+
this._minimumBodySize = typeof value === 'number' ? value : 0;
|
|
3904
4082
|
}
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
this.element.style.display = '';
|
|
3908
|
-
}
|
|
4083
|
+
get maximumBodySize() {
|
|
4084
|
+
return this._maximumBodySize;
|
|
3909
4085
|
}
|
|
3910
|
-
|
|
3911
|
-
this.
|
|
4086
|
+
set maximumBodySize(value) {
|
|
4087
|
+
this._maximumBodySize =
|
|
4088
|
+
typeof value === 'number' ? value : Number.POSITIVE_INFINITY;
|
|
3912
4089
|
}
|
|
3913
|
-
|
|
3914
|
-
|
|
4090
|
+
get headerVisible() {
|
|
4091
|
+
return this._headerVisible;
|
|
4092
|
+
}
|
|
4093
|
+
set headerVisible(value) {
|
|
4094
|
+
this._headerVisible = value;
|
|
4095
|
+
this.header.style.display = value ? '' : 'none';
|
|
4096
|
+
}
|
|
4097
|
+
constructor(id, component, headerComponent, orientation, isExpanded, isHeaderVisible) {
|
|
4098
|
+
super(id, component, new PaneviewPanelApiImpl(id, component));
|
|
4099
|
+
this.headerComponent = headerComponent;
|
|
4100
|
+
this._onDidChangeExpansionState = new Emitter({ replay: true });
|
|
4101
|
+
this.onDidChangeExpansionState = this._onDidChangeExpansionState.event;
|
|
4102
|
+
this._onDidChange = new Emitter();
|
|
4103
|
+
this.onDidChange = this._onDidChange.event;
|
|
4104
|
+
this.headerSize = 22;
|
|
4105
|
+
this._orthogonalSize = 0;
|
|
4106
|
+
this._size = 0;
|
|
4107
|
+
this._minimumBodySize = 100;
|
|
4108
|
+
this._maximumBodySize = Number.POSITIVE_INFINITY;
|
|
4109
|
+
this._isExpanded = false;
|
|
4110
|
+
this.expandedSize = 0;
|
|
4111
|
+
this.api.pane = this; // TODO cannot use 'this' before 'super'
|
|
4112
|
+
this.api.initialize(this);
|
|
4113
|
+
this._isExpanded = isExpanded;
|
|
4114
|
+
this._headerVisible = isHeaderVisible;
|
|
4115
|
+
this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
|
|
4116
|
+
this._orientation = orientation;
|
|
4117
|
+
this.element.classList.add('pane');
|
|
4118
|
+
this.addDisposables(this.api.onWillVisibilityChange((event) => {
|
|
4119
|
+
const { isVisible } = event;
|
|
4120
|
+
const { accessor } = this._params;
|
|
4121
|
+
accessor.setVisible(this, isVisible);
|
|
4122
|
+
}), this.api.onDidSizeChange((event) => {
|
|
4123
|
+
this._onDidChange.fire({ size: event.size });
|
|
4124
|
+
}), addDisposableListener(this.element, 'mouseenter', (ev) => {
|
|
4125
|
+
this.api._onMouseEnter.fire(ev);
|
|
4126
|
+
}), addDisposableListener(this.element, 'mouseleave', (ev) => {
|
|
4127
|
+
this.api._onMouseLeave.fire(ev);
|
|
4128
|
+
}));
|
|
4129
|
+
this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
|
|
4130
|
+
this.api._onDidExpansionChange.fire({
|
|
4131
|
+
isExpanded: isPanelExpanded,
|
|
4132
|
+
});
|
|
4133
|
+
}), this.api.onDidFocusChange((e) => {
|
|
4134
|
+
if (!this.header) {
|
|
4135
|
+
return;
|
|
4136
|
+
}
|
|
4137
|
+
if (e.isFocused) {
|
|
4138
|
+
addClasses(this.header, 'focused');
|
|
4139
|
+
}
|
|
4140
|
+
else {
|
|
4141
|
+
removeClasses(this.header, 'focused');
|
|
4142
|
+
}
|
|
4143
|
+
}));
|
|
4144
|
+
this.renderOnce();
|
|
4145
|
+
}
|
|
4146
|
+
setVisible(isVisible) {
|
|
4147
|
+
this.api._onDidVisibilityChange.fire({ isVisible });
|
|
4148
|
+
}
|
|
4149
|
+
setActive(isActive) {
|
|
4150
|
+
this.api._onDidActiveChange.fire({ isActive });
|
|
4151
|
+
}
|
|
4152
|
+
isExpanded() {
|
|
4153
|
+
return this._isExpanded;
|
|
4154
|
+
}
|
|
4155
|
+
setExpanded(expanded) {
|
|
4156
|
+
if (this._isExpanded === expanded) {
|
|
3915
4157
|
return;
|
|
3916
4158
|
}
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
this.
|
|
4159
|
+
this._isExpanded = expanded;
|
|
4160
|
+
if (expanded) {
|
|
4161
|
+
if (this.animationTimer) {
|
|
4162
|
+
clearTimeout(this.animationTimer);
|
|
4163
|
+
}
|
|
4164
|
+
if (this.body) {
|
|
4165
|
+
this.element.appendChild(this.body);
|
|
4166
|
+
}
|
|
3920
4167
|
}
|
|
3921
|
-
|
|
3922
|
-
this.
|
|
3923
|
-
|
|
4168
|
+
else {
|
|
4169
|
+
this.animationTimer = setTimeout(() => {
|
|
4170
|
+
var _a;
|
|
4171
|
+
(_a = this.body) === null || _a === void 0 ? void 0 : _a.remove();
|
|
4172
|
+
}, 200);
|
|
3924
4173
|
}
|
|
4174
|
+
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
4175
|
+
this._onDidChangeExpansionState.fire(expanded);
|
|
3925
4176
|
}
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
if (element) {
|
|
3935
|
-
this.leftActionsContainer.appendChild(element);
|
|
3936
|
-
this.leftActions = element;
|
|
4177
|
+
layout(size, orthogonalSize) {
|
|
4178
|
+
this._size = size;
|
|
4179
|
+
this._orthogonalSize = orthogonalSize;
|
|
4180
|
+
const [width, height] = this.orientation === exports.Orientation.HORIZONTAL
|
|
4181
|
+
? [size, orthogonalSize]
|
|
4182
|
+
: [orthogonalSize, size];
|
|
4183
|
+
if (this.isExpanded()) {
|
|
4184
|
+
this.expandedSize = width;
|
|
3937
4185
|
}
|
|
4186
|
+
super.layout(width, height);
|
|
3938
4187
|
}
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
4188
|
+
init(parameters) {
|
|
4189
|
+
var _a, _b;
|
|
4190
|
+
super.init(parameters);
|
|
4191
|
+
if (typeof parameters.minimumBodySize === 'number') {
|
|
4192
|
+
this.minimumBodySize = parameters.minimumBodySize;
|
|
3942
4193
|
}
|
|
3943
|
-
if (
|
|
3944
|
-
this.
|
|
3945
|
-
this.preActions = undefined;
|
|
4194
|
+
if (typeof parameters.maximumBodySize === 'number') {
|
|
4195
|
+
this.maximumBodySize = parameters.maximumBodySize;
|
|
3946
4196
|
}
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
4197
|
+
this.bodyPart = this.getBodyComponent();
|
|
4198
|
+
this.headerPart = this.getHeaderComponent();
|
|
4199
|
+
this.bodyPart.init(Object.assign(Object.assign({}, parameters), { api: this.api }));
|
|
4200
|
+
this.headerPart.init(Object.assign(Object.assign({}, parameters), { api: this.api }));
|
|
4201
|
+
(_a = this.body) === null || _a === void 0 ? void 0 : _a.append(this.bodyPart.element);
|
|
4202
|
+
(_b = this.header) === null || _b === void 0 ? void 0 : _b.append(this.headerPart.element);
|
|
4203
|
+
if (typeof parameters.isExpanded === 'boolean') {
|
|
4204
|
+
this.setExpanded(parameters.isExpanded);
|
|
3950
4205
|
}
|
|
3951
4206
|
}
|
|
3952
|
-
|
|
3953
|
-
|
|
4207
|
+
toJSON() {
|
|
4208
|
+
const params = this._params;
|
|
4209
|
+
return Object.assign(Object.assign({}, super.toJSON()), { headerComponent: this.headerComponent, title: params.title });
|
|
3954
4210
|
}
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
4211
|
+
renderOnce() {
|
|
4212
|
+
this.header = document.createElement('div');
|
|
4213
|
+
this.header.tabIndex = 0;
|
|
4214
|
+
this.header.className = 'pane-header';
|
|
4215
|
+
this.header.style.height = `${this.headerSize}px`;
|
|
4216
|
+
this.header.style.lineHeight = `${this.headerSize}px`;
|
|
4217
|
+
this.header.style.minHeight = `${this.headerSize}px`;
|
|
4218
|
+
this.header.style.maxHeight = `${this.headerSize}px`;
|
|
4219
|
+
this.element.appendChild(this.header);
|
|
4220
|
+
this.body = document.createElement('div');
|
|
4221
|
+
this.body.className = 'pane-body';
|
|
4222
|
+
this.element.appendChild(this.body);
|
|
3958
4223
|
}
|
|
3959
|
-
|
|
3960
|
-
|
|
4224
|
+
// TODO slightly hacky by-pass of the component to create a body and header component
|
|
4225
|
+
getComponent() {
|
|
4226
|
+
return {
|
|
4227
|
+
update: (params) => {
|
|
4228
|
+
var _a, _b;
|
|
4229
|
+
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.update({ params });
|
|
4230
|
+
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.update({ params });
|
|
4231
|
+
},
|
|
4232
|
+
dispose: () => {
|
|
4233
|
+
var _a, _b;
|
|
4234
|
+
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
4235
|
+
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
4236
|
+
},
|
|
4237
|
+
};
|
|
3961
4238
|
}
|
|
3962
|
-
|
|
3963
|
-
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
class DraggablePaneviewPanel extends PaneviewPanel {
|
|
4242
|
+
constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
|
|
4243
|
+
super(id, component, headerComponent, orientation, isExpanded, true);
|
|
3964
4244
|
this.accessor = accessor;
|
|
3965
|
-
this.
|
|
3966
|
-
this.
|
|
3967
|
-
|
|
3968
|
-
|
|
3969
|
-
this._onDrop = new Emitter();
|
|
3970
|
-
this.onDrop = this._onDrop.event;
|
|
3971
|
-
this._onTabDragStart = new Emitter();
|
|
3972
|
-
this.onTabDragStart = this._onTabDragStart.event;
|
|
3973
|
-
this._onGroupDragStart = new Emitter();
|
|
3974
|
-
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
3975
|
-
this._onWillShowOverlay = new Emitter();
|
|
3976
|
-
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
3977
|
-
this._element = document.createElement('div');
|
|
3978
|
-
this._element.className = 'tabs-and-actions-container';
|
|
3979
|
-
toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
|
|
3980
|
-
this.rightActionsContainer = document.createElement('div');
|
|
3981
|
-
this.rightActionsContainer.className = 'right-actions-container';
|
|
3982
|
-
this.leftActionsContainer = document.createElement('div');
|
|
3983
|
-
this.leftActionsContainer.className = 'left-actions-container';
|
|
3984
|
-
this.preActionsContainer = document.createElement('div');
|
|
3985
|
-
this.preActionsContainer.className = 'pre-actions-container';
|
|
3986
|
-
this.tabContainer = document.createElement('div');
|
|
3987
|
-
this.tabContainer.className = 'tabs-container';
|
|
3988
|
-
this.voidContainer = new VoidContainer(this.accessor, this.group);
|
|
3989
|
-
this._element.appendChild(this.preActionsContainer);
|
|
3990
|
-
this._element.appendChild(this.tabContainer);
|
|
3991
|
-
this._element.appendChild(this.leftActionsContainer);
|
|
3992
|
-
this._element.appendChild(this.voidContainer.element);
|
|
3993
|
-
this._element.appendChild(this.rightActionsContainer);
|
|
3994
|
-
this.addDisposables(this.accessor.onDidAddPanel((e) => {
|
|
3995
|
-
if (e.api.group === this.group) {
|
|
3996
|
-
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
3997
|
-
}
|
|
3998
|
-
}), this.accessor.onDidRemovePanel((e) => {
|
|
3999
|
-
if (e.api.group === this.group) {
|
|
4000
|
-
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4001
|
-
}
|
|
4002
|
-
}), this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._onGroupDragStart, this.voidContainer, this.voidContainer.onDragStart((event) => {
|
|
4003
|
-
this._onGroupDragStart.fire({
|
|
4004
|
-
nativeEvent: event,
|
|
4005
|
-
group: this.group,
|
|
4006
|
-
});
|
|
4007
|
-
}), this.voidContainer.onDrop((event) => {
|
|
4008
|
-
this._onDrop.fire({
|
|
4009
|
-
event: event.nativeEvent,
|
|
4010
|
-
index: this.tabs.length,
|
|
4011
|
-
});
|
|
4012
|
-
}), this.voidContainer.onWillShowOverlay((event) => {
|
|
4013
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4014
|
-
kind: 'header_space',
|
|
4015
|
-
panel: this.group.activePanel,
|
|
4016
|
-
api: this.accessor.api,
|
|
4017
|
-
group: this.group,
|
|
4018
|
-
getData: getPanelData,
|
|
4019
|
-
}));
|
|
4020
|
-
}), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
|
|
4021
|
-
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4022
|
-
if (isFloatingGroupsEnabled &&
|
|
4023
|
-
event.shiftKey &&
|
|
4024
|
-
this.group.api.location.type !== 'floating') {
|
|
4025
|
-
event.preventDefault();
|
|
4026
|
-
const { top, left } = this.element.getBoundingClientRect();
|
|
4027
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4028
|
-
this.accessor.addFloatingGroup(this.group, {
|
|
4029
|
-
x: left - rootLeft + 20,
|
|
4030
|
-
y: top - rootTop + 20,
|
|
4031
|
-
}, { inDragMode: true });
|
|
4032
|
-
}
|
|
4033
|
-
}), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
|
|
4034
|
-
if (event.defaultPrevented) {
|
|
4035
|
-
return;
|
|
4036
|
-
}
|
|
4037
|
-
const isLeftClick = event.button === 0;
|
|
4038
|
-
if (isLeftClick) {
|
|
4039
|
-
this.accessor.doSetGroupActive(this.group);
|
|
4040
|
-
}
|
|
4041
|
-
}));
|
|
4042
|
-
}
|
|
4043
|
-
setActive(_isGroupActive) {
|
|
4044
|
-
// noop
|
|
4045
|
-
}
|
|
4046
|
-
addTab(tab, index = this.tabs.length) {
|
|
4047
|
-
if (index < 0 || index > this.tabs.length) {
|
|
4048
|
-
throw new Error('invalid location');
|
|
4049
|
-
}
|
|
4050
|
-
this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
|
|
4051
|
-
this.tabs = [
|
|
4052
|
-
...this.tabs.slice(0, index),
|
|
4053
|
-
tab,
|
|
4054
|
-
...this.tabs.slice(index),
|
|
4055
|
-
];
|
|
4056
|
-
if (this.selectedIndex < 0) {
|
|
4057
|
-
this.selectedIndex = index;
|
|
4245
|
+
this._onDidDrop = new Emitter();
|
|
4246
|
+
this.onDidDrop = this._onDidDrop.event;
|
|
4247
|
+
if (!disableDnd) {
|
|
4248
|
+
this.initDragFeatures();
|
|
4058
4249
|
}
|
|
4059
4250
|
}
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4251
|
+
initDragFeatures() {
|
|
4252
|
+
if (!this.header) {
|
|
4253
|
+
return;
|
|
4254
|
+
}
|
|
4255
|
+
const id = this.id;
|
|
4256
|
+
const accessorId = this.accessor.id;
|
|
4257
|
+
this.header.draggable = true;
|
|
4258
|
+
this.handler = new (class PaneDragHandler extends DragHandler {
|
|
4259
|
+
getData() {
|
|
4260
|
+
LocalSelectionTransfer.getInstance().setData([new PaneTransfer(accessorId, id)], PaneTransfer.prototype);
|
|
4261
|
+
return {
|
|
4262
|
+
dispose: () => {
|
|
4263
|
+
LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
|
|
4264
|
+
},
|
|
4265
|
+
};
|
|
4266
|
+
}
|
|
4267
|
+
})(this.header);
|
|
4268
|
+
this.target = new Droptarget(this.element, {
|
|
4269
|
+
acceptedTargetZones: ['top', 'bottom'],
|
|
4270
|
+
overlayModel: {
|
|
4271
|
+
activationSize: { type: 'percentage', value: 50 },
|
|
4272
|
+
},
|
|
4273
|
+
canDisplayOverlay: (event) => {
|
|
4274
|
+
const data = getPaneData();
|
|
4275
|
+
if (data) {
|
|
4276
|
+
if (data.paneId !== this.id &&
|
|
4277
|
+
data.viewId === this.accessor.id) {
|
|
4278
|
+
return true;
|
|
4279
|
+
}
|
|
4280
|
+
}
|
|
4281
|
+
if (this.accessor.options.showDndOverlay) {
|
|
4282
|
+
return this.accessor.options.showDndOverlay({
|
|
4283
|
+
nativeEvent: event,
|
|
4284
|
+
getData: getPaneData,
|
|
4285
|
+
panel: this,
|
|
4286
|
+
});
|
|
4287
|
+
}
|
|
4288
|
+
return false;
|
|
4289
|
+
},
|
|
4072
4290
|
});
|
|
4291
|
+
this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
|
|
4292
|
+
this.onDrop(event);
|
|
4293
|
+
}));
|
|
4073
4294
|
}
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
if (
|
|
4295
|
+
onDrop(event) {
|
|
4296
|
+
const data = getPaneData();
|
|
4297
|
+
if (!data || data.viewId !== this.accessor.id) {
|
|
4298
|
+
// if there is no local drag event for this panel
|
|
4299
|
+
// or if the drag event was creating by another Paneview instance
|
|
4300
|
+
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, api: new PaneviewApi(this.accessor), getData: getPaneData }));
|
|
4077
4301
|
return;
|
|
4078
4302
|
}
|
|
4079
|
-
const
|
|
4080
|
-
|
|
4081
|
-
|
|
4303
|
+
const containerApi = this._params
|
|
4304
|
+
.containerApi;
|
|
4305
|
+
const panelId = data.paneId;
|
|
4306
|
+
const existingPanel = containerApi.getPanel(panelId);
|
|
4307
|
+
if (!existingPanel) {
|
|
4308
|
+
// if the panel doesn't exist
|
|
4309
|
+
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, getData: getPaneData, api: new PaneviewApi(this.accessor) }));
|
|
4310
|
+
return;
|
|
4082
4311
|
}
|
|
4083
|
-
|
|
4084
|
-
const
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
if (
|
|
4091
|
-
|
|
4092
|
-
event.shiftKey) {
|
|
4093
|
-
event.preventDefault();
|
|
4094
|
-
const panel = this.accessor.getGroupPanel(tab.panel.id);
|
|
4095
|
-
const { top, left } = tab.element.getBoundingClientRect();
|
|
4096
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4097
|
-
this.accessor.addFloatingGroup(panel, {
|
|
4098
|
-
x: left - rootLeft,
|
|
4099
|
-
y: top - rootTop,
|
|
4100
|
-
}, { inDragMode: true });
|
|
4101
|
-
return;
|
|
4102
|
-
}
|
|
4103
|
-
const isLeftClick = event.button === 0;
|
|
4104
|
-
if (!isLeftClick || event.defaultPrevented) {
|
|
4105
|
-
return;
|
|
4312
|
+
const allPanels = containerApi.panels;
|
|
4313
|
+
const fromIndex = allPanels.indexOf(existingPanel);
|
|
4314
|
+
let toIndex = containerApi.panels.indexOf(this);
|
|
4315
|
+
if (event.position === 'left' || event.position === 'top') {
|
|
4316
|
+
toIndex = Math.max(0, toIndex - 1);
|
|
4317
|
+
}
|
|
4318
|
+
if (event.position === 'right' || event.position === 'bottom') {
|
|
4319
|
+
if (fromIndex > toIndex) {
|
|
4320
|
+
toIndex++;
|
|
4106
4321
|
}
|
|
4107
|
-
|
|
4108
|
-
this.group.model.openPanel(panel);
|
|
4109
|
-
}
|
|
4110
|
-
}), tab.onDrop((event) => {
|
|
4111
|
-
this._onDrop.fire({
|
|
4112
|
-
event: event.nativeEvent,
|
|
4113
|
-
index: this.tabs.findIndex((x) => x.value === tab),
|
|
4114
|
-
});
|
|
4115
|
-
}), tab.onWillShowOverlay((event) => {
|
|
4116
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4117
|
-
kind: 'tab',
|
|
4118
|
-
panel: this.group.activePanel,
|
|
4119
|
-
api: this.accessor.api,
|
|
4120
|
-
group: this.group,
|
|
4121
|
-
getData: getPanelData,
|
|
4122
|
-
}));
|
|
4123
|
-
}));
|
|
4124
|
-
const value = { value: tab, disposable };
|
|
4125
|
-
this.addTab(value, index);
|
|
4126
|
-
}
|
|
4127
|
-
closePanel(panel) {
|
|
4128
|
-
this.delete(panel.id);
|
|
4129
|
-
}
|
|
4130
|
-
dispose() {
|
|
4131
|
-
super.dispose();
|
|
4132
|
-
for (const { value, disposable } of this.tabs) {
|
|
4133
|
-
disposable.dispose();
|
|
4134
|
-
value.dispose();
|
|
4322
|
+
toIndex = Math.min(allPanels.length - 1, toIndex);
|
|
4135
4323
|
}
|
|
4136
|
-
|
|
4324
|
+
containerApi.movePanel(fromIndex, toIndex);
|
|
4137
4325
|
}
|
|
4138
4326
|
}
|
|
4139
4327
|
|
|
4140
|
-
class
|
|
4141
|
-
get
|
|
4142
|
-
return this.
|
|
4328
|
+
class ContentContainer extends CompositeDisposable {
|
|
4329
|
+
get element() {
|
|
4330
|
+
return this._element;
|
|
4143
4331
|
}
|
|
4144
|
-
|
|
4145
|
-
|
|
4332
|
+
constructor(accessor, group) {
|
|
4333
|
+
super();
|
|
4334
|
+
this.accessor = accessor;
|
|
4335
|
+
this.group = group;
|
|
4336
|
+
this.disposable = new MutableDisposable();
|
|
4337
|
+
this._onDidFocus = new Emitter();
|
|
4338
|
+
this.onDidFocus = this._onDidFocus.event;
|
|
4339
|
+
this._onDidBlur = new Emitter();
|
|
4340
|
+
this.onDidBlur = this._onDidBlur.event;
|
|
4341
|
+
this._element = document.createElement('div');
|
|
4342
|
+
this._element.className = 'content-container';
|
|
4343
|
+
this._element.tabIndex = -1;
|
|
4344
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
4345
|
+
this.dropTarget = new Droptarget(this.element, {
|
|
4346
|
+
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
4347
|
+
canDisplayOverlay: (event, position) => {
|
|
4348
|
+
if (this.group.locked === 'no-drop-target' ||
|
|
4349
|
+
(this.group.locked && position === 'center')) {
|
|
4350
|
+
return false;
|
|
4351
|
+
}
|
|
4352
|
+
const data = getPanelData();
|
|
4353
|
+
if (!data &&
|
|
4354
|
+
event.shiftKey &&
|
|
4355
|
+
this.group.location.type !== 'floating') {
|
|
4356
|
+
return false;
|
|
4357
|
+
}
|
|
4358
|
+
if (data && data.viewId === this.accessor.id) {
|
|
4359
|
+
if (data.groupId === this.group.id) {
|
|
4360
|
+
if (position === 'center') {
|
|
4361
|
+
// don't allow to drop on self for center position
|
|
4362
|
+
return false;
|
|
4363
|
+
}
|
|
4364
|
+
if (data.panelId === null) {
|
|
4365
|
+
// don't allow group move to drop anywhere on self
|
|
4366
|
+
return false;
|
|
4367
|
+
}
|
|
4368
|
+
}
|
|
4369
|
+
const groupHasOnePanelAndIsActiveDragElement = this.group.panels.length === 1 &&
|
|
4370
|
+
data.groupId === this.group.id;
|
|
4371
|
+
return !groupHasOnePanelAndIsActiveDragElement;
|
|
4372
|
+
}
|
|
4373
|
+
return this.group.canDisplayOverlay(event, position, 'content');
|
|
4374
|
+
},
|
|
4375
|
+
});
|
|
4376
|
+
this.addDisposables(this.dropTarget);
|
|
4146
4377
|
}
|
|
4147
|
-
|
|
4148
|
-
|
|
4378
|
+
show() {
|
|
4379
|
+
this.element.style.display = '';
|
|
4149
4380
|
}
|
|
4150
|
-
|
|
4151
|
-
|
|
4381
|
+
hide() {
|
|
4382
|
+
this.element.style.display = 'none';
|
|
4152
4383
|
}
|
|
4153
|
-
|
|
4154
|
-
|
|
4384
|
+
renderPanel(panel, options = { asActive: true }) {
|
|
4385
|
+
const doRender = options.asActive ||
|
|
4386
|
+
(this.panel && this.group.isPanelActive(this.panel));
|
|
4387
|
+
if (this.panel &&
|
|
4388
|
+
this.panel.view.content.element.parentElement === this._element) {
|
|
4389
|
+
/**
|
|
4390
|
+
* If the currently attached panel is mounted directly to the content then remove it
|
|
4391
|
+
*/
|
|
4392
|
+
this._element.removeChild(this.panel.view.content.element);
|
|
4393
|
+
}
|
|
4394
|
+
this.panel = panel;
|
|
4395
|
+
let container;
|
|
4396
|
+
switch (panel.api.renderer) {
|
|
4397
|
+
case 'onlyWhenVisible':
|
|
4398
|
+
this.group.renderContainer.detatch(panel);
|
|
4399
|
+
if (this.panel) {
|
|
4400
|
+
if (doRender) {
|
|
4401
|
+
this._element.appendChild(this.panel.view.content.element);
|
|
4402
|
+
}
|
|
4403
|
+
}
|
|
4404
|
+
container = this._element;
|
|
4405
|
+
break;
|
|
4406
|
+
case 'always':
|
|
4407
|
+
if (panel.view.content.element.parentElement === this._element) {
|
|
4408
|
+
this._element.removeChild(panel.view.content.element);
|
|
4409
|
+
}
|
|
4410
|
+
container = this.group.renderContainer.attach({
|
|
4411
|
+
panel,
|
|
4412
|
+
referenceContainer: this,
|
|
4413
|
+
});
|
|
4414
|
+
break;
|
|
4415
|
+
}
|
|
4416
|
+
if (doRender) {
|
|
4417
|
+
const focusTracker = trackFocus(container);
|
|
4418
|
+
const disposable = new CompositeDisposable();
|
|
4419
|
+
disposable.addDisposables(focusTracker, focusTracker.onDidFocus(() => this._onDidFocus.fire()), focusTracker.onDidBlur(() => this._onDidBlur.fire()));
|
|
4420
|
+
this.disposable.value = disposable;
|
|
4421
|
+
}
|
|
4155
4422
|
}
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
|
|
4423
|
+
openPanel(panel) {
|
|
4424
|
+
if (this.panel === panel) {
|
|
4425
|
+
return;
|
|
4426
|
+
}
|
|
4427
|
+
this.renderPanel(panel);
|
|
4159
4428
|
}
|
|
4160
|
-
|
|
4161
|
-
|
|
4429
|
+
layout(_width, _height) {
|
|
4430
|
+
// noop
|
|
4162
4431
|
}
|
|
4163
|
-
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
|
|
4432
|
+
closePanel() {
|
|
4433
|
+
var _a;
|
|
4434
|
+
if (this.panel) {
|
|
4435
|
+
if (this.panel.api.renderer === 'onlyWhenVisible') {
|
|
4436
|
+
(_a = this.panel.view.content.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.panel.view.content.element);
|
|
4437
|
+
}
|
|
4438
|
+
}
|
|
4439
|
+
this.panel = undefined;
|
|
4167
4440
|
}
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4441
|
+
dispose() {
|
|
4442
|
+
this.disposable.dispose();
|
|
4443
|
+
super.dispose();
|
|
4171
4444
|
}
|
|
4172
4445
|
}
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4446
|
+
|
|
4447
|
+
class TabDragHandler extends DragHandler {
|
|
4448
|
+
constructor(element, accessor, group, panel) {
|
|
4449
|
+
super(element);
|
|
4450
|
+
this.accessor = accessor;
|
|
4451
|
+
this.group = group;
|
|
4452
|
+
this.panel = panel;
|
|
4453
|
+
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
4179
4454
|
}
|
|
4180
|
-
|
|
4181
|
-
|
|
4455
|
+
getData(event) {
|
|
4456
|
+
this.panelTransfer.setData([new PanelTransfer(this.accessor.id, this.group.id, this.panel.id)], PanelTransfer.prototype);
|
|
4457
|
+
return {
|
|
4458
|
+
dispose: () => {
|
|
4459
|
+
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
4460
|
+
},
|
|
4461
|
+
};
|
|
4182
4462
|
}
|
|
4183
|
-
|
|
4184
|
-
|
|
4463
|
+
}
|
|
4464
|
+
class Tab extends CompositeDisposable {
|
|
4465
|
+
get element() {
|
|
4466
|
+
return this._element;
|
|
4185
4467
|
}
|
|
4186
|
-
|
|
4187
|
-
|
|
4468
|
+
constructor(panel, accessor, group) {
|
|
4469
|
+
super();
|
|
4470
|
+
this.panel = panel;
|
|
4471
|
+
this.accessor = accessor;
|
|
4472
|
+
this.group = group;
|
|
4473
|
+
this.content = undefined;
|
|
4474
|
+
this._onChanged = new Emitter();
|
|
4475
|
+
this.onChanged = this._onChanged.event;
|
|
4476
|
+
this._onDropped = new Emitter();
|
|
4477
|
+
this.onDrop = this._onDropped.event;
|
|
4478
|
+
this._onDragStart = new Emitter();
|
|
4479
|
+
this.onDragStart = this._onDragStart.event;
|
|
4480
|
+
this._element = document.createElement('div');
|
|
4481
|
+
this._element.className = 'tab';
|
|
4482
|
+
this._element.tabIndex = 0;
|
|
4483
|
+
this._element.draggable = true;
|
|
4484
|
+
toggleClass(this.element, 'inactive-tab', true);
|
|
4485
|
+
const dragHandler = new TabDragHandler(this._element, this.accessor, this.group, this.panel);
|
|
4486
|
+
this.dropTarget = new Droptarget(this._element, {
|
|
4487
|
+
acceptedTargetZones: ['center'],
|
|
4488
|
+
canDisplayOverlay: (event, position) => {
|
|
4489
|
+
if (this.group.locked) {
|
|
4490
|
+
return false;
|
|
4491
|
+
}
|
|
4492
|
+
const data = getPanelData();
|
|
4493
|
+
if (data && this.accessor.id === data.viewId) {
|
|
4494
|
+
if (data.panelId === null &&
|
|
4495
|
+
data.groupId === this.group.id) {
|
|
4496
|
+
// don't allow group move to drop on self
|
|
4497
|
+
return false;
|
|
4498
|
+
}
|
|
4499
|
+
return this.panel.id !== data.panelId;
|
|
4500
|
+
}
|
|
4501
|
+
return this.group.model.canDisplayOverlay(event, position, 'tab');
|
|
4502
|
+
},
|
|
4503
|
+
});
|
|
4504
|
+
this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;
|
|
4505
|
+
this.addDisposables(this._onChanged, this._onDropped, this._onDragStart, dragHandler.onDragStart((event) => {
|
|
4506
|
+
this._onDragStart.fire(event);
|
|
4507
|
+
}), dragHandler, addDisposableListener(this._element, 'mousedown', (event) => {
|
|
4508
|
+
if (event.defaultPrevented) {
|
|
4509
|
+
return;
|
|
4510
|
+
}
|
|
4511
|
+
this._onChanged.fire(event);
|
|
4512
|
+
}), this.dropTarget.onDrop((event) => {
|
|
4513
|
+
this._onDropped.fire(event);
|
|
4514
|
+
}), this.dropTarget);
|
|
4188
4515
|
}
|
|
4189
|
-
|
|
4190
|
-
|
|
4516
|
+
setActive(isActive) {
|
|
4517
|
+
toggleClass(this.element, 'active-tab', isActive);
|
|
4518
|
+
toggleClass(this.element, 'inactive-tab', !isActive);
|
|
4191
4519
|
}
|
|
4192
|
-
|
|
4193
|
-
|
|
4520
|
+
setContent(part) {
|
|
4521
|
+
if (this.content) {
|
|
4522
|
+
this._element.removeChild(this.content.element);
|
|
4523
|
+
}
|
|
4524
|
+
this.content = part;
|
|
4525
|
+
this._element.appendChild(this.content.element);
|
|
4194
4526
|
}
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
}
|
|
4198
|
-
getData() {
|
|
4199
|
-
return this.options.getData();
|
|
4200
|
-
}
|
|
4201
|
-
constructor(event, options) {
|
|
4202
|
-
this.event = event;
|
|
4203
|
-
this.options = options;
|
|
4527
|
+
dispose() {
|
|
4528
|
+
super.dispose();
|
|
4204
4529
|
}
|
|
4205
4530
|
}
|
|
4206
|
-
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
}
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
}
|
|
4235
|
-
get header() {
|
|
4236
|
-
return this.tabsContainer;
|
|
4531
|
+
|
|
4532
|
+
function addGhostImage(dataTransfer, ghostElement) {
|
|
4533
|
+
// class dockview provides to force ghost image to be drawn on a different layer and prevent weird rendering issues
|
|
4534
|
+
addClasses(ghostElement, 'dv-dragged');
|
|
4535
|
+
document.body.appendChild(ghostElement);
|
|
4536
|
+
dataTransfer.setDragImage(ghostElement, 0, 0);
|
|
4537
|
+
setTimeout(() => {
|
|
4538
|
+
removeClasses(ghostElement, 'dv-dragged');
|
|
4539
|
+
ghostElement.remove();
|
|
4540
|
+
}, 0);
|
|
4541
|
+
}
|
|
4542
|
+
|
|
4543
|
+
class GroupDragHandler extends DragHandler {
|
|
4544
|
+
constructor(element, accessor, group) {
|
|
4545
|
+
super(element);
|
|
4546
|
+
this.accessor = accessor;
|
|
4547
|
+
this.group = group;
|
|
4548
|
+
this.panelTransfer = LocalSelectionTransfer.getInstance();
|
|
4549
|
+
this.addDisposables(addDisposableListener(element, 'mousedown', (e) => {
|
|
4550
|
+
if (e.shiftKey) {
|
|
4551
|
+
/**
|
|
4552
|
+
* You cannot call e.preventDefault() because that will prevent drag events from firing
|
|
4553
|
+
* but we also need to stop any group overlay drag events from occuring
|
|
4554
|
+
* Use a custom event marker that can be checked by the overlay drag events
|
|
4555
|
+
*/
|
|
4556
|
+
quasiPreventDefault(e);
|
|
4557
|
+
}
|
|
4558
|
+
}, true));
|
|
4237
4559
|
}
|
|
4238
|
-
|
|
4239
|
-
if (!
|
|
4240
|
-
return
|
|
4560
|
+
isCancelled(_event) {
|
|
4561
|
+
if (this.group.api.location.type === 'floating' && !_event.shiftKey) {
|
|
4562
|
+
return true;
|
|
4241
4563
|
}
|
|
4242
|
-
return
|
|
4243
|
-
}
|
|
4244
|
-
get location() {
|
|
4245
|
-
return this._location;
|
|
4564
|
+
return false;
|
|
4246
4565
|
}
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4254
|
-
|
|
4255
|
-
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
4266
|
-
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
4267
|
-
break;
|
|
4268
|
-
case 'popout':
|
|
4269
|
-
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4270
|
-
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
4271
|
-
break;
|
|
4566
|
+
getData(dragEvent) {
|
|
4567
|
+
const dataTransfer = dragEvent.dataTransfer;
|
|
4568
|
+
this.panelTransfer.setData([new PanelTransfer(this.accessor.id, this.group.id, null)], PanelTransfer.prototype);
|
|
4569
|
+
const style = window.getComputedStyle(this.el);
|
|
4570
|
+
const bgColor = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-background-color');
|
|
4571
|
+
const color = style.getPropertyValue('--dv-activegroup-visiblepanel-tab-color');
|
|
4572
|
+
if (dataTransfer) {
|
|
4573
|
+
const ghostElement = document.createElement('div');
|
|
4574
|
+
ghostElement.style.backgroundColor = bgColor;
|
|
4575
|
+
ghostElement.style.color = color;
|
|
4576
|
+
ghostElement.style.padding = '2px 8px';
|
|
4577
|
+
ghostElement.style.height = '24px';
|
|
4578
|
+
ghostElement.style.fontSize = '11px';
|
|
4579
|
+
ghostElement.style.lineHeight = '20px';
|
|
4580
|
+
ghostElement.style.borderRadius = '12px';
|
|
4581
|
+
ghostElement.style.position = 'absolute';
|
|
4582
|
+
ghostElement.textContent = `Multiple Panels (${this.group.size})`;
|
|
4583
|
+
addGhostImage(dataTransfer, ghostElement);
|
|
4272
4584
|
}
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4585
|
+
return {
|
|
4586
|
+
dispose: () => {
|
|
4587
|
+
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
4588
|
+
},
|
|
4589
|
+
};
|
|
4276
4590
|
}
|
|
4277
|
-
|
|
4278
|
-
|
|
4591
|
+
}
|
|
4592
|
+
|
|
4593
|
+
class VoidContainer extends CompositeDisposable {
|
|
4594
|
+
get element() {
|
|
4595
|
+
return this._element;
|
|
4596
|
+
}
|
|
4597
|
+
constructor(accessor, group) {
|
|
4279
4598
|
super();
|
|
4280
|
-
this.container = container;
|
|
4281
4599
|
this.accessor = accessor;
|
|
4282
|
-
this.
|
|
4283
|
-
this.
|
|
4284
|
-
this.
|
|
4285
|
-
this.
|
|
4286
|
-
this.
|
|
4287
|
-
this.
|
|
4288
|
-
this.
|
|
4289
|
-
this.
|
|
4290
|
-
this.
|
|
4291
|
-
this.
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
this.
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
this._onDidPanelParametersChange = new Emitter();
|
|
4312
|
-
this.onDidPanelParametersChange = this._onDidPanelParametersChange.event;
|
|
4313
|
-
this._onDidRemovePanel = new Emitter();
|
|
4314
|
-
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
4315
|
-
this._onDidActivePanelChange = new Emitter();
|
|
4316
|
-
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
4317
|
-
this._overwriteRenderContainer = null;
|
|
4318
|
-
toggleClass(this.container, 'groupview', true);
|
|
4319
|
-
this._api = new DockviewApi(this.accessor);
|
|
4320
|
-
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
4321
|
-
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
4322
|
-
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
4323
|
-
this.header.hidden = !!options.hideHeader;
|
|
4324
|
-
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
4325
|
-
this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
4326
|
-
this._onTabDragStart.fire(event);
|
|
4327
|
-
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
4328
|
-
this._onGroupDragStart.fire(event);
|
|
4329
|
-
}), this.tabsContainer.onDrop((event) => {
|
|
4330
|
-
this.handleDropEvent('header', event.event, 'center', event.index);
|
|
4331
|
-
}), this.contentContainer.onDidFocus(() => {
|
|
4332
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4333
|
-
}), this.contentContainer.onDidBlur(() => {
|
|
4334
|
-
// noop
|
|
4335
|
-
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
4336
|
-
this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
4337
|
-
}), this.tabsContainer.onWillShowOverlay((event) => {
|
|
4338
|
-
this._onWillShowOverlay.fire(event);
|
|
4339
|
-
}), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
|
|
4340
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4341
|
-
kind: 'content',
|
|
4342
|
-
panel: this.activePanel,
|
|
4343
|
-
api: this._api,
|
|
4344
|
-
group: this.groupPanel,
|
|
4345
|
-
getData: getPanelData,
|
|
4346
|
-
}));
|
|
4347
|
-
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
4348
|
-
}
|
|
4349
|
-
focusContent() {
|
|
4350
|
-
this.contentContainer.element.focus();
|
|
4351
|
-
}
|
|
4352
|
-
set renderContainer(value) {
|
|
4353
|
-
this.panels.forEach((panel) => {
|
|
4354
|
-
this.renderContainer.detatch(panel);
|
|
4355
|
-
});
|
|
4356
|
-
this._overwriteRenderContainer = value;
|
|
4357
|
-
this.panels.forEach((panel) => {
|
|
4358
|
-
this.rerender(panel);
|
|
4600
|
+
this.group = group;
|
|
4601
|
+
this._onDrop = new Emitter();
|
|
4602
|
+
this.onDrop = this._onDrop.event;
|
|
4603
|
+
this._onDragStart = new Emitter();
|
|
4604
|
+
this.onDragStart = this._onDragStart.event;
|
|
4605
|
+
this._element = document.createElement('div');
|
|
4606
|
+
this._element.className = 'void-container';
|
|
4607
|
+
this._element.tabIndex = 0;
|
|
4608
|
+
this._element.draggable = true;
|
|
4609
|
+
this.addDisposables(this._onDrop, this._onDragStart, addDisposableListener(this._element, 'click', () => {
|
|
4610
|
+
this.accessor.doSetGroupActive(this.group);
|
|
4611
|
+
}));
|
|
4612
|
+
const handler = new GroupDragHandler(this._element, accessor, group);
|
|
4613
|
+
this.dropTraget = new Droptarget(this._element, {
|
|
4614
|
+
acceptedTargetZones: ['center'],
|
|
4615
|
+
canDisplayOverlay: (event, position) => {
|
|
4616
|
+
var _a;
|
|
4617
|
+
const data = getPanelData();
|
|
4618
|
+
if (data && this.accessor.id === data.viewId) {
|
|
4619
|
+
if (data.panelId === null &&
|
|
4620
|
+
data.groupId === this.group.id) {
|
|
4621
|
+
// don't allow group move to drop on self
|
|
4622
|
+
return false;
|
|
4623
|
+
}
|
|
4624
|
+
// don't show the overlay if the tab being dragged is the last panel of this group
|
|
4625
|
+
return ((_a = last(this.group.panels)) === null || _a === void 0 ? void 0 : _a.id) !== data.panelId;
|
|
4626
|
+
}
|
|
4627
|
+
return group.model.canDisplayOverlay(event, position, 'header_space');
|
|
4628
|
+
},
|
|
4359
4629
|
});
|
|
4630
|
+
this.onWillShowOverlay = this.dropTraget.onWillShowOverlay;
|
|
4631
|
+
this.addDisposables(handler, handler.onDragStart((event) => {
|
|
4632
|
+
this._onDragStart.fire(event);
|
|
4633
|
+
}), this.dropTraget.onDrop((event) => {
|
|
4634
|
+
this._onDrop.fire(event);
|
|
4635
|
+
}), this.dropTraget);
|
|
4360
4636
|
}
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
|
|
4637
|
+
}
|
|
4638
|
+
|
|
4639
|
+
class TabsContainer extends CompositeDisposable {
|
|
4640
|
+
get panels() {
|
|
4641
|
+
return this.tabs.map((_) => _.value.panel.id);
|
|
4364
4642
|
}
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
this.options.panels.forEach((panel) => {
|
|
4368
|
-
this.doAddPanel(panel);
|
|
4369
|
-
});
|
|
4370
|
-
}
|
|
4371
|
-
if (this.options.activePanel) {
|
|
4372
|
-
this.openPanel(this.options.activePanel);
|
|
4373
|
-
}
|
|
4374
|
-
// must be run after the constructor otherwise this.parent may not be
|
|
4375
|
-
// correctly initialized
|
|
4376
|
-
this.setActive(this.isActive, true);
|
|
4377
|
-
this.updateContainer();
|
|
4378
|
-
if (this.accessor.options.createRightHeaderActionsElement) {
|
|
4379
|
-
this._rightHeaderActions =
|
|
4380
|
-
this.accessor.options.createRightHeaderActionsElement(this.groupPanel);
|
|
4381
|
-
this.addDisposables(this._rightHeaderActions);
|
|
4382
|
-
this._rightHeaderActions.init({
|
|
4383
|
-
containerApi: this._api,
|
|
4384
|
-
api: this.groupPanel.api,
|
|
4385
|
-
});
|
|
4386
|
-
this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
|
|
4387
|
-
}
|
|
4388
|
-
if (this.accessor.options.createLeftHeaderActionsElement) {
|
|
4389
|
-
this._leftHeaderActions =
|
|
4390
|
-
this.accessor.options.createLeftHeaderActionsElement(this.groupPanel);
|
|
4391
|
-
this.addDisposables(this._leftHeaderActions);
|
|
4392
|
-
this._leftHeaderActions.init({
|
|
4393
|
-
containerApi: this._api,
|
|
4394
|
-
api: this.groupPanel.api,
|
|
4395
|
-
});
|
|
4396
|
-
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
4397
|
-
}
|
|
4398
|
-
if (this.accessor.options.createPrefixHeaderActionsElement) {
|
|
4399
|
-
this._prefixHeaderActions =
|
|
4400
|
-
this.accessor.options.createPrefixHeaderActionsElement(this.groupPanel);
|
|
4401
|
-
this.addDisposables(this._prefixHeaderActions);
|
|
4402
|
-
this._prefixHeaderActions.init({
|
|
4403
|
-
containerApi: this._api,
|
|
4404
|
-
api: this.groupPanel.api,
|
|
4405
|
-
});
|
|
4406
|
-
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
4407
|
-
}
|
|
4408
|
-
}
|
|
4409
|
-
rerender(panel) {
|
|
4410
|
-
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
4411
|
-
}
|
|
4412
|
-
indexOf(panel) {
|
|
4413
|
-
return this.tabsContainer.indexOf(panel.id);
|
|
4414
|
-
}
|
|
4415
|
-
toJSON() {
|
|
4416
|
-
var _a;
|
|
4417
|
-
const result = {
|
|
4418
|
-
views: this.tabsContainer.panels,
|
|
4419
|
-
activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
|
|
4420
|
-
id: this.id,
|
|
4421
|
-
};
|
|
4422
|
-
if (this.locked !== false) {
|
|
4423
|
-
result.locked = this.locked;
|
|
4424
|
-
}
|
|
4425
|
-
if (this.header.hidden) {
|
|
4426
|
-
result.hideHeader = true;
|
|
4427
|
-
}
|
|
4428
|
-
return result;
|
|
4429
|
-
}
|
|
4430
|
-
moveToNext(options) {
|
|
4431
|
-
if (!options) {
|
|
4432
|
-
options = {};
|
|
4433
|
-
}
|
|
4434
|
-
if (!options.panel) {
|
|
4435
|
-
options.panel = this.activePanel;
|
|
4436
|
-
}
|
|
4437
|
-
const index = options.panel ? this.panels.indexOf(options.panel) : -1;
|
|
4438
|
-
let normalizedIndex;
|
|
4439
|
-
if (index < this.panels.length - 1) {
|
|
4440
|
-
normalizedIndex = index + 1;
|
|
4441
|
-
}
|
|
4442
|
-
else if (!options.suppressRoll) {
|
|
4443
|
-
normalizedIndex = 0;
|
|
4444
|
-
}
|
|
4445
|
-
else {
|
|
4446
|
-
return;
|
|
4447
|
-
}
|
|
4448
|
-
this.openPanel(this.panels[normalizedIndex]);
|
|
4449
|
-
}
|
|
4450
|
-
moveToPrevious(options) {
|
|
4451
|
-
if (!options) {
|
|
4452
|
-
options = {};
|
|
4453
|
-
}
|
|
4454
|
-
if (!options.panel) {
|
|
4455
|
-
options.panel = this.activePanel;
|
|
4456
|
-
}
|
|
4457
|
-
if (!options.panel) {
|
|
4458
|
-
return;
|
|
4459
|
-
}
|
|
4460
|
-
const index = this.panels.indexOf(options.panel);
|
|
4461
|
-
let normalizedIndex;
|
|
4462
|
-
if (index > 0) {
|
|
4463
|
-
normalizedIndex = index - 1;
|
|
4464
|
-
}
|
|
4465
|
-
else if (!options.suppressRoll) {
|
|
4466
|
-
normalizedIndex = this.panels.length - 1;
|
|
4467
|
-
}
|
|
4468
|
-
else {
|
|
4469
|
-
return;
|
|
4470
|
-
}
|
|
4471
|
-
this.openPanel(this.panels[normalizedIndex]);
|
|
4472
|
-
}
|
|
4473
|
-
containsPanel(panel) {
|
|
4474
|
-
return this.panels.includes(panel);
|
|
4475
|
-
}
|
|
4476
|
-
init(_params) {
|
|
4477
|
-
//noop
|
|
4478
|
-
}
|
|
4479
|
-
update(_params) {
|
|
4480
|
-
//noop
|
|
4481
|
-
}
|
|
4482
|
-
focus() {
|
|
4483
|
-
var _a;
|
|
4484
|
-
(_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
|
|
4485
|
-
}
|
|
4486
|
-
openPanel(panel, options = {}) {
|
|
4487
|
-
/**
|
|
4488
|
-
* set the panel group
|
|
4489
|
-
* add the panel
|
|
4490
|
-
* check if group active
|
|
4491
|
-
* check if panel active
|
|
4492
|
-
*/
|
|
4493
|
-
if (typeof options.index !== 'number' ||
|
|
4494
|
-
options.index > this.panels.length) {
|
|
4495
|
-
options.index = this.panels.length;
|
|
4496
|
-
}
|
|
4497
|
-
const skipSetActive = !!options.skipSetActive;
|
|
4498
|
-
// ensure the group is updated before we fire any events
|
|
4499
|
-
panel.updateParentGroup(this.groupPanel, {
|
|
4500
|
-
skipSetActive: options.skipSetActive,
|
|
4501
|
-
});
|
|
4502
|
-
this.doAddPanel(panel, options.index, {
|
|
4503
|
-
skipSetActive: skipSetActive,
|
|
4504
|
-
});
|
|
4505
|
-
if (this._activePanel === panel) {
|
|
4506
|
-
this.contentContainer.renderPanel(panel, { asActive: true });
|
|
4507
|
-
return;
|
|
4508
|
-
}
|
|
4509
|
-
if (!skipSetActive) {
|
|
4510
|
-
this.doSetActivePanel(panel);
|
|
4511
|
-
}
|
|
4512
|
-
if (!options.skipSetGroupActive) {
|
|
4513
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4514
|
-
}
|
|
4515
|
-
if (!options.skipSetActive) {
|
|
4516
|
-
this.updateContainer();
|
|
4517
|
-
}
|
|
4518
|
-
}
|
|
4519
|
-
removePanel(groupItemOrId, options = {
|
|
4520
|
-
skipSetActive: false,
|
|
4521
|
-
}) {
|
|
4522
|
-
const id = typeof groupItemOrId === 'string'
|
|
4523
|
-
? groupItemOrId
|
|
4524
|
-
: groupItemOrId.id;
|
|
4525
|
-
const panelToRemove = this._panels.find((panel) => panel.id === id);
|
|
4526
|
-
if (!panelToRemove) {
|
|
4527
|
-
throw new Error('invalid operation');
|
|
4528
|
-
}
|
|
4529
|
-
return this._removePanel(panelToRemove, options);
|
|
4530
|
-
}
|
|
4531
|
-
closeAllPanels() {
|
|
4532
|
-
if (this.panels.length > 0) {
|
|
4533
|
-
// take a copy since we will be edting the array as we iterate through
|
|
4534
|
-
const arrPanelCpy = [...this.panels];
|
|
4535
|
-
for (const panel of arrPanelCpy) {
|
|
4536
|
-
this.doClose(panel);
|
|
4537
|
-
}
|
|
4538
|
-
}
|
|
4539
|
-
else {
|
|
4540
|
-
this.accessor.removeGroup(this.groupPanel);
|
|
4541
|
-
}
|
|
4542
|
-
}
|
|
4543
|
-
closePanel(panel) {
|
|
4544
|
-
this.doClose(panel);
|
|
4545
|
-
}
|
|
4546
|
-
doClose(panel) {
|
|
4547
|
-
this.accessor.removePanel(panel);
|
|
4548
|
-
}
|
|
4549
|
-
isPanelActive(panel) {
|
|
4550
|
-
return this._activePanel === panel;
|
|
4551
|
-
}
|
|
4552
|
-
updateActions(element) {
|
|
4553
|
-
this.tabsContainer.setRightActionsElement(element);
|
|
4554
|
-
}
|
|
4555
|
-
setActive(isGroupActive, force = false) {
|
|
4556
|
-
if (!force && this.isActive === isGroupActive) {
|
|
4557
|
-
return;
|
|
4558
|
-
}
|
|
4559
|
-
this._isGroupActive = isGroupActive;
|
|
4560
|
-
toggleClass(this.container, 'active-group', isGroupActive);
|
|
4561
|
-
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
4562
|
-
this.tabsContainer.setActive(this.isActive);
|
|
4563
|
-
if (!this._activePanel && this.panels.length > 0) {
|
|
4564
|
-
this.doSetActivePanel(this.panels[0]);
|
|
4565
|
-
}
|
|
4566
|
-
this.updateContainer();
|
|
4567
|
-
}
|
|
4568
|
-
layout(width, height) {
|
|
4569
|
-
var _a;
|
|
4570
|
-
this._width = width;
|
|
4571
|
-
this._height = height;
|
|
4572
|
-
this.contentContainer.layout(this._width, this._height);
|
|
4573
|
-
if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
|
|
4574
|
-
this._activePanel.layout(this._width, this._height);
|
|
4575
|
-
}
|
|
4576
|
-
}
|
|
4577
|
-
_removePanel(panel, options) {
|
|
4578
|
-
const isActivePanel = this._activePanel === panel;
|
|
4579
|
-
this.doRemovePanel(panel);
|
|
4580
|
-
if (isActivePanel && this.panels.length > 0) {
|
|
4581
|
-
const nextPanel = this.mostRecentlyUsed[0];
|
|
4582
|
-
this.openPanel(nextPanel, {
|
|
4583
|
-
skipSetActive: options.skipSetActive,
|
|
4584
|
-
skipSetGroupActive: options.skipSetActiveGroup,
|
|
4585
|
-
});
|
|
4586
|
-
}
|
|
4587
|
-
if (this._activePanel && this.panels.length === 0) {
|
|
4588
|
-
this.doSetActivePanel(undefined);
|
|
4589
|
-
}
|
|
4590
|
-
if (!options.skipSetActive) {
|
|
4591
|
-
this.updateContainer();
|
|
4592
|
-
}
|
|
4593
|
-
return panel;
|
|
4594
|
-
}
|
|
4595
|
-
doRemovePanel(panel) {
|
|
4596
|
-
const index = this.panels.indexOf(panel);
|
|
4597
|
-
if (this._activePanel === panel) {
|
|
4598
|
-
this.contentContainer.closePanel();
|
|
4599
|
-
}
|
|
4600
|
-
this.tabsContainer.delete(panel.id);
|
|
4601
|
-
this._panels.splice(index, 1);
|
|
4602
|
-
if (this.mostRecentlyUsed.includes(panel)) {
|
|
4603
|
-
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
4604
|
-
}
|
|
4605
|
-
const disposable = this._panelDisposables.get(panel.id);
|
|
4606
|
-
if (disposable) {
|
|
4607
|
-
disposable.dispose();
|
|
4608
|
-
this._panelDisposables.delete(panel.id);
|
|
4609
|
-
}
|
|
4610
|
-
this._onDidRemovePanel.fire({ panel });
|
|
4611
|
-
}
|
|
4612
|
-
doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
|
|
4613
|
-
const existingPanel = this._panels.indexOf(panel);
|
|
4614
|
-
const hasExistingPanel = existingPanel > -1;
|
|
4615
|
-
this.tabsContainer.show();
|
|
4616
|
-
this.contentContainer.show();
|
|
4617
|
-
this.tabsContainer.openPanel(panel, index);
|
|
4618
|
-
if (!options.skipSetActive) {
|
|
4619
|
-
this.contentContainer.openPanel(panel);
|
|
4620
|
-
}
|
|
4621
|
-
if (hasExistingPanel) {
|
|
4622
|
-
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
4623
|
-
return;
|
|
4624
|
-
}
|
|
4625
|
-
this.updateMru(panel);
|
|
4626
|
-
this.panels.splice(index, 0, panel);
|
|
4627
|
-
this._panelDisposables.set(panel.id, new CompositeDisposable(panel.api.onDidTitleChange((event) => this._onDidPanelTitleChange.fire(event)), panel.api.onDidParametersChange((event) => this._onDidPanelParametersChange.fire(event))));
|
|
4628
|
-
this._onDidAddPanel.fire({ panel });
|
|
4629
|
-
}
|
|
4630
|
-
doSetActivePanel(panel) {
|
|
4631
|
-
if (this._activePanel === panel) {
|
|
4632
|
-
return;
|
|
4633
|
-
}
|
|
4634
|
-
this._activePanel = panel;
|
|
4635
|
-
if (panel) {
|
|
4636
|
-
this.tabsContainer.setActivePanel(panel);
|
|
4637
|
-
panel.layout(this._width, this._height);
|
|
4638
|
-
this.updateMru(panel);
|
|
4639
|
-
this._onDidActivePanelChange.fire({
|
|
4640
|
-
panel,
|
|
4641
|
-
});
|
|
4642
|
-
}
|
|
4643
|
-
}
|
|
4644
|
-
updateMru(panel) {
|
|
4645
|
-
if (this.mostRecentlyUsed.includes(panel)) {
|
|
4646
|
-
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
4647
|
-
}
|
|
4648
|
-
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
4649
|
-
}
|
|
4650
|
-
updateContainer() {
|
|
4651
|
-
var _a, _b;
|
|
4652
|
-
toggleClass(this.container, 'empty', this.isEmpty);
|
|
4653
|
-
this.panels.forEach((panel) => panel.runEvents());
|
|
4654
|
-
if (this.isEmpty && !this.watermark) {
|
|
4655
|
-
const watermark = this.accessor.createWatermarkComponent();
|
|
4656
|
-
watermark.init({
|
|
4657
|
-
containerApi: this._api,
|
|
4658
|
-
group: this.groupPanel,
|
|
4659
|
-
});
|
|
4660
|
-
this.watermark = watermark;
|
|
4661
|
-
addDisposableListener(this.watermark.element, 'click', () => {
|
|
4662
|
-
if (!this.isActive) {
|
|
4663
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4664
|
-
}
|
|
4665
|
-
});
|
|
4666
|
-
this.tabsContainer.hide();
|
|
4667
|
-
this.contentContainer.element.appendChild(this.watermark.element);
|
|
4668
|
-
this.watermark.updateParentGroup(this.groupPanel, true);
|
|
4669
|
-
}
|
|
4670
|
-
if (!this.isEmpty && this.watermark) {
|
|
4671
|
-
this.watermark.element.remove();
|
|
4672
|
-
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4673
|
-
this.watermark = undefined;
|
|
4674
|
-
this.tabsContainer.show();
|
|
4675
|
-
}
|
|
4643
|
+
get size() {
|
|
4644
|
+
return this.tabs.length;
|
|
4676
4645
|
}
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
if (this.accessor.options.showDndOverlay) {
|
|
4680
|
-
return this.accessor.options.showDndOverlay({
|
|
4681
|
-
nativeEvent: event,
|
|
4682
|
-
target,
|
|
4683
|
-
group: this.accessor.getPanel(this.id),
|
|
4684
|
-
position,
|
|
4685
|
-
getData: getPanelData,
|
|
4686
|
-
});
|
|
4687
|
-
}
|
|
4688
|
-
return false;
|
|
4646
|
+
get hidden() {
|
|
4647
|
+
return this._hidden;
|
|
4689
4648
|
}
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
return typeof index === 'number' ? 'tab' : 'header_space';
|
|
4698
|
-
case 'content':
|
|
4699
|
-
return 'content';
|
|
4700
|
-
}
|
|
4701
|
-
}
|
|
4702
|
-
const panel = typeof index === 'number' ? this.panels[index] : undefined;
|
|
4703
|
-
const willDropEvent = new DockviewWillDropEvent({
|
|
4704
|
-
nativeEvent: event,
|
|
4705
|
-
position,
|
|
4706
|
-
panel,
|
|
4707
|
-
getData: () => getPanelData(),
|
|
4708
|
-
kind: getKind(),
|
|
4709
|
-
group: this.groupPanel,
|
|
4710
|
-
api: this._api,
|
|
4711
|
-
});
|
|
4712
|
-
this._onWillDrop.fire(willDropEvent);
|
|
4713
|
-
if (willDropEvent.defaultPrevented) {
|
|
4714
|
-
return;
|
|
4715
|
-
}
|
|
4716
|
-
const data = getPanelData();
|
|
4717
|
-
if (data && data.viewId === this.accessor.id) {
|
|
4718
|
-
if (data.panelId === null) {
|
|
4719
|
-
// this is a group move dnd event
|
|
4720
|
-
const { groupId } = data;
|
|
4721
|
-
this._onMove.fire({
|
|
4722
|
-
target: position,
|
|
4723
|
-
groupId: groupId,
|
|
4724
|
-
index,
|
|
4725
|
-
});
|
|
4726
|
-
return;
|
|
4727
|
-
}
|
|
4728
|
-
const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
|
|
4729
|
-
if (fromSameGroup && this.tabsContainer.size === 1) {
|
|
4730
|
-
return;
|
|
4731
|
-
}
|
|
4732
|
-
const { groupId, panelId } = data;
|
|
4733
|
-
const isSameGroup = this.id === groupId;
|
|
4734
|
-
if (isSameGroup && !position) {
|
|
4735
|
-
const oldIndex = this.tabsContainer.indexOf(panelId);
|
|
4736
|
-
if (oldIndex === index) {
|
|
4737
|
-
return;
|
|
4738
|
-
}
|
|
4739
|
-
}
|
|
4740
|
-
this._onMove.fire({
|
|
4741
|
-
target: position,
|
|
4742
|
-
groupId: data.groupId,
|
|
4743
|
-
itemId: data.panelId,
|
|
4744
|
-
index,
|
|
4745
|
-
});
|
|
4649
|
+
set hidden(value) {
|
|
4650
|
+
this._hidden = value;
|
|
4651
|
+
this.element.style.display = value ? 'none' : '';
|
|
4652
|
+
}
|
|
4653
|
+
show() {
|
|
4654
|
+
if (!this.hidden) {
|
|
4655
|
+
this.element.style.display = '';
|
|
4746
4656
|
}
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4657
|
+
}
|
|
4658
|
+
hide() {
|
|
4659
|
+
this._element.style.display = 'none';
|
|
4660
|
+
}
|
|
4661
|
+
setRightActionsElement(element) {
|
|
4662
|
+
if (this.rightActions === element) {
|
|
4663
|
+
return;
|
|
4664
|
+
}
|
|
4665
|
+
if (this.rightActions) {
|
|
4666
|
+
this.rightActions.remove();
|
|
4667
|
+
this.rightActions = undefined;
|
|
4668
|
+
}
|
|
4669
|
+
if (element) {
|
|
4670
|
+
this.rightActionsContainer.appendChild(element);
|
|
4671
|
+
this.rightActions = element;
|
|
4756
4672
|
}
|
|
4757
4673
|
}
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4674
|
+
setLeftActionsElement(element) {
|
|
4675
|
+
if (this.leftActions === element) {
|
|
4676
|
+
return;
|
|
4677
|
+
}
|
|
4678
|
+
if (this.leftActions) {
|
|
4679
|
+
this.leftActions.remove();
|
|
4680
|
+
this.leftActions = undefined;
|
|
4681
|
+
}
|
|
4682
|
+
if (element) {
|
|
4683
|
+
this.leftActionsContainer.appendChild(element);
|
|
4684
|
+
this.leftActions = element;
|
|
4685
|
+
}
|
|
4686
|
+
}
|
|
4687
|
+
setPrefixActionsElement(element) {
|
|
4688
|
+
if (this.preActions === element) {
|
|
4689
|
+
return;
|
|
4690
|
+
}
|
|
4691
|
+
if (this.preActions) {
|
|
4692
|
+
this.preActions.remove();
|
|
4693
|
+
this.preActions = undefined;
|
|
4694
|
+
}
|
|
4695
|
+
if (element) {
|
|
4696
|
+
this.preActionsContainer.appendChild(element);
|
|
4697
|
+
this.preActions = element;
|
|
4766
4698
|
}
|
|
4767
|
-
this.tabsContainer.dispose();
|
|
4768
|
-
this.contentContainer.dispose();
|
|
4769
4699
|
}
|
|
4770
|
-
}
|
|
4771
|
-
|
|
4772
|
-
class Resizable extends CompositeDisposable {
|
|
4773
4700
|
get element() {
|
|
4774
4701
|
return this._element;
|
|
4775
4702
|
}
|
|
4776
|
-
|
|
4777
|
-
return this.
|
|
4703
|
+
isActive(tab) {
|
|
4704
|
+
return (this.selectedIndex > -1 &&
|
|
4705
|
+
this.tabs[this.selectedIndex].value === tab);
|
|
4778
4706
|
}
|
|
4779
|
-
|
|
4780
|
-
this.
|
|
4707
|
+
indexOf(id) {
|
|
4708
|
+
return this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4781
4709
|
}
|
|
4782
|
-
constructor(
|
|
4710
|
+
constructor(accessor, group) {
|
|
4783
4711
|
super();
|
|
4784
|
-
this.
|
|
4785
|
-
this.
|
|
4786
|
-
this.
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4712
|
+
this.accessor = accessor;
|
|
4713
|
+
this.group = group;
|
|
4714
|
+
this.tabs = [];
|
|
4715
|
+
this.selectedIndex = -1;
|
|
4716
|
+
this._hidden = false;
|
|
4717
|
+
this._onDrop = new Emitter();
|
|
4718
|
+
this.onDrop = this._onDrop.event;
|
|
4719
|
+
this._onTabDragStart = new Emitter();
|
|
4720
|
+
this.onTabDragStart = this._onTabDragStart.event;
|
|
4721
|
+
this._onGroupDragStart = new Emitter();
|
|
4722
|
+
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
4723
|
+
this._onWillShowOverlay = new Emitter();
|
|
4724
|
+
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
4725
|
+
this._element = document.createElement('div');
|
|
4726
|
+
this._element.className = 'tabs-and-actions-container';
|
|
4727
|
+
toggleClass(this._element, 'dv-full-width-single-tab', this.accessor.options.singleTabMode === 'fullwidth');
|
|
4728
|
+
this.rightActionsContainer = document.createElement('div');
|
|
4729
|
+
this.rightActionsContainer.className = 'right-actions-container';
|
|
4730
|
+
this.leftActionsContainer = document.createElement('div');
|
|
4731
|
+
this.leftActionsContainer.className = 'left-actions-container';
|
|
4732
|
+
this.preActionsContainer = document.createElement('div');
|
|
4733
|
+
this.preActionsContainer.className = 'pre-actions-container';
|
|
4734
|
+
this.tabContainer = document.createElement('div');
|
|
4735
|
+
this.tabContainer.className = 'tabs-container';
|
|
4736
|
+
this.voidContainer = new VoidContainer(this.accessor, this.group);
|
|
4737
|
+
this._element.appendChild(this.preActionsContainer);
|
|
4738
|
+
this._element.appendChild(this.tabContainer);
|
|
4739
|
+
this._element.appendChild(this.leftActionsContainer);
|
|
4740
|
+
this._element.appendChild(this.voidContainer.element);
|
|
4741
|
+
this._element.appendChild(this.rightActionsContainer);
|
|
4742
|
+
this.addDisposables(this.accessor.onDidAddPanel((e) => {
|
|
4743
|
+
if (e.api.group === this.group) {
|
|
4744
|
+
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4793
4745
|
}
|
|
4794
|
-
|
|
4746
|
+
}), this.accessor.onDidRemovePanel((e) => {
|
|
4747
|
+
if (e.api.group === this.group) {
|
|
4748
|
+
toggleClass(this._element, 'dv-single-tab', this.size === 1);
|
|
4749
|
+
}
|
|
4750
|
+
}), this._onWillShowOverlay, this._onDrop, this._onTabDragStart, this._onGroupDragStart, this.voidContainer, this.voidContainer.onDragStart((event) => {
|
|
4751
|
+
this._onGroupDragStart.fire({
|
|
4752
|
+
nativeEvent: event,
|
|
4753
|
+
group: this.group,
|
|
4754
|
+
});
|
|
4755
|
+
}), this.voidContainer.onDrop((event) => {
|
|
4756
|
+
this._onDrop.fire({
|
|
4757
|
+
event: event.nativeEvent,
|
|
4758
|
+
index: this.tabs.length,
|
|
4759
|
+
});
|
|
4760
|
+
}), this.voidContainer.onWillShowOverlay((event) => {
|
|
4761
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4762
|
+
kind: 'header_space',
|
|
4763
|
+
panel: this.group.activePanel,
|
|
4764
|
+
api: this.accessor.api,
|
|
4765
|
+
group: this.group,
|
|
4766
|
+
getData: getPanelData,
|
|
4767
|
+
}));
|
|
4768
|
+
}), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
|
|
4769
|
+
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4770
|
+
if (isFloatingGroupsEnabled &&
|
|
4771
|
+
event.shiftKey &&
|
|
4772
|
+
this.group.api.location.type !== 'floating') {
|
|
4773
|
+
event.preventDefault();
|
|
4774
|
+
const { top, left } = this.element.getBoundingClientRect();
|
|
4775
|
+
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4776
|
+
this.accessor.addFloatingGroup(this.group, {
|
|
4777
|
+
x: left - rootLeft + 20,
|
|
4778
|
+
y: top - rootTop + 20,
|
|
4779
|
+
}, { inDragMode: true });
|
|
4780
|
+
}
|
|
4781
|
+
}), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
|
|
4782
|
+
if (event.defaultPrevented) {
|
|
4795
4783
|
return;
|
|
4796
4784
|
}
|
|
4797
|
-
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
|
|
4809
|
-
|
|
4785
|
+
const isLeftClick = event.button === 0;
|
|
4786
|
+
if (isLeftClick) {
|
|
4787
|
+
this.accessor.doSetGroupActive(this.group);
|
|
4788
|
+
}
|
|
4789
|
+
}));
|
|
4790
|
+
}
|
|
4791
|
+
setActive(_isGroupActive) {
|
|
4792
|
+
// noop
|
|
4793
|
+
}
|
|
4794
|
+
addTab(tab, index = this.tabs.length) {
|
|
4795
|
+
if (index < 0 || index > this.tabs.length) {
|
|
4796
|
+
throw new Error('invalid location');
|
|
4797
|
+
}
|
|
4798
|
+
this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
|
|
4799
|
+
this.tabs = [
|
|
4800
|
+
...this.tabs.slice(0, index),
|
|
4801
|
+
tab,
|
|
4802
|
+
...this.tabs.slice(index),
|
|
4803
|
+
];
|
|
4804
|
+
if (this.selectedIndex < 0) {
|
|
4805
|
+
this.selectedIndex = index;
|
|
4806
|
+
}
|
|
4807
|
+
}
|
|
4808
|
+
delete(id) {
|
|
4809
|
+
const index = this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4810
|
+
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
4811
|
+
const { value, disposable } = tabToRemove;
|
|
4812
|
+
disposable.dispose();
|
|
4813
|
+
value.dispose();
|
|
4814
|
+
value.element.remove();
|
|
4815
|
+
}
|
|
4816
|
+
setActivePanel(panel) {
|
|
4817
|
+
this.tabs.forEach((tab) => {
|
|
4818
|
+
const isActivePanel = panel.id === tab.value.panel.id;
|
|
4819
|
+
tab.value.setActive(isActivePanel);
|
|
4820
|
+
});
|
|
4821
|
+
}
|
|
4822
|
+
openPanel(panel, index = this.tabs.length) {
|
|
4823
|
+
var _a;
|
|
4824
|
+
if (this.tabs.find((tab) => tab.value.panel.id === panel.id)) {
|
|
4825
|
+
return;
|
|
4826
|
+
}
|
|
4827
|
+
const tab = new Tab(panel, this.accessor, this.group);
|
|
4828
|
+
if (!((_a = panel.view) === null || _a === void 0 ? void 0 : _a.tab)) {
|
|
4829
|
+
throw new Error('invalid header component');
|
|
4830
|
+
}
|
|
4831
|
+
tab.setContent(panel.view.tab);
|
|
4832
|
+
const disposable = new CompositeDisposable(tab.onDragStart((event) => {
|
|
4833
|
+
this._onTabDragStart.fire({ nativeEvent: event, panel });
|
|
4834
|
+
}), tab.onChanged((event) => {
|
|
4835
|
+
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4836
|
+
const isFloatingWithOnePanel = this.group.api.location.type === 'floating' &&
|
|
4837
|
+
this.size === 1;
|
|
4838
|
+
if (isFloatingGroupsEnabled &&
|
|
4839
|
+
!isFloatingWithOnePanel &&
|
|
4840
|
+
event.shiftKey) {
|
|
4841
|
+
event.preventDefault();
|
|
4842
|
+
const panel = this.accessor.getGroupPanel(tab.panel.id);
|
|
4843
|
+
const { top, left } = tab.element.getBoundingClientRect();
|
|
4844
|
+
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4845
|
+
this.accessor.addFloatingGroup(panel, {
|
|
4846
|
+
x: left - rootLeft,
|
|
4847
|
+
y: top - rootTop,
|
|
4848
|
+
}, { inDragMode: true });
|
|
4810
4849
|
return;
|
|
4811
4850
|
}
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
4815
|
-
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
4816
|
-
* are mostly likely all zero and meaningless. we should skip this case.
|
|
4817
|
-
*/
|
|
4851
|
+
const isLeftClick = event.button === 0;
|
|
4852
|
+
if (!isLeftClick || event.defaultPrevented) {
|
|
4818
4853
|
return;
|
|
4819
4854
|
}
|
|
4820
|
-
|
|
4821
|
-
|
|
4855
|
+
if (this.group.activePanel !== panel) {
|
|
4856
|
+
this.group.model.openPanel(panel);
|
|
4857
|
+
}
|
|
4858
|
+
}), tab.onDrop((event) => {
|
|
4859
|
+
this._onDrop.fire({
|
|
4860
|
+
event: event.nativeEvent,
|
|
4861
|
+
index: this.tabs.findIndex((x) => x.value === tab),
|
|
4862
|
+
});
|
|
4863
|
+
}), tab.onWillShowOverlay((event) => {
|
|
4864
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4865
|
+
kind: 'tab',
|
|
4866
|
+
panel: this.group.activePanel,
|
|
4867
|
+
api: this.accessor.api,
|
|
4868
|
+
group: this.group,
|
|
4869
|
+
getData: getPanelData,
|
|
4870
|
+
}));
|
|
4822
4871
|
}));
|
|
4872
|
+
const value = { value: tab, disposable };
|
|
4873
|
+
this.addTab(value, index);
|
|
4823
4874
|
}
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
return 'top';
|
|
4835
|
-
case 'below':
|
|
4836
|
-
return 'bottom';
|
|
4837
|
-
case 'within':
|
|
4838
|
-
default:
|
|
4839
|
-
return 'center';
|
|
4875
|
+
closePanel(panel) {
|
|
4876
|
+
this.delete(panel.id);
|
|
4877
|
+
}
|
|
4878
|
+
dispose() {
|
|
4879
|
+
super.dispose();
|
|
4880
|
+
for (const { value, disposable } of this.tabs) {
|
|
4881
|
+
disposable.dispose();
|
|
4882
|
+
value.dispose();
|
|
4883
|
+
}
|
|
4884
|
+
this.tabs = [];
|
|
4840
4885
|
}
|
|
4841
4886
|
}
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4887
|
+
|
|
4888
|
+
class DockviewUnhandledDragOverEvent {
|
|
4889
|
+
get isAccepted() {
|
|
4890
|
+
return this._isAccepted;
|
|
4845
4891
|
}
|
|
4846
|
-
|
|
4847
|
-
|
|
4892
|
+
constructor(nativeEvent, target, position, getData, group) {
|
|
4893
|
+
this.nativeEvent = nativeEvent;
|
|
4894
|
+
this.target = target;
|
|
4895
|
+
this.position = position;
|
|
4896
|
+
this.getData = getData;
|
|
4897
|
+
this.group = group;
|
|
4898
|
+
this._isAccepted = false;
|
|
4848
4899
|
}
|
|
4849
|
-
|
|
4850
|
-
|
|
4900
|
+
accept() {
|
|
4901
|
+
this._isAccepted = true;
|
|
4851
4902
|
}
|
|
4852
|
-
|
|
4853
|
-
|
|
4903
|
+
}
|
|
4904
|
+
const PROPERTY_KEYS = (() => {
|
|
4905
|
+
/**
|
|
4906
|
+
* by readong the keys from an empty value object TypeScript will error
|
|
4907
|
+
* when we add or remove new properties to `DockviewOptions`
|
|
4908
|
+
*/
|
|
4909
|
+
const properties = {
|
|
4910
|
+
disableAutoResizing: undefined,
|
|
4911
|
+
hideBorders: undefined,
|
|
4912
|
+
singleTabMode: undefined,
|
|
4913
|
+
disableFloatingGroups: undefined,
|
|
4914
|
+
floatingGroupBounds: undefined,
|
|
4915
|
+
popoutUrl: undefined,
|
|
4916
|
+
defaultRenderer: undefined,
|
|
4917
|
+
debug: undefined,
|
|
4918
|
+
rootOverlayModel: undefined,
|
|
4919
|
+
locked: undefined,
|
|
4920
|
+
disableDnd: undefined,
|
|
4921
|
+
};
|
|
4922
|
+
return Object.keys(properties);
|
|
4923
|
+
})();
|
|
4924
|
+
function isPanelOptionsWithPanel(data) {
|
|
4925
|
+
if (data.referencePanel) {
|
|
4926
|
+
return true;
|
|
4854
4927
|
}
|
|
4855
|
-
|
|
4856
|
-
|
|
4928
|
+
return false;
|
|
4929
|
+
}
|
|
4930
|
+
function isPanelOptionsWithGroup(data) {
|
|
4931
|
+
if (data.referenceGroup) {
|
|
4932
|
+
return true;
|
|
4857
4933
|
}
|
|
4858
|
-
|
|
4859
|
-
|
|
4934
|
+
return false;
|
|
4935
|
+
}
|
|
4936
|
+
function isGroupOptionsWithPanel(data) {
|
|
4937
|
+
if (data.referencePanel) {
|
|
4938
|
+
return true;
|
|
4860
4939
|
}
|
|
4861
|
-
|
|
4862
|
-
|
|
4940
|
+
return false;
|
|
4941
|
+
}
|
|
4942
|
+
function isGroupOptionsWithGroup(data) {
|
|
4943
|
+
if (data.referenceGroup) {
|
|
4944
|
+
return true;
|
|
4863
4945
|
}
|
|
4864
|
-
|
|
4865
|
-
|
|
4946
|
+
return false;
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
class DockviewDidDropEvent extends DockviewEvent {
|
|
4950
|
+
get nativeEvent() {
|
|
4951
|
+
return this.options.nativeEvent;
|
|
4866
4952
|
}
|
|
4867
|
-
get
|
|
4868
|
-
return this.
|
|
4953
|
+
get position() {
|
|
4954
|
+
return this.options.position;
|
|
4869
4955
|
}
|
|
4870
|
-
get
|
|
4871
|
-
return this.
|
|
4956
|
+
get panel() {
|
|
4957
|
+
return this.options.panel;
|
|
4872
4958
|
}
|
|
4873
|
-
get
|
|
4874
|
-
return this.
|
|
4959
|
+
get group() {
|
|
4960
|
+
return this.options.group;
|
|
4875
4961
|
}
|
|
4876
|
-
|
|
4877
|
-
this.
|
|
4962
|
+
get api() {
|
|
4963
|
+
return this.options.api;
|
|
4878
4964
|
}
|
|
4879
4965
|
constructor(options) {
|
|
4880
|
-
super(
|
|
4881
|
-
this.
|
|
4882
|
-
this._groups = new Map();
|
|
4883
|
-
this._onDidLayoutChange = new Emitter();
|
|
4884
|
-
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
4885
|
-
this._onDidRemove = new Emitter();
|
|
4886
|
-
this.onDidRemove = this._onDidRemove.event;
|
|
4887
|
-
this._onDidAdd = new Emitter();
|
|
4888
|
-
this.onDidAdd = this._onDidAdd.event;
|
|
4889
|
-
this._onDidActiveChange = new Emitter();
|
|
4890
|
-
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
4891
|
-
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
4892
|
-
this.element.style.height = '100%';
|
|
4893
|
-
this.element.style.width = '100%';
|
|
4894
|
-
options.parentElement.appendChild(this.element);
|
|
4895
|
-
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
4896
|
-
this.gridview.locked = !!options.locked;
|
|
4897
|
-
this.element.appendChild(this.gridview.element);
|
|
4898
|
-
this.layout(0, 0, true); // set some elements height/widths
|
|
4899
|
-
this.addDisposables(Disposable.from(() => {
|
|
4900
|
-
var _a;
|
|
4901
|
-
(_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
|
|
4902
|
-
}), this.gridview.onDidChange(() => {
|
|
4903
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4904
|
-
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
4905
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4906
|
-
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
4907
|
-
this._onDidLayoutChange.fire();
|
|
4908
|
-
}), this._bufferOnDidLayoutChange);
|
|
4909
|
-
}
|
|
4910
|
-
setVisible(panel, visible) {
|
|
4911
|
-
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
4912
|
-
this._onDidLayoutChange.fire();
|
|
4913
|
-
}
|
|
4914
|
-
isVisible(panel) {
|
|
4915
|
-
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
4916
|
-
}
|
|
4917
|
-
maximizeGroup(panel) {
|
|
4918
|
-
this.gridview.maximizeView(panel);
|
|
4919
|
-
this.doSetGroupActive(panel);
|
|
4920
|
-
}
|
|
4921
|
-
isMaximizedGroup(panel) {
|
|
4922
|
-
return this.gridview.maximizedView() === panel;
|
|
4923
|
-
}
|
|
4924
|
-
exitMaximizedGroup() {
|
|
4925
|
-
this.gridview.exitMaximizedView();
|
|
4926
|
-
}
|
|
4927
|
-
hasMaximizedGroup() {
|
|
4928
|
-
return this.gridview.hasMaximizedView();
|
|
4929
|
-
}
|
|
4930
|
-
get onDidMaximizedGroupChange() {
|
|
4931
|
-
return this.gridview.onDidMaximizedNodeChange;
|
|
4966
|
+
super();
|
|
4967
|
+
this.options = options;
|
|
4932
4968
|
}
|
|
4933
|
-
|
|
4934
|
-
this.
|
|
4935
|
-
this._onDidAdd.fire(group);
|
|
4969
|
+
getData() {
|
|
4970
|
+
return this.options.getData();
|
|
4936
4971
|
}
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
const item = this._groups.get(group.id);
|
|
4942
|
-
const view = this.gridview.remove(group, exports.Sizing.Distribute);
|
|
4943
|
-
if (item && !(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
4944
|
-
item.disposable.dispose();
|
|
4945
|
-
item.value.dispose();
|
|
4946
|
-
this._groups.delete(group.id);
|
|
4947
|
-
this._onDidRemove.fire(group);
|
|
4948
|
-
}
|
|
4949
|
-
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
4950
|
-
const groups = Array.from(this._groups.values());
|
|
4951
|
-
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
4952
|
-
}
|
|
4953
|
-
return view;
|
|
4972
|
+
}
|
|
4973
|
+
class DockviewWillDropEvent extends DockviewDidDropEvent {
|
|
4974
|
+
get kind() {
|
|
4975
|
+
return this._kind;
|
|
4954
4976
|
}
|
|
4955
|
-
|
|
4956
|
-
|
|
4957
|
-
|
|
4977
|
+
constructor(options) {
|
|
4978
|
+
super(options);
|
|
4979
|
+
this._kind = options.kind;
|
|
4958
4980
|
}
|
|
4959
|
-
|
|
4960
|
-
|
|
4961
|
-
|
|
4962
|
-
|
|
4963
|
-
if (this._activeGroup) {
|
|
4964
|
-
this._activeGroup.setActive(false);
|
|
4965
|
-
}
|
|
4966
|
-
if (group) {
|
|
4967
|
-
group.setActive(true);
|
|
4968
|
-
}
|
|
4969
|
-
this._activeGroup = group;
|
|
4970
|
-
this._onDidActiveChange.fire(group);
|
|
4981
|
+
}
|
|
4982
|
+
class WillShowOverlayLocationEvent {
|
|
4983
|
+
get kind() {
|
|
4984
|
+
return this.options.kind;
|
|
4971
4985
|
}
|
|
4972
|
-
|
|
4973
|
-
this.
|
|
4986
|
+
get nativeEvent() {
|
|
4987
|
+
return this.event.nativeEvent;
|
|
4974
4988
|
}
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
if (!options) {
|
|
4978
|
-
options = {};
|
|
4979
|
-
}
|
|
4980
|
-
if (!options.group) {
|
|
4981
|
-
if (!this.activeGroup) {
|
|
4982
|
-
return;
|
|
4983
|
-
}
|
|
4984
|
-
options.group = this.activeGroup;
|
|
4985
|
-
}
|
|
4986
|
-
const location = getGridLocation(options.group.element);
|
|
4987
|
-
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
4988
|
-
this.doSetGroupActive(next);
|
|
4989
|
+
get position() {
|
|
4990
|
+
return this.event.position;
|
|
4989
4991
|
}
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
if (!options) {
|
|
4993
|
-
options = {};
|
|
4994
|
-
}
|
|
4995
|
-
if (!options.group) {
|
|
4996
|
-
if (!this.activeGroup) {
|
|
4997
|
-
return;
|
|
4998
|
-
}
|
|
4999
|
-
options.group = this.activeGroup;
|
|
5000
|
-
}
|
|
5001
|
-
const location = getGridLocation(options.group.element);
|
|
5002
|
-
const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
5003
|
-
this.doSetGroupActive(next);
|
|
4992
|
+
get defaultPrevented() {
|
|
4993
|
+
return this.event.defaultPrevented;
|
|
5004
4994
|
}
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
if (!different) {
|
|
5008
|
-
return;
|
|
5009
|
-
}
|
|
5010
|
-
this.gridview.element.style.height = `${height}px`;
|
|
5011
|
-
this.gridview.element.style.width = `${width}px`;
|
|
5012
|
-
this.gridview.layout(width, height);
|
|
4995
|
+
get panel() {
|
|
4996
|
+
return this.options.panel;
|
|
5013
4997
|
}
|
|
5014
|
-
|
|
5015
|
-
this.
|
|
5016
|
-
this._onDidAdd.dispose();
|
|
5017
|
-
this._onDidRemove.dispose();
|
|
5018
|
-
this._onDidLayoutChange.dispose();
|
|
5019
|
-
for (const group of this.groups) {
|
|
5020
|
-
group.dispose();
|
|
5021
|
-
}
|
|
5022
|
-
this.gridview.dispose();
|
|
5023
|
-
super.dispose();
|
|
4998
|
+
get api() {
|
|
4999
|
+
return this.options.api;
|
|
5024
5000
|
}
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
class WillFocusEvent extends DockviewEvent {
|
|
5028
|
-
constructor() {
|
|
5029
|
-
super();
|
|
5001
|
+
get group() {
|
|
5002
|
+
return this.options.group;
|
|
5030
5003
|
}
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
* A core api implementation that should be used across all panel-like objects
|
|
5034
|
-
*/
|
|
5035
|
-
class PanelApiImpl extends CompositeDisposable {
|
|
5036
|
-
get isFocused() {
|
|
5037
|
-
return this._isFocused;
|
|
5004
|
+
preventDefault() {
|
|
5005
|
+
this.event.preventDefault();
|
|
5038
5006
|
}
|
|
5039
|
-
|
|
5040
|
-
return this.
|
|
5007
|
+
getData() {
|
|
5008
|
+
return this.options.getData();
|
|
5041
5009
|
}
|
|
5042
|
-
|
|
5043
|
-
|
|
5010
|
+
constructor(event, options) {
|
|
5011
|
+
this.event = event;
|
|
5012
|
+
this.options = options;
|
|
5044
5013
|
}
|
|
5045
|
-
|
|
5046
|
-
|
|
5014
|
+
}
|
|
5015
|
+
class DockviewGroupPanelModel extends CompositeDisposable {
|
|
5016
|
+
get element() {
|
|
5017
|
+
throw new Error('not supported');
|
|
5047
5018
|
}
|
|
5048
|
-
get
|
|
5049
|
-
return this.
|
|
5019
|
+
get activePanel() {
|
|
5020
|
+
return this._activePanel;
|
|
5050
5021
|
}
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
this.id = id;
|
|
5054
|
-
this.component = component;
|
|
5055
|
-
this._isFocused = false;
|
|
5056
|
-
this._isActive = false;
|
|
5057
|
-
this._isVisible = true;
|
|
5058
|
-
this._width = 0;
|
|
5059
|
-
this._height = 0;
|
|
5060
|
-
this._parameters = {};
|
|
5061
|
-
this.panelUpdatesDisposable = new MutableDisposable();
|
|
5062
|
-
this._onDidDimensionChange = new Emitter();
|
|
5063
|
-
this.onDidDimensionsChange = this._onDidDimensionChange.event;
|
|
5064
|
-
this._onDidChangeFocus = new Emitter();
|
|
5065
|
-
this.onDidFocusChange = this._onDidChangeFocus.event;
|
|
5066
|
-
//
|
|
5067
|
-
this._onWillFocus = new Emitter();
|
|
5068
|
-
this.onWillFocus = this._onWillFocus.event;
|
|
5069
|
-
//
|
|
5070
|
-
this._onDidVisibilityChange = new Emitter();
|
|
5071
|
-
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
5072
|
-
this._onWillVisibilityChange = new Emitter();
|
|
5073
|
-
this.onWillVisibilityChange = this._onWillVisibilityChange.event;
|
|
5074
|
-
this._onDidActiveChange = new Emitter();
|
|
5075
|
-
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
5076
|
-
this._onActiveChange = new Emitter();
|
|
5077
|
-
this.onActiveChange = this._onActiveChange.event;
|
|
5078
|
-
this._onDidParametersChange = new Emitter();
|
|
5079
|
-
this.onDidParametersChange = this._onDidParametersChange.event;
|
|
5080
|
-
this.addDisposables(this.onDidFocusChange((event) => {
|
|
5081
|
-
this._isFocused = event.isFocused;
|
|
5082
|
-
}), this.onDidActiveChange((event) => {
|
|
5083
|
-
this._isActive = event.isActive;
|
|
5084
|
-
}), this.onDidVisibilityChange((event) => {
|
|
5085
|
-
this._isVisible = event.isVisible;
|
|
5086
|
-
}), this.onDidDimensionsChange((event) => {
|
|
5087
|
-
this._width = event.width;
|
|
5088
|
-
this._height = event.height;
|
|
5089
|
-
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onWillFocus, this._onWillVisibilityChange, this._onDidParametersChange);
|
|
5022
|
+
get locked() {
|
|
5023
|
+
return this._locked;
|
|
5090
5024
|
}
|
|
5091
|
-
|
|
5092
|
-
|
|
5025
|
+
set locked(value) {
|
|
5026
|
+
this._locked = value;
|
|
5027
|
+
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
5093
5028
|
}
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
this._parameters = parameters;
|
|
5097
|
-
panel.update({
|
|
5098
|
-
params: parameters,
|
|
5099
|
-
});
|
|
5100
|
-
});
|
|
5029
|
+
get isActive() {
|
|
5030
|
+
return this._isGroupActive;
|
|
5101
5031
|
}
|
|
5102
|
-
|
|
5103
|
-
this.
|
|
5032
|
+
get panels() {
|
|
5033
|
+
return this._panels;
|
|
5104
5034
|
}
|
|
5105
|
-
|
|
5106
|
-
this.
|
|
5035
|
+
get size() {
|
|
5036
|
+
return this._panels.length;
|
|
5107
5037
|
}
|
|
5108
|
-
|
|
5109
|
-
this.
|
|
5038
|
+
get isEmpty() {
|
|
5039
|
+
return this._panels.length === 0;
|
|
5110
5040
|
}
|
|
5111
|
-
|
|
5112
|
-
|
|
5113
|
-
class SplitviewPanelApiImpl extends PanelApiImpl {
|
|
5114
|
-
//
|
|
5115
|
-
constructor(id, component) {
|
|
5116
|
-
super(id, component);
|
|
5117
|
-
this._onDidConstraintsChangeInternal = new Emitter();
|
|
5118
|
-
this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
|
|
5119
|
-
//
|
|
5120
|
-
this._onDidConstraintsChange = new Emitter({
|
|
5121
|
-
replay: true,
|
|
5122
|
-
});
|
|
5123
|
-
this.onDidConstraintsChange = this._onDidConstraintsChange.event;
|
|
5124
|
-
//
|
|
5125
|
-
this._onDidSizeChange = new Emitter();
|
|
5126
|
-
this.onDidSizeChange = this._onDidSizeChange.event;
|
|
5127
|
-
this.addDisposables(this._onDidConstraintsChangeInternal, this._onDidConstraintsChange, this._onDidSizeChange);
|
|
5041
|
+
get hasWatermark() {
|
|
5042
|
+
return !!(this.watermark && this.container.contains(this.watermark.element));
|
|
5128
5043
|
}
|
|
5129
|
-
|
|
5130
|
-
this.
|
|
5044
|
+
get header() {
|
|
5045
|
+
return this.tabsContainer;
|
|
5131
5046
|
}
|
|
5132
|
-
|
|
5133
|
-
|
|
5047
|
+
get isContentFocused() {
|
|
5048
|
+
if (!document.activeElement) {
|
|
5049
|
+
return false;
|
|
5050
|
+
}
|
|
5051
|
+
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
5134
5052
|
}
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
class PaneviewPanelApiImpl extends SplitviewPanelApiImpl {
|
|
5138
|
-
set pane(pane) {
|
|
5139
|
-
this._pane = pane;
|
|
5053
|
+
get location() {
|
|
5054
|
+
return this._location;
|
|
5140
5055
|
}
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
this.
|
|
5144
|
-
|
|
5056
|
+
set location(value) {
|
|
5057
|
+
this._location = value;
|
|
5058
|
+
toggleClass(this.container, 'dv-groupview-floating', false);
|
|
5059
|
+
toggleClass(this.container, 'dv-groupview-popout', false);
|
|
5060
|
+
switch (value.type) {
|
|
5061
|
+
case 'grid':
|
|
5062
|
+
this.contentContainer.dropTarget.setTargetZones([
|
|
5063
|
+
'top',
|
|
5064
|
+
'bottom',
|
|
5065
|
+
'left',
|
|
5066
|
+
'right',
|
|
5067
|
+
'center',
|
|
5068
|
+
]);
|
|
5069
|
+
break;
|
|
5070
|
+
case 'floating':
|
|
5071
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
5072
|
+
this.contentContainer.dropTarget.setTargetZones(value
|
|
5073
|
+
? ['center']
|
|
5074
|
+
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
5075
|
+
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
5076
|
+
break;
|
|
5077
|
+
case 'popout':
|
|
5078
|
+
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
5079
|
+
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
5080
|
+
break;
|
|
5081
|
+
}
|
|
5082
|
+
this.groupPanel.api._onDidLocationChange.fire({
|
|
5083
|
+
location: this.location,
|
|
5145
5084
|
});
|
|
5146
|
-
this.onDidExpansionChange = this._onDidExpansionChange.event;
|
|
5147
|
-
this._onMouseEnter = new Emitter({});
|
|
5148
|
-
this.onMouseEnter = this._onMouseEnter.event;
|
|
5149
|
-
this._onMouseLeave = new Emitter({});
|
|
5150
|
-
this.onMouseLeave = this._onMouseLeave.event;
|
|
5151
|
-
this.addDisposables(this._onDidExpansionChange, this._onMouseEnter, this._onMouseLeave);
|
|
5152
|
-
}
|
|
5153
|
-
setExpanded(isExpanded) {
|
|
5154
|
-
var _a;
|
|
5155
|
-
(_a = this._pane) === null || _a === void 0 ? void 0 : _a.setExpanded(isExpanded);
|
|
5156
5085
|
}
|
|
5157
|
-
|
|
5086
|
+
constructor(container, accessor, id, options, groupPanel) {
|
|
5158
5087
|
var _a;
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5088
|
+
super();
|
|
5089
|
+
this.container = container;
|
|
5090
|
+
this.accessor = accessor;
|
|
5091
|
+
this.id = id;
|
|
5092
|
+
this.options = options;
|
|
5093
|
+
this.groupPanel = groupPanel;
|
|
5094
|
+
this._isGroupActive = false;
|
|
5095
|
+
this._locked = false;
|
|
5096
|
+
this._location = { type: 'grid' };
|
|
5097
|
+
this.mostRecentlyUsed = [];
|
|
5098
|
+
this._onDidChange = new Emitter();
|
|
5099
|
+
this.onDidChange = this._onDidChange.event;
|
|
5100
|
+
this._width = 0;
|
|
5101
|
+
this._height = 0;
|
|
5102
|
+
this._panels = [];
|
|
5103
|
+
this._panelDisposables = new Map();
|
|
5104
|
+
this._onMove = new Emitter();
|
|
5105
|
+
this.onMove = this._onMove.event;
|
|
5106
|
+
this._onDidDrop = new Emitter();
|
|
5107
|
+
this.onDidDrop = this._onDidDrop.event;
|
|
5108
|
+
this._onWillDrop = new Emitter();
|
|
5109
|
+
this.onWillDrop = this._onWillDrop.event;
|
|
5110
|
+
this._onWillShowOverlay = new Emitter();
|
|
5111
|
+
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
5112
|
+
this._onTabDragStart = new Emitter();
|
|
5113
|
+
this.onTabDragStart = this._onTabDragStart.event;
|
|
5114
|
+
this._onGroupDragStart = new Emitter();
|
|
5115
|
+
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
5116
|
+
this._onDidAddPanel = new Emitter();
|
|
5117
|
+
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
5118
|
+
this._onDidPanelTitleChange = new Emitter();
|
|
5119
|
+
this.onDidPanelTitleChange = this._onDidPanelTitleChange.event;
|
|
5120
|
+
this._onDidPanelParametersChange = new Emitter();
|
|
5121
|
+
this.onDidPanelParametersChange = this._onDidPanelParametersChange.event;
|
|
5122
|
+
this._onDidRemovePanel = new Emitter();
|
|
5123
|
+
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
5124
|
+
this._onDidActivePanelChange = new Emitter();
|
|
5125
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5126
|
+
this._onUnhandledDragOverEvent = new Emitter();
|
|
5127
|
+
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
5128
|
+
this._overwriteRenderContainer = null;
|
|
5129
|
+
toggleClass(this.container, 'groupview', true);
|
|
5130
|
+
this._api = new DockviewApi(this.accessor);
|
|
5131
|
+
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
5132
|
+
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
5133
|
+
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
5134
|
+
this.header.hidden = !!options.hideHeader;
|
|
5135
|
+
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
5136
|
+
this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
5137
|
+
this._onTabDragStart.fire(event);
|
|
5138
|
+
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
5139
|
+
this._onGroupDragStart.fire(event);
|
|
5140
|
+
}), this.tabsContainer.onDrop((event) => {
|
|
5141
|
+
this.handleDropEvent('header', event.event, 'center', event.index);
|
|
5142
|
+
}), this.contentContainer.onDidFocus(() => {
|
|
5143
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5144
|
+
}), this.contentContainer.onDidBlur(() => {
|
|
5145
|
+
// noop
|
|
5146
|
+
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
5147
|
+
this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
5148
|
+
}), this.tabsContainer.onWillShowOverlay((event) => {
|
|
5149
|
+
this._onWillShowOverlay.fire(event);
|
|
5150
|
+
}), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
|
|
5151
|
+
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
5152
|
+
kind: 'content',
|
|
5153
|
+
panel: this.activePanel,
|
|
5154
|
+
api: this._api,
|
|
5155
|
+
group: this.groupPanel,
|
|
5156
|
+
getData: getPanelData,
|
|
5157
|
+
}));
|
|
5158
|
+
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange, this._onUnhandledDragOverEvent);
|
|
5166
5159
|
}
|
|
5167
|
-
|
|
5168
|
-
|
|
5160
|
+
focusContent() {
|
|
5161
|
+
this.contentContainer.element.focus();
|
|
5169
5162
|
}
|
|
5170
|
-
|
|
5171
|
-
|
|
5163
|
+
set renderContainer(value) {
|
|
5164
|
+
this.panels.forEach((panel) => {
|
|
5165
|
+
this.renderContainer.detatch(panel);
|
|
5166
|
+
});
|
|
5167
|
+
this._overwriteRenderContainer = value;
|
|
5168
|
+
this.panels.forEach((panel) => {
|
|
5169
|
+
this.rerender(panel);
|
|
5170
|
+
});
|
|
5172
5171
|
}
|
|
5173
|
-
get
|
|
5172
|
+
get renderContainer() {
|
|
5174
5173
|
var _a;
|
|
5175
|
-
return (_a = this.
|
|
5176
|
-
}
|
|
5177
|
-
constructor(id, component, api) {
|
|
5178
|
-
super();
|
|
5179
|
-
this.id = id;
|
|
5180
|
-
this.component = component;
|
|
5181
|
-
this.api = api;
|
|
5182
|
-
this._height = 0;
|
|
5183
|
-
this._width = 0;
|
|
5184
|
-
this._element = document.createElement('div');
|
|
5185
|
-
this._element.tabIndex = -1;
|
|
5186
|
-
this._element.style.outline = 'none';
|
|
5187
|
-
this._element.style.height = '100%';
|
|
5188
|
-
this._element.style.width = '100%';
|
|
5189
|
-
this._element.style.overflow = 'hidden';
|
|
5190
|
-
const focusTracker = trackFocus(this._element);
|
|
5191
|
-
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
5192
|
-
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
5193
|
-
}), focusTracker.onDidBlur(() => {
|
|
5194
|
-
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
5195
|
-
}), focusTracker);
|
|
5174
|
+
return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
|
|
5196
5175
|
}
|
|
5197
|
-
|
|
5198
|
-
|
|
5199
|
-
|
|
5200
|
-
|
|
5201
|
-
|
|
5176
|
+
initialize() {
|
|
5177
|
+
if (this.options.panels) {
|
|
5178
|
+
this.options.panels.forEach((panel) => {
|
|
5179
|
+
this.doAddPanel(panel);
|
|
5180
|
+
});
|
|
5202
5181
|
}
|
|
5203
|
-
this.
|
|
5204
|
-
|
|
5205
|
-
|
|
5206
|
-
this.
|
|
5207
|
-
|
|
5208
|
-
this.
|
|
5209
|
-
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5182
|
+
if (this.options.activePanel) {
|
|
5183
|
+
this.openPanel(this.options.activePanel);
|
|
5184
|
+
}
|
|
5185
|
+
// must be run after the constructor otherwise this.parent may not be
|
|
5186
|
+
// correctly initialized
|
|
5187
|
+
this.setActive(this.isActive, true);
|
|
5188
|
+
this.updateContainer();
|
|
5189
|
+
if (this.accessor.options.createRightHeaderActionComponent) {
|
|
5190
|
+
this._rightHeaderActions =
|
|
5191
|
+
this.accessor.options.createRightHeaderActionComponent(this.groupPanel);
|
|
5192
|
+
this.addDisposables(this._rightHeaderActions);
|
|
5193
|
+
this._rightHeaderActions.init({
|
|
5194
|
+
containerApi: this._api,
|
|
5195
|
+
api: this.groupPanel.api,
|
|
5196
|
+
group: this.groupPanel,
|
|
5197
|
+
});
|
|
5198
|
+
this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
|
|
5199
|
+
}
|
|
5200
|
+
if (this.accessor.options.createLeftHeaderActionComponent) {
|
|
5201
|
+
this._leftHeaderActions =
|
|
5202
|
+
this.accessor.options.createLeftHeaderActionComponent(this.groupPanel);
|
|
5203
|
+
this.addDisposables(this._leftHeaderActions);
|
|
5204
|
+
this._leftHeaderActions.init({
|
|
5205
|
+
containerApi: this._api,
|
|
5206
|
+
api: this.groupPanel.api,
|
|
5207
|
+
group: this.groupPanel,
|
|
5208
|
+
});
|
|
5209
|
+
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
5210
|
+
}
|
|
5211
|
+
if (this.accessor.options.createPrefixHeaderActionComponent) {
|
|
5212
|
+
this._prefixHeaderActions =
|
|
5213
|
+
this.accessor.options.createPrefixHeaderActionComponent(this.groupPanel);
|
|
5214
|
+
this.addDisposables(this._prefixHeaderActions);
|
|
5215
|
+
this._prefixHeaderActions.init({
|
|
5216
|
+
containerApi: this._api,
|
|
5217
|
+
api: this.groupPanel.api,
|
|
5218
|
+
group: this.groupPanel,
|
|
5219
|
+
});
|
|
5220
|
+
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
5213
5221
|
}
|
|
5214
5222
|
}
|
|
5215
|
-
|
|
5216
|
-
this.
|
|
5217
|
-
this.part = this.getComponent();
|
|
5223
|
+
rerender(panel) {
|
|
5224
|
+
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
5218
5225
|
}
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
// merge the new parameters with the existing parameters
|
|
5222
|
-
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) });
|
|
5223
|
-
/**
|
|
5224
|
-
* delete new keys that have a value of undefined,
|
|
5225
|
-
* allow values of null
|
|
5226
|
-
*/
|
|
5227
|
-
for (const key of Object.keys(event.params)) {
|
|
5228
|
-
if (event.params[key] === undefined) {
|
|
5229
|
-
delete this._params.params[key];
|
|
5230
|
-
}
|
|
5231
|
-
}
|
|
5232
|
-
// update the view with the updated props
|
|
5233
|
-
(_b = this.part) === null || _b === void 0 ? void 0 : _b.update({ params: this._params.params });
|
|
5226
|
+
indexOf(panel) {
|
|
5227
|
+
return this.tabsContainer.indexOf(panel.id);
|
|
5234
5228
|
}
|
|
5235
5229
|
toJSON() {
|
|
5236
|
-
var _a
|
|
5237
|
-
const
|
|
5238
|
-
|
|
5230
|
+
var _a;
|
|
5231
|
+
const result = {
|
|
5232
|
+
views: this.tabsContainer.panels,
|
|
5233
|
+
activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
|
|
5239
5234
|
id: this.id,
|
|
5240
|
-
component: this.component,
|
|
5241
|
-
params: Object.keys(params).length > 0 ? params : undefined,
|
|
5242
5235
|
};
|
|
5236
|
+
if (this.locked !== false) {
|
|
5237
|
+
result.locked = this.locked;
|
|
5238
|
+
}
|
|
5239
|
+
if (this.header.hidden) {
|
|
5240
|
+
result.hideHeader = true;
|
|
5241
|
+
}
|
|
5242
|
+
return result;
|
|
5243
5243
|
}
|
|
5244
|
-
|
|
5245
|
-
|
|
5246
|
-
|
|
5247
|
-
|
|
5248
|
-
|
|
5249
|
-
|
|
5250
|
-
|
|
5251
|
-
|
|
5252
|
-
|
|
5253
|
-
|
|
5254
|
-
|
|
5255
|
-
|
|
5256
|
-
|
|
5257
|
-
|
|
5258
|
-
|
|
5259
|
-
|
|
5260
|
-
|
|
5261
|
-
|
|
5262
|
-
|
|
5263
|
-
return headerSize + minimumBodySize;
|
|
5264
|
-
}
|
|
5265
|
-
get maximumSize() {
|
|
5266
|
-
const headerSize = this.headerSize;
|
|
5267
|
-
const expanded = this.isExpanded();
|
|
5268
|
-
const maximumBodySize = expanded ? this._maximumBodySize : 0;
|
|
5269
|
-
return headerSize + maximumBodySize;
|
|
5270
|
-
}
|
|
5271
|
-
get size() {
|
|
5272
|
-
return this._size;
|
|
5273
|
-
}
|
|
5274
|
-
get orthogonalSize() {
|
|
5275
|
-
return this._orthogonalSize;
|
|
5276
|
-
}
|
|
5277
|
-
set orthogonalSize(size) {
|
|
5278
|
-
this._orthogonalSize = size;
|
|
5279
|
-
}
|
|
5280
|
-
get minimumBodySize() {
|
|
5281
|
-
return this._minimumBodySize;
|
|
5282
|
-
}
|
|
5283
|
-
set minimumBodySize(value) {
|
|
5284
|
-
this._minimumBodySize = typeof value === 'number' ? value : 0;
|
|
5285
|
-
}
|
|
5286
|
-
get maximumBodySize() {
|
|
5287
|
-
return this._maximumBodySize;
|
|
5288
|
-
}
|
|
5289
|
-
set maximumBodySize(value) {
|
|
5290
|
-
this._maximumBodySize =
|
|
5291
|
-
typeof value === 'number' ? value : Number.POSITIVE_INFINITY;
|
|
5292
|
-
}
|
|
5293
|
-
get headerVisible() {
|
|
5294
|
-
return this._headerVisible;
|
|
5295
|
-
}
|
|
5296
|
-
set headerVisible(value) {
|
|
5297
|
-
this._headerVisible = value;
|
|
5298
|
-
this.header.style.display = value ? '' : 'none';
|
|
5244
|
+
moveToNext(options) {
|
|
5245
|
+
if (!options) {
|
|
5246
|
+
options = {};
|
|
5247
|
+
}
|
|
5248
|
+
if (!options.panel) {
|
|
5249
|
+
options.panel = this.activePanel;
|
|
5250
|
+
}
|
|
5251
|
+
const index = options.panel ? this.panels.indexOf(options.panel) : -1;
|
|
5252
|
+
let normalizedIndex;
|
|
5253
|
+
if (index < this.panels.length - 1) {
|
|
5254
|
+
normalizedIndex = index + 1;
|
|
5255
|
+
}
|
|
5256
|
+
else if (!options.suppressRoll) {
|
|
5257
|
+
normalizedIndex = 0;
|
|
5258
|
+
}
|
|
5259
|
+
else {
|
|
5260
|
+
return;
|
|
5261
|
+
}
|
|
5262
|
+
this.openPanel(this.panels[normalizedIndex]);
|
|
5299
5263
|
}
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
this.
|
|
5322
|
-
const { isVisible } = event;
|
|
5323
|
-
const { accessor } = this._params;
|
|
5324
|
-
accessor.setVisible(this, isVisible);
|
|
5325
|
-
}), this.api.onDidSizeChange((event) => {
|
|
5326
|
-
this._onDidChange.fire({ size: event.size });
|
|
5327
|
-
}), addDisposableListener(this.element, 'mouseenter', (ev) => {
|
|
5328
|
-
this.api._onMouseEnter.fire(ev);
|
|
5329
|
-
}), addDisposableListener(this.element, 'mouseleave', (ev) => {
|
|
5330
|
-
this.api._onMouseLeave.fire(ev);
|
|
5331
|
-
}));
|
|
5332
|
-
this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
|
|
5333
|
-
this.api._onDidExpansionChange.fire({
|
|
5334
|
-
isExpanded: isPanelExpanded,
|
|
5335
|
-
});
|
|
5336
|
-
}), this.api.onDidFocusChange((e) => {
|
|
5337
|
-
if (!this.header) {
|
|
5338
|
-
return;
|
|
5339
|
-
}
|
|
5340
|
-
if (e.isFocused) {
|
|
5341
|
-
addClasses(this.header, 'focused');
|
|
5342
|
-
}
|
|
5343
|
-
else {
|
|
5344
|
-
removeClasses(this.header, 'focused');
|
|
5345
|
-
}
|
|
5346
|
-
}));
|
|
5347
|
-
this.renderOnce();
|
|
5264
|
+
moveToPrevious(options) {
|
|
5265
|
+
if (!options) {
|
|
5266
|
+
options = {};
|
|
5267
|
+
}
|
|
5268
|
+
if (!options.panel) {
|
|
5269
|
+
options.panel = this.activePanel;
|
|
5270
|
+
}
|
|
5271
|
+
if (!options.panel) {
|
|
5272
|
+
return;
|
|
5273
|
+
}
|
|
5274
|
+
const index = this.panels.indexOf(options.panel);
|
|
5275
|
+
let normalizedIndex;
|
|
5276
|
+
if (index > 0) {
|
|
5277
|
+
normalizedIndex = index - 1;
|
|
5278
|
+
}
|
|
5279
|
+
else if (!options.suppressRoll) {
|
|
5280
|
+
normalizedIndex = this.panels.length - 1;
|
|
5281
|
+
}
|
|
5282
|
+
else {
|
|
5283
|
+
return;
|
|
5284
|
+
}
|
|
5285
|
+
this.openPanel(this.panels[normalizedIndex]);
|
|
5348
5286
|
}
|
|
5349
|
-
|
|
5350
|
-
this.
|
|
5287
|
+
containsPanel(panel) {
|
|
5288
|
+
return this.panels.includes(panel);
|
|
5351
5289
|
}
|
|
5352
|
-
|
|
5353
|
-
|
|
5290
|
+
init(_params) {
|
|
5291
|
+
//noop
|
|
5354
5292
|
}
|
|
5355
|
-
|
|
5356
|
-
|
|
5293
|
+
update(_params) {
|
|
5294
|
+
//noop
|
|
5357
5295
|
}
|
|
5358
|
-
|
|
5359
|
-
|
|
5296
|
+
focus() {
|
|
5297
|
+
var _a;
|
|
5298
|
+
(_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
|
|
5299
|
+
}
|
|
5300
|
+
openPanel(panel, options = {}) {
|
|
5301
|
+
/**
|
|
5302
|
+
* set the panel group
|
|
5303
|
+
* add the panel
|
|
5304
|
+
* check if group active
|
|
5305
|
+
* check if panel active
|
|
5306
|
+
*/
|
|
5307
|
+
if (typeof options.index !== 'number' ||
|
|
5308
|
+
options.index > this.panels.length) {
|
|
5309
|
+
options.index = this.panels.length;
|
|
5310
|
+
}
|
|
5311
|
+
const skipSetActive = !!options.skipSetActive;
|
|
5312
|
+
// ensure the group is updated before we fire any events
|
|
5313
|
+
panel.updateParentGroup(this.groupPanel, {
|
|
5314
|
+
skipSetActive: options.skipSetActive,
|
|
5315
|
+
});
|
|
5316
|
+
this.doAddPanel(panel, options.index, {
|
|
5317
|
+
skipSetActive: skipSetActive,
|
|
5318
|
+
});
|
|
5319
|
+
if (this._activePanel === panel) {
|
|
5320
|
+
this.contentContainer.renderPanel(panel, { asActive: true });
|
|
5360
5321
|
return;
|
|
5361
5322
|
}
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5323
|
+
if (!skipSetActive) {
|
|
5324
|
+
this.doSetActivePanel(panel);
|
|
5325
|
+
}
|
|
5326
|
+
if (!options.skipSetGroupActive) {
|
|
5327
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5328
|
+
}
|
|
5329
|
+
if (!options.skipSetActive) {
|
|
5330
|
+
this.updateContainer();
|
|
5331
|
+
}
|
|
5332
|
+
}
|
|
5333
|
+
removePanel(groupItemOrId, options = {
|
|
5334
|
+
skipSetActive: false,
|
|
5335
|
+
}) {
|
|
5336
|
+
const id = typeof groupItemOrId === 'string'
|
|
5337
|
+
? groupItemOrId
|
|
5338
|
+
: groupItemOrId.id;
|
|
5339
|
+
const panelToRemove = this._panels.find((panel) => panel.id === id);
|
|
5340
|
+
if (!panelToRemove) {
|
|
5341
|
+
throw new Error('invalid operation');
|
|
5342
|
+
}
|
|
5343
|
+
return this._removePanel(panelToRemove, options);
|
|
5344
|
+
}
|
|
5345
|
+
closeAllPanels() {
|
|
5346
|
+
if (this.panels.length > 0) {
|
|
5347
|
+
// take a copy since we will be edting the array as we iterate through
|
|
5348
|
+
const arrPanelCpy = [...this.panels];
|
|
5349
|
+
for (const panel of arrPanelCpy) {
|
|
5350
|
+
this.doClose(panel);
|
|
5369
5351
|
}
|
|
5370
5352
|
}
|
|
5371
5353
|
else {
|
|
5372
|
-
this.
|
|
5373
|
-
var _a;
|
|
5374
|
-
(_a = this.body) === null || _a === void 0 ? void 0 : _a.remove();
|
|
5375
|
-
}, 200);
|
|
5354
|
+
this.accessor.removeGroup(this.groupPanel);
|
|
5376
5355
|
}
|
|
5377
|
-
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
5378
|
-
this._onDidChangeExpansionState.fire(expanded);
|
|
5379
5356
|
}
|
|
5380
|
-
|
|
5381
|
-
this.
|
|
5382
|
-
|
|
5383
|
-
|
|
5384
|
-
|
|
5385
|
-
|
|
5386
|
-
|
|
5387
|
-
|
|
5357
|
+
closePanel(panel) {
|
|
5358
|
+
this.doClose(panel);
|
|
5359
|
+
}
|
|
5360
|
+
doClose(panel) {
|
|
5361
|
+
this.accessor.removePanel(panel);
|
|
5362
|
+
}
|
|
5363
|
+
isPanelActive(panel) {
|
|
5364
|
+
return this._activePanel === panel;
|
|
5365
|
+
}
|
|
5366
|
+
updateActions(element) {
|
|
5367
|
+
this.tabsContainer.setRightActionsElement(element);
|
|
5368
|
+
}
|
|
5369
|
+
setActive(isGroupActive, force = false) {
|
|
5370
|
+
if (!force && this.isActive === isGroupActive) {
|
|
5371
|
+
return;
|
|
5388
5372
|
}
|
|
5389
|
-
|
|
5373
|
+
this._isGroupActive = isGroupActive;
|
|
5374
|
+
toggleClass(this.container, 'active-group', isGroupActive);
|
|
5375
|
+
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
5376
|
+
this.tabsContainer.setActive(this.isActive);
|
|
5377
|
+
if (!this._activePanel && this.panels.length > 0) {
|
|
5378
|
+
this.doSetActivePanel(this.panels[0]);
|
|
5379
|
+
}
|
|
5380
|
+
this.updateContainer();
|
|
5390
5381
|
}
|
|
5391
|
-
|
|
5392
|
-
var _a
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5382
|
+
layout(width, height) {
|
|
5383
|
+
var _a;
|
|
5384
|
+
this._width = width;
|
|
5385
|
+
this._height = height;
|
|
5386
|
+
this.contentContainer.layout(this._width, this._height);
|
|
5387
|
+
if ((_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.layout) {
|
|
5388
|
+
this._activePanel.layout(this._width, this._height);
|
|
5396
5389
|
}
|
|
5397
|
-
|
|
5398
|
-
|
|
5390
|
+
}
|
|
5391
|
+
_removePanel(panel, options) {
|
|
5392
|
+
const isActivePanel = this._activePanel === panel;
|
|
5393
|
+
this.doRemovePanel(panel);
|
|
5394
|
+
if (isActivePanel && this.panels.length > 0) {
|
|
5395
|
+
const nextPanel = this.mostRecentlyUsed[0];
|
|
5396
|
+
this.openPanel(nextPanel, {
|
|
5397
|
+
skipSetActive: options.skipSetActive,
|
|
5398
|
+
skipSetGroupActive: options.skipSetActiveGroup,
|
|
5399
|
+
});
|
|
5399
5400
|
}
|
|
5400
|
-
this.
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
(_b = this.header) === null || _b === void 0 ? void 0 : _b.append(this.headerPart.element);
|
|
5406
|
-
if (typeof parameters.isExpanded === 'boolean') {
|
|
5407
|
-
this.setExpanded(parameters.isExpanded);
|
|
5401
|
+
if (this._activePanel && this.panels.length === 0) {
|
|
5402
|
+
this.doSetActivePanel(undefined);
|
|
5403
|
+
}
|
|
5404
|
+
if (!options.skipSetActive) {
|
|
5405
|
+
this.updateContainer();
|
|
5408
5406
|
}
|
|
5407
|
+
return panel;
|
|
5409
5408
|
}
|
|
5410
|
-
|
|
5411
|
-
const
|
|
5412
|
-
|
|
5409
|
+
doRemovePanel(panel) {
|
|
5410
|
+
const index = this.panels.indexOf(panel);
|
|
5411
|
+
if (this._activePanel === panel) {
|
|
5412
|
+
this.contentContainer.closePanel();
|
|
5413
|
+
}
|
|
5414
|
+
this.tabsContainer.delete(panel.id);
|
|
5415
|
+
this._panels.splice(index, 1);
|
|
5416
|
+
if (this.mostRecentlyUsed.includes(panel)) {
|
|
5417
|
+
const index = this.mostRecentlyUsed.indexOf(panel);
|
|
5418
|
+
this.mostRecentlyUsed.splice(index, 1);
|
|
5419
|
+
}
|
|
5420
|
+
const disposable = this._panelDisposables.get(panel.id);
|
|
5421
|
+
if (disposable) {
|
|
5422
|
+
disposable.dispose();
|
|
5423
|
+
this._panelDisposables.delete(panel.id);
|
|
5424
|
+
}
|
|
5425
|
+
this._onDidRemovePanel.fire({ panel });
|
|
5413
5426
|
}
|
|
5414
|
-
|
|
5415
|
-
|
|
5416
|
-
|
|
5417
|
-
this.
|
|
5418
|
-
this.
|
|
5419
|
-
this.
|
|
5420
|
-
|
|
5421
|
-
|
|
5422
|
-
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
5427
|
+
doAddPanel(panel, index = this.panels.length, options = { skipSetActive: false }) {
|
|
5428
|
+
const existingPanel = this._panels.indexOf(panel);
|
|
5429
|
+
const hasExistingPanel = existingPanel > -1;
|
|
5430
|
+
this.tabsContainer.show();
|
|
5431
|
+
this.contentContainer.show();
|
|
5432
|
+
this.tabsContainer.openPanel(panel, index);
|
|
5433
|
+
if (!options.skipSetActive) {
|
|
5434
|
+
this.contentContainer.openPanel(panel);
|
|
5435
|
+
}
|
|
5436
|
+
if (hasExistingPanel) {
|
|
5437
|
+
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
5438
|
+
return;
|
|
5439
|
+
}
|
|
5440
|
+
this.updateMru(panel);
|
|
5441
|
+
this.panels.splice(index, 0, panel);
|
|
5442
|
+
this._panelDisposables.set(panel.id, new CompositeDisposable(panel.api.onDidTitleChange((event) => this._onDidPanelTitleChange.fire(event)), panel.api.onDidParametersChange((event) => this._onDidPanelParametersChange.fire(event))));
|
|
5443
|
+
this._onDidAddPanel.fire({ panel });
|
|
5426
5444
|
}
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
};
|
|
5445
|
+
doSetActivePanel(panel) {
|
|
5446
|
+
if (this._activePanel === panel) {
|
|
5447
|
+
return;
|
|
5448
|
+
}
|
|
5449
|
+
this._activePanel = panel;
|
|
5450
|
+
if (panel) {
|
|
5451
|
+
this.tabsContainer.setActivePanel(panel);
|
|
5452
|
+
panel.layout(this._width, this._height);
|
|
5453
|
+
this.updateMru(panel);
|
|
5454
|
+
this._onDidActivePanelChange.fire({
|
|
5455
|
+
panel,
|
|
5456
|
+
});
|
|
5457
|
+
}
|
|
5441
5458
|
}
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
|
|
5446
|
-
super(id, component, headerComponent, orientation, isExpanded, true);
|
|
5447
|
-
this.accessor = accessor;
|
|
5448
|
-
this._onDidDrop = new Emitter();
|
|
5449
|
-
this.onDidDrop = this._onDidDrop.event;
|
|
5450
|
-
if (!disableDnd) {
|
|
5451
|
-
this.initDragFeatures();
|
|
5459
|
+
updateMru(panel) {
|
|
5460
|
+
if (this.mostRecentlyUsed.includes(panel)) {
|
|
5461
|
+
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
5452
5462
|
}
|
|
5463
|
+
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
5453
5464
|
}
|
|
5454
|
-
|
|
5455
|
-
|
|
5465
|
+
updateContainer() {
|
|
5466
|
+
var _a, _b;
|
|
5467
|
+
toggleClass(this.container, 'empty', this.isEmpty);
|
|
5468
|
+
this.panels.forEach((panel) => panel.runEvents());
|
|
5469
|
+
if (this.isEmpty && !this.watermark) {
|
|
5470
|
+
const watermark = this.accessor.createWatermarkComponent();
|
|
5471
|
+
watermark.init({
|
|
5472
|
+
containerApi: this._api,
|
|
5473
|
+
group: this.groupPanel,
|
|
5474
|
+
});
|
|
5475
|
+
this.watermark = watermark;
|
|
5476
|
+
addDisposableListener(this.watermark.element, 'click', () => {
|
|
5477
|
+
if (!this.isActive) {
|
|
5478
|
+
this.accessor.doSetGroupActive(this.groupPanel);
|
|
5479
|
+
}
|
|
5480
|
+
});
|
|
5481
|
+
this.tabsContainer.hide();
|
|
5482
|
+
this.contentContainer.element.appendChild(this.watermark.element);
|
|
5483
|
+
this.watermark.updateParentGroup(this.groupPanel, true);
|
|
5484
|
+
}
|
|
5485
|
+
if (!this.isEmpty && this.watermark) {
|
|
5486
|
+
this.watermark.element.remove();
|
|
5487
|
+
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
5488
|
+
this.watermark = undefined;
|
|
5489
|
+
this.tabsContainer.show();
|
|
5490
|
+
}
|
|
5491
|
+
}
|
|
5492
|
+
canDisplayOverlay(event, position, target) {
|
|
5493
|
+
const firedEvent = new DockviewUnhandledDragOverEvent(event, target, position, getPanelData, this.accessor.getPanel(this.id));
|
|
5494
|
+
this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
5495
|
+
return firedEvent.isAccepted;
|
|
5496
|
+
}
|
|
5497
|
+
handleDropEvent(type, event, position, index) {
|
|
5498
|
+
if (this.locked === 'no-drop-target') {
|
|
5456
5499
|
return;
|
|
5457
5500
|
}
|
|
5458
|
-
|
|
5459
|
-
|
|
5460
|
-
|
|
5461
|
-
|
|
5462
|
-
|
|
5463
|
-
|
|
5464
|
-
return {
|
|
5465
|
-
dispose: () => {
|
|
5466
|
-
LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
|
|
5467
|
-
},
|
|
5468
|
-
};
|
|
5501
|
+
function getKind() {
|
|
5502
|
+
switch (type) {
|
|
5503
|
+
case 'header':
|
|
5504
|
+
return typeof index === 'number' ? 'tab' : 'header_space';
|
|
5505
|
+
case 'content':
|
|
5506
|
+
return 'content';
|
|
5469
5507
|
}
|
|
5470
|
-
}
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
data.viewId === this.accessor.id) {
|
|
5481
|
-
return true;
|
|
5482
|
-
}
|
|
5483
|
-
}
|
|
5484
|
-
if (this.accessor.options.showDndOverlay) {
|
|
5485
|
-
return this.accessor.options.showDndOverlay({
|
|
5486
|
-
nativeEvent: event,
|
|
5487
|
-
getData: getPaneData,
|
|
5488
|
-
panel: this,
|
|
5489
|
-
});
|
|
5490
|
-
}
|
|
5491
|
-
return false;
|
|
5492
|
-
},
|
|
5508
|
+
}
|
|
5509
|
+
const panel = typeof index === 'number' ? this.panels[index] : undefined;
|
|
5510
|
+
const willDropEvent = new DockviewWillDropEvent({
|
|
5511
|
+
nativeEvent: event,
|
|
5512
|
+
position,
|
|
5513
|
+
panel,
|
|
5514
|
+
getData: () => getPanelData(),
|
|
5515
|
+
kind: getKind(),
|
|
5516
|
+
group: this.groupPanel,
|
|
5517
|
+
api: this._api,
|
|
5493
5518
|
});
|
|
5494
|
-
this.
|
|
5495
|
-
|
|
5496
|
-
}));
|
|
5497
|
-
}
|
|
5498
|
-
onDrop(event) {
|
|
5499
|
-
const data = getPaneData();
|
|
5500
|
-
if (!data || data.viewId !== this.accessor.id) {
|
|
5501
|
-
// if there is no local drag event for this panel
|
|
5502
|
-
// or if the drag event was creating by another Paneview instance
|
|
5503
|
-
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { panel: this, api: new PaneviewApi(this.accessor), getData: getPaneData }));
|
|
5519
|
+
this._onWillDrop.fire(willDropEvent);
|
|
5520
|
+
if (willDropEvent.defaultPrevented) {
|
|
5504
5521
|
return;
|
|
5505
5522
|
}
|
|
5506
|
-
const
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
5510
|
-
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5523
|
+
const data = getPanelData();
|
|
5524
|
+
if (data && data.viewId === this.accessor.id) {
|
|
5525
|
+
if (data.panelId === null) {
|
|
5526
|
+
// this is a group move dnd event
|
|
5527
|
+
const { groupId } = data;
|
|
5528
|
+
this._onMove.fire({
|
|
5529
|
+
target: position,
|
|
5530
|
+
groupId: groupId,
|
|
5531
|
+
index,
|
|
5532
|
+
});
|
|
5533
|
+
return;
|
|
5534
|
+
}
|
|
5535
|
+
const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
|
|
5536
|
+
if (fromSameGroup && this.tabsContainer.size === 1) {
|
|
5537
|
+
return;
|
|
5538
|
+
}
|
|
5539
|
+
const { groupId, panelId } = data;
|
|
5540
|
+
const isSameGroup = this.id === groupId;
|
|
5541
|
+
if (isSameGroup && !position) {
|
|
5542
|
+
const oldIndex = this.tabsContainer.indexOf(panelId);
|
|
5543
|
+
if (oldIndex === index) {
|
|
5544
|
+
return;
|
|
5545
|
+
}
|
|
5546
|
+
}
|
|
5547
|
+
this._onMove.fire({
|
|
5548
|
+
target: position,
|
|
5549
|
+
groupId: data.groupId,
|
|
5550
|
+
itemId: data.panelId,
|
|
5551
|
+
index,
|
|
5552
|
+
});
|
|
5514
5553
|
}
|
|
5515
|
-
|
|
5516
|
-
|
|
5517
|
-
|
|
5518
|
-
|
|
5519
|
-
|
|
5554
|
+
else {
|
|
5555
|
+
this._onDidDrop.fire(new DockviewDidDropEvent({
|
|
5556
|
+
nativeEvent: event,
|
|
5557
|
+
position,
|
|
5558
|
+
panel,
|
|
5559
|
+
getData: () => getPanelData(),
|
|
5560
|
+
group: this.groupPanel,
|
|
5561
|
+
api: this._api,
|
|
5562
|
+
}));
|
|
5520
5563
|
}
|
|
5521
|
-
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5564
|
+
}
|
|
5565
|
+
dispose() {
|
|
5566
|
+
var _a, _b, _c;
|
|
5567
|
+
super.dispose();
|
|
5568
|
+
(_a = this.watermark) === null || _a === void 0 ? void 0 : _a.element.remove();
|
|
5569
|
+
(_c = (_b = this.watermark) === null || _b === void 0 ? void 0 : _b.dispose) === null || _c === void 0 ? void 0 : _c.call(_b);
|
|
5570
|
+
this.watermark = undefined;
|
|
5571
|
+
for (const panel of this.panels) {
|
|
5572
|
+
panel.dispose();
|
|
5526
5573
|
}
|
|
5527
|
-
|
|
5574
|
+
this.tabsContainer.dispose();
|
|
5575
|
+
this.contentContainer.dispose();
|
|
5528
5576
|
}
|
|
5529
5577
|
}
|
|
5530
5578
|
|
|
@@ -5711,9 +5759,12 @@
|
|
|
5711
5759
|
constructor(id, accessor) {
|
|
5712
5760
|
super(id, '__dockviewgroup__');
|
|
5713
5761
|
this.accessor = accessor;
|
|
5762
|
+
this._mutableDisposable = new MutableDisposable();
|
|
5714
5763
|
this._onDidLocationChange = new Emitter();
|
|
5715
5764
|
this.onDidLocationChange = this._onDidLocationChange.event;
|
|
5716
|
-
this.
|
|
5765
|
+
this._onDidActivePanelChange = new Emitter();
|
|
5766
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5767
|
+
this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange, this._mutableDisposable);
|
|
5717
5768
|
}
|
|
5718
5769
|
close() {
|
|
5719
5770
|
if (!this._group) {
|
|
@@ -5771,6 +5822,19 @@
|
|
|
5771
5822
|
}
|
|
5772
5823
|
initialize(group) {
|
|
5773
5824
|
this._group = group;
|
|
5825
|
+
/**
|
|
5826
|
+
* TODO: Annoying initialization order caveat
|
|
5827
|
+
*
|
|
5828
|
+
* Due to the order on initialization we know that the model isn't defined until later in the same stack-frame of setup.
|
|
5829
|
+
* By queuing a microtask we can ensure the setup is completed within the same stack-frame, but after everything else has
|
|
5830
|
+
* finished ensuring the `model` is defined.
|
|
5831
|
+
*/
|
|
5832
|
+
queueMicrotask(() => {
|
|
5833
|
+
this._mutableDisposable.value =
|
|
5834
|
+
this._group.model.onDidActivePanelChange((event) => {
|
|
5835
|
+
this._onDidActivePanelChange.fire(event);
|
|
5836
|
+
});
|
|
5837
|
+
});
|
|
5774
5838
|
}
|
|
5775
5839
|
}
|
|
5776
5840
|
|
|
@@ -5831,31 +5895,6 @@
|
|
|
5831
5895
|
}
|
|
5832
5896
|
}
|
|
5833
5897
|
|
|
5834
|
-
function isPanelOptionsWithPanel(data) {
|
|
5835
|
-
if (data.referencePanel) {
|
|
5836
|
-
return true;
|
|
5837
|
-
}
|
|
5838
|
-
return false;
|
|
5839
|
-
}
|
|
5840
|
-
function isPanelOptionsWithGroup(data) {
|
|
5841
|
-
if (data.referenceGroup) {
|
|
5842
|
-
return true;
|
|
5843
|
-
}
|
|
5844
|
-
return false;
|
|
5845
|
-
}
|
|
5846
|
-
function isGroupOptionsWithPanel(data) {
|
|
5847
|
-
if (data.referencePanel) {
|
|
5848
|
-
return true;
|
|
5849
|
-
}
|
|
5850
|
-
return false;
|
|
5851
|
-
}
|
|
5852
|
-
function isGroupOptionsWithGroup(data) {
|
|
5853
|
-
if (data.referenceGroup) {
|
|
5854
|
-
return true;
|
|
5855
|
-
}
|
|
5856
|
-
return false;
|
|
5857
|
-
}
|
|
5858
|
-
|
|
5859
5898
|
class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
5860
5899
|
get location() {
|
|
5861
5900
|
return this.group.api.location;
|
|
@@ -6223,7 +6262,7 @@
|
|
|
6223
6262
|
this._tab = this.createTabComponent(this.id, tabComponent);
|
|
6224
6263
|
}
|
|
6225
6264
|
init(params) {
|
|
6226
|
-
this.content.init(
|
|
6265
|
+
this.content.init(params);
|
|
6227
6266
|
this.tab.init(params);
|
|
6228
6267
|
}
|
|
6229
6268
|
updateParentGroup(_group, _isPanelVisible) {
|
|
@@ -6244,20 +6283,29 @@
|
|
|
6244
6283
|
(_d = (_c = this.tab).dispose) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
6245
6284
|
}
|
|
6246
6285
|
createContentComponent(id, componentName) {
|
|
6247
|
-
|
|
6248
|
-
|
|
6286
|
+
return this.accessor.options.createComponent({
|
|
6287
|
+
id,
|
|
6288
|
+
name: componentName,
|
|
6289
|
+
});
|
|
6249
6290
|
}
|
|
6250
6291
|
createTabComponent(id, componentName) {
|
|
6251
|
-
|
|
6252
|
-
if (
|
|
6253
|
-
|
|
6254
|
-
|
|
6255
|
-
|
|
6256
|
-
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
|
|
6292
|
+
const name = componentName !== null && componentName !== void 0 ? componentName : this.accessor.options.defaultTabComponent;
|
|
6293
|
+
if (name) {
|
|
6294
|
+
if (this.accessor.options.createTabComponent) {
|
|
6295
|
+
const component = this.accessor.options.createTabComponent({
|
|
6296
|
+
id,
|
|
6297
|
+
name,
|
|
6298
|
+
});
|
|
6299
|
+
if (component) {
|
|
6300
|
+
return component;
|
|
6301
|
+
}
|
|
6302
|
+
else {
|
|
6303
|
+
return new DefaultTab();
|
|
6304
|
+
}
|
|
6305
|
+
}
|
|
6306
|
+
console.warn(`dockview: tabComponent '${componentName}' was not found. falling back to the default tab.`);
|
|
6260
6307
|
}
|
|
6308
|
+
return new DefaultTab();
|
|
6261
6309
|
}
|
|
6262
6310
|
}
|
|
6263
6311
|
|
|
@@ -7017,11 +7065,13 @@
|
|
|
7017
7065
|
return this._api;
|
|
7018
7066
|
}
|
|
7019
7067
|
constructor(options) {
|
|
7020
|
-
var _a
|
|
7068
|
+
var _a;
|
|
7021
7069
|
super({
|
|
7022
7070
|
proportionalLayout: true,
|
|
7023
|
-
orientation:
|
|
7024
|
-
styles: options.
|
|
7071
|
+
orientation: exports.Orientation.HORIZONTAL,
|
|
7072
|
+
styles: options.hideBorders
|
|
7073
|
+
? { separatorBorder: 'transparent' }
|
|
7074
|
+
: undefined,
|
|
7025
7075
|
parentElement: options.parentElement,
|
|
7026
7076
|
disableAutoResizing: options.disableAutoResizing,
|
|
7027
7077
|
locked: options.locked,
|
|
@@ -7039,6 +7089,8 @@
|
|
|
7039
7089
|
this.onWillDrop = this._onWillDrop.event;
|
|
7040
7090
|
this._onWillShowOverlay = new Emitter();
|
|
7041
7091
|
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
7092
|
+
this._onUnhandledDragOverEvent = new Emitter();
|
|
7093
|
+
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
7042
7094
|
this._onDidRemovePanel = new Emitter();
|
|
7043
7095
|
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
7044
7096
|
this._onDidAddPanel = new Emitter();
|
|
@@ -7064,7 +7116,7 @@
|
|
|
7064
7116
|
this.overlayRenderContainer = new OverlayRenderContainer(gready);
|
|
7065
7117
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
7066
7118
|
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
7067
|
-
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this.onDidAdd((event) => {
|
|
7119
|
+
this.addDisposables(this.overlayRenderContainer, this._onWillDragPanel, this._onWillDragGroup, this._onWillShowOverlay, this._onDidActivePanelChange, this._onDidAddPanel, this._onDidRemovePanel, this._onDidLayoutFromJSON, this._onDidDrop, this._onWillDrop, this._onDidMovePanel, this._onDidAddGroup, this._onDidRemoveGroup, this._onDidActiveGroupChange, this._onUnhandledDragOverEvent, this.onDidAdd((event) => {
|
|
7068
7120
|
if (!this._moving) {
|
|
7069
7121
|
this._onDidAddGroup.fire(event);
|
|
7070
7122
|
}
|
|
@@ -7091,22 +7143,6 @@
|
|
|
7091
7143
|
}
|
|
7092
7144
|
}));
|
|
7093
7145
|
this._options = options;
|
|
7094
|
-
if (!this.options.components) {
|
|
7095
|
-
this.options.components = {};
|
|
7096
|
-
}
|
|
7097
|
-
if (!this.options.frameworkComponents) {
|
|
7098
|
-
this.options.frameworkComponents = {};
|
|
7099
|
-
}
|
|
7100
|
-
if (!this.options.frameworkTabComponents) {
|
|
7101
|
-
this.options.frameworkTabComponents = {};
|
|
7102
|
-
}
|
|
7103
|
-
if (!this.options.tabComponents) {
|
|
7104
|
-
this.options.tabComponents = {};
|
|
7105
|
-
}
|
|
7106
|
-
if (!this.options.watermarkComponent &&
|
|
7107
|
-
!this.options.watermarkFrameworkComponent) {
|
|
7108
|
-
this.options.watermarkComponent = Watermark;
|
|
7109
|
-
}
|
|
7110
7146
|
this._rootDropTarget = new Droptarget(this.element, {
|
|
7111
7147
|
canDisplayOverlay: (event, position) => {
|
|
7112
7148
|
const data = getPanelData();
|
|
@@ -7121,26 +7157,20 @@
|
|
|
7121
7157
|
}
|
|
7122
7158
|
return true;
|
|
7123
7159
|
}
|
|
7124
|
-
if (this.
|
|
7125
|
-
|
|
7126
|
-
|
|
7127
|
-
|
|
7128
|
-
|
|
7129
|
-
|
|
7130
|
-
|
|
7131
|
-
return false;
|
|
7132
|
-
}
|
|
7133
|
-
return this.options.showDndOverlay({
|
|
7134
|
-
nativeEvent: event,
|
|
7135
|
-
position: position,
|
|
7136
|
-
target: 'edge',
|
|
7137
|
-
getData: getPanelData,
|
|
7138
|
-
});
|
|
7160
|
+
if (position === 'center' && this.gridview.length !== 0) {
|
|
7161
|
+
/**
|
|
7162
|
+
* for external events only show the four-corner drag overlays, disable
|
|
7163
|
+
* the center position so that external drag events can fall through to the group
|
|
7164
|
+
* and panel drop target handlers
|
|
7165
|
+
*/
|
|
7166
|
+
return false;
|
|
7139
7167
|
}
|
|
7140
|
-
|
|
7168
|
+
const firedEvent = new DockviewUnhandledDragOverEvent(event, 'edge', position, getPanelData);
|
|
7169
|
+
this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
7170
|
+
return firedEvent.isAccepted;
|
|
7141
7171
|
},
|
|
7142
7172
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
7143
|
-
overlayModel: (
|
|
7173
|
+
overlayModel: (_a = this.options.rootOverlayModel) !== null && _a !== void 0 ? _a : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
7144
7174
|
});
|
|
7145
7175
|
this.addDisposables(this._rootDropTarget, this._rootDropTarget.onWillShowOverlay((event) => {
|
|
7146
7176
|
if (this.gridview.length > 0 && event.position === 'center') {
|
|
@@ -7364,7 +7394,7 @@
|
|
|
7364
7394
|
skipDispose: true,
|
|
7365
7395
|
skipSetActiveGroup: true,
|
|
7366
7396
|
}));
|
|
7367
|
-
group.model.openPanel(item, { skipSetGroupActive: true });
|
|
7397
|
+
this.movingLock(() => group.model.openPanel(item, { skipSetGroupActive: true }));
|
|
7368
7398
|
}
|
|
7369
7399
|
else {
|
|
7370
7400
|
group = item;
|
|
@@ -7437,7 +7467,7 @@
|
|
|
7437
7467
|
// this is either a resize or a move
|
|
7438
7468
|
// to inform the panels .layout(...) the group with it's current size
|
|
7439
7469
|
// don't care about resize since the above watcher handles that
|
|
7440
|
-
group.layout(group.
|
|
7470
|
+
group.layout(group.width, group.height);
|
|
7441
7471
|
}), overlay.onDidChangeEnd(() => {
|
|
7442
7472
|
this._bufferOnDidLayoutChange.fire();
|
|
7443
7473
|
}), group.onDidChange((event) => {
|
|
@@ -7492,16 +7522,11 @@
|
|
|
7492
7522
|
}
|
|
7493
7523
|
updateOptions(options) {
|
|
7494
7524
|
var _a, _b;
|
|
7495
|
-
const
|
|
7496
|
-
this.gridview.orientation !== options.orientation;
|
|
7497
|
-
const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
|
|
7525
|
+
const changed_floatingGroupBounds = 'floatingGroupBounds' in options &&
|
|
7498
7526
|
options.floatingGroupBounds !== this.options.floatingGroupBounds;
|
|
7499
|
-
const changed_rootOverlayOptions =
|
|
7527
|
+
const changed_rootOverlayOptions = 'rootOverlayModel' in options &&
|
|
7500
7528
|
options.rootOverlayModel !== this.options.rootOverlayModel;
|
|
7501
7529
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
7502
|
-
if (changed_orientation) {
|
|
7503
|
-
this.gridview.orientation = options.orientation;
|
|
7504
|
-
}
|
|
7505
7530
|
if (changed_floatingGroupBounds) {
|
|
7506
7531
|
for (const group of this._floatingGroups) {
|
|
7507
7532
|
switch (this.options.floatingGroupBounds) {
|
|
@@ -7789,7 +7814,7 @@
|
|
|
7789
7814
|
? this.getGroupPanel(options.position.referencePanel)
|
|
7790
7815
|
: options.position.referencePanel;
|
|
7791
7816
|
if (!referencePanel) {
|
|
7792
|
-
throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
|
|
7817
|
+
throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
|
|
7793
7818
|
}
|
|
7794
7819
|
referenceGroup = this.findGroup(referencePanel);
|
|
7795
7820
|
}
|
|
@@ -7799,14 +7824,19 @@
|
|
|
7799
7824
|
? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
|
|
7800
7825
|
: options.position.referenceGroup;
|
|
7801
7826
|
if (!referenceGroup) {
|
|
7802
|
-
throw new Error(`
|
|
7827
|
+
throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
7803
7828
|
}
|
|
7804
7829
|
}
|
|
7805
7830
|
else {
|
|
7806
7831
|
const group = this.orthogonalize(directionToPosition(options.position.direction));
|
|
7807
7832
|
const panel = this.createPanel(options, group);
|
|
7808
|
-
group.model.openPanel(panel
|
|
7809
|
-
|
|
7833
|
+
group.model.openPanel(panel, {
|
|
7834
|
+
skipSetActive: options.inactive,
|
|
7835
|
+
skipSetGroupActive: options.inactive,
|
|
7836
|
+
});
|
|
7837
|
+
if (!options.inactive) {
|
|
7838
|
+
this.doSetGroupAndPanelActive(group);
|
|
7839
|
+
}
|
|
7810
7840
|
return panel;
|
|
7811
7841
|
}
|
|
7812
7842
|
}
|
|
@@ -7829,43 +7859,64 @@
|
|
|
7829
7859
|
skipActiveGroup: true,
|
|
7830
7860
|
});
|
|
7831
7861
|
panel = this.createPanel(options, group);
|
|
7832
|
-
group.model.openPanel(panel
|
|
7862
|
+
group.model.openPanel(panel, {
|
|
7863
|
+
skipSetActive: options.inactive,
|
|
7864
|
+
skipSetGroupActive: options.inactive,
|
|
7865
|
+
});
|
|
7833
7866
|
}
|
|
7834
7867
|
else if (referenceGroup.api.location.type === 'floating' ||
|
|
7835
7868
|
target === 'center') {
|
|
7836
7869
|
panel = this.createPanel(options, referenceGroup);
|
|
7837
|
-
referenceGroup.model.openPanel(panel
|
|
7838
|
-
|
|
7870
|
+
referenceGroup.model.openPanel(panel, {
|
|
7871
|
+
skipSetActive: options.inactive,
|
|
7872
|
+
skipSetGroupActive: options.inactive,
|
|
7873
|
+
});
|
|
7874
|
+
if (!options.inactive) {
|
|
7875
|
+
this.doSetGroupAndPanelActive(referenceGroup);
|
|
7876
|
+
}
|
|
7839
7877
|
}
|
|
7840
7878
|
else {
|
|
7841
7879
|
const location = getGridLocation(referenceGroup.element);
|
|
7842
7880
|
const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
|
|
7843
7881
|
const group = this.createGroupAtLocation(relativeLocation);
|
|
7844
7882
|
panel = this.createPanel(options, group);
|
|
7845
|
-
group.model.openPanel(panel
|
|
7846
|
-
|
|
7883
|
+
group.model.openPanel(panel, {
|
|
7884
|
+
skipSetActive: options.inactive,
|
|
7885
|
+
skipSetGroupActive: options.inactive,
|
|
7886
|
+
});
|
|
7887
|
+
if (!options.inactive) {
|
|
7888
|
+
this.doSetGroupAndPanelActive(group);
|
|
7889
|
+
}
|
|
7847
7890
|
}
|
|
7848
7891
|
}
|
|
7849
7892
|
else if (options.floating) {
|
|
7850
7893
|
const group = this.createGroup();
|
|
7851
7894
|
this._onDidAddGroup.fire(group);
|
|
7852
|
-
const
|
|
7895
|
+
const coordinates = typeof options.floating === 'object' &&
|
|
7853
7896
|
options.floating !== null
|
|
7854
7897
|
? options.floating
|
|
7855
7898
|
: {};
|
|
7856
|
-
this.addFloatingGroup(group,
|
|
7899
|
+
this.addFloatingGroup(group, coordinates, {
|
|
7857
7900
|
inDragMode: false,
|
|
7858
7901
|
skipRemoveGroup: true,
|
|
7859
7902
|
skipActiveGroup: true,
|
|
7860
7903
|
});
|
|
7861
7904
|
panel = this.createPanel(options, group);
|
|
7862
|
-
group.model.openPanel(panel
|
|
7905
|
+
group.model.openPanel(panel, {
|
|
7906
|
+
skipSetActive: options.inactive,
|
|
7907
|
+
skipSetGroupActive: options.inactive,
|
|
7908
|
+
});
|
|
7863
7909
|
}
|
|
7864
7910
|
else {
|
|
7865
7911
|
const group = this.createGroupAtLocation();
|
|
7866
7912
|
panel = this.createPanel(options, group);
|
|
7867
|
-
group.model.openPanel(panel
|
|
7868
|
-
|
|
7913
|
+
group.model.openPanel(panel, {
|
|
7914
|
+
skipSetActive: options.inactive,
|
|
7915
|
+
skipSetGroupActive: options.inactive,
|
|
7916
|
+
});
|
|
7917
|
+
if (!options.inactive) {
|
|
7918
|
+
this.doSetGroupAndPanelActive(group);
|
|
7919
|
+
}
|
|
7869
7920
|
}
|
|
7870
7921
|
return panel;
|
|
7871
7922
|
}
|
|
@@ -7889,12 +7940,10 @@
|
|
|
7889
7940
|
}
|
|
7890
7941
|
}
|
|
7891
7942
|
createWatermarkComponent() {
|
|
7892
|
-
|
|
7893
|
-
|
|
7894
|
-
|
|
7895
|
-
|
|
7896
|
-
? { 'watermark-name': this.options.watermarkFrameworkComponent }
|
|
7897
|
-
: {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
|
|
7943
|
+
if (this.options.createWatermarkComponent) {
|
|
7944
|
+
return this.options.createWatermarkComponent();
|
|
7945
|
+
}
|
|
7946
|
+
return new Watermark();
|
|
7898
7947
|
}
|
|
7899
7948
|
updateWatermark() {
|
|
7900
7949
|
var _a, _b;
|
|
@@ -8275,6 +8324,8 @@
|
|
|
8275
8324
|
return;
|
|
8276
8325
|
}
|
|
8277
8326
|
this._onWillShowOverlay.fire(event);
|
|
8327
|
+
}), view.model.onUnhandledDragOverEvent((event) => {
|
|
8328
|
+
this._onUnhandledDragOverEvent.fire(event);
|
|
8278
8329
|
}), view.model.onDidAddPanel((event) => {
|
|
8279
8330
|
if (this._moving) {
|
|
8280
8331
|
return;
|
|
@@ -9308,6 +9359,7 @@
|
|
|
9308
9359
|
exports.DockviewGroupPanelModel = DockviewGroupPanelModel;
|
|
9309
9360
|
exports.DockviewMutableDisposable = MutableDisposable;
|
|
9310
9361
|
exports.DockviewPanel = DockviewPanel;
|
|
9362
|
+
exports.DockviewUnhandledDragOverEvent = DockviewUnhandledDragOverEvent;
|
|
9311
9363
|
exports.DockviewWillDropEvent = DockviewWillDropEvent;
|
|
9312
9364
|
exports.DraggablePaneviewPanel = DraggablePaneviewPanel;
|
|
9313
9365
|
exports.Gridview = Gridview;
|
|
@@ -9315,6 +9367,7 @@
|
|
|
9315
9367
|
exports.GridviewComponent = GridviewComponent;
|
|
9316
9368
|
exports.GridviewPanel = GridviewPanel;
|
|
9317
9369
|
exports.LocalSelectionTransfer = LocalSelectionTransfer;
|
|
9370
|
+
exports.PROPERTY_KEYS = PROPERTY_KEYS;
|
|
9318
9371
|
exports.PaneFramework = PaneFramework;
|
|
9319
9372
|
exports.PaneTransfer = PaneTransfer;
|
|
9320
9373
|
exports.PanelTransfer = PanelTransfer;
|