dockview-core 1.11.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/api/dockviewPanelApi.d.ts +6 -0
- package/dist/cjs/api/panelApi.d.ts +4 -0
- 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 +2 -10
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +12 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +8 -4
- package/dist/cjs/dockview/dockviewComponent.js +83 -68
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +12 -1
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +48 -21
- 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/cjs/overlayRenderContainer.d.ts +1 -1
- package/dist/dockview-core.amd.js +1972 -1886
- 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 +1972 -1886
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +1972 -1886
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +1971 -1887
- 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 +1972 -1886
- 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 +1972 -1886
- 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/api/dockviewPanelApi.d.ts +6 -0
- package/dist/esm/api/panelApi.d.ts +4 -0
- 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 +2 -10
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +12 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +8 -4
- package/dist/esm/dockview/dockviewComponent.js +78 -69
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +12 -1
- package/dist/esm/dockview/dockviewGroupPanelModel.js +36 -21
- 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/dist/esm/overlayRenderContainer.d.ts +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,1997 +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 'onlyWhenVisibile':
|
|
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
|
-
|
|
3915
|
-
return;
|
|
3916
|
-
}
|
|
3917
|
-
if (this.rightActions) {
|
|
3918
|
-
this.rightActions.remove();
|
|
3919
|
-
this.rightActions = undefined;
|
|
3920
|
-
}
|
|
3921
|
-
if (element) {
|
|
3922
|
-
this.rightActionsContainer.appendChild(element);
|
|
3923
|
-
this.rightActions = element;
|
|
3924
|
-
}
|
|
4090
|
+
get headerVisible() {
|
|
4091
|
+
return this._headerVisible;
|
|
3925
4092
|
}
|
|
3926
|
-
|
|
3927
|
-
|
|
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) {
|
|
3928
4157
|
return;
|
|
3929
4158
|
}
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
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
|
+
}
|
|
3933
4167
|
}
|
|
3934
|
-
|
|
3935
|
-
this.
|
|
3936
|
-
|
|
4168
|
+
else {
|
|
4169
|
+
this.animationTimer = setTimeout(() => {
|
|
4170
|
+
var _a;
|
|
4171
|
+
(_a = this.body) === null || _a === void 0 ? void 0 : _a.remove();
|
|
4172
|
+
}, 200);
|
|
3937
4173
|
}
|
|
4174
|
+
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
4175
|
+
this._onDidChangeExpansionState.fire(expanded);
|
|
3938
4176
|
}
|
|
3939
|
-
|
|
3940
|
-
|
|
3941
|
-
|
|
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;
|
|
3942
4185
|
}
|
|
3943
|
-
|
|
3944
|
-
|
|
3945
|
-
|
|
4186
|
+
super.layout(width, height);
|
|
4187
|
+
}
|
|
4188
|
+
init(parameters) {
|
|
4189
|
+
var _a, _b;
|
|
4190
|
+
super.init(parameters);
|
|
4191
|
+
if (typeof parameters.minimumBodySize === 'number') {
|
|
4192
|
+
this.minimumBodySize = parameters.minimumBodySize;
|
|
3946
4193
|
}
|
|
3947
|
-
if (
|
|
3948
|
-
this.
|
|
3949
|
-
this.preActions = element;
|
|
4194
|
+
if (typeof parameters.maximumBodySize === 'number') {
|
|
4195
|
+
this.maximumBodySize = parameters.maximumBodySize;
|
|
3950
4196
|
}
|
|
3951
|
-
|
|
3952
|
-
|
|
3953
|
-
|
|
3954
|
-
|
|
3955
|
-
|
|
3956
|
-
|
|
3957
|
-
|
|
3958
|
-
|
|
3959
|
-
indexOf(id) {
|
|
3960
|
-
return this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
3961
|
-
}
|
|
3962
|
-
constructor(accessor, group) {
|
|
3963
|
-
super();
|
|
3964
|
-
this.accessor = accessor;
|
|
3965
|
-
this.group = group;
|
|
3966
|
-
this.tabs = [];
|
|
3967
|
-
this.selectedIndex = -1;
|
|
3968
|
-
this._hidden = false;
|
|
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
|
-
}));
|
|
4016
|
-
}), addDisposableListener(this.voidContainer.element, 'mousedown', (event) => {
|
|
4017
|
-
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4018
|
-
if (isFloatingGroupsEnabled &&
|
|
4019
|
-
event.shiftKey &&
|
|
4020
|
-
this.group.api.location.type !== 'floating') {
|
|
4021
|
-
event.preventDefault();
|
|
4022
|
-
const { top, left } = this.element.getBoundingClientRect();
|
|
4023
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4024
|
-
this.accessor.addFloatingGroup(this.group, {
|
|
4025
|
-
x: left - rootLeft + 20,
|
|
4026
|
-
y: top - rootTop + 20,
|
|
4027
|
-
}, { inDragMode: true });
|
|
4028
|
-
}
|
|
4029
|
-
}), addDisposableListener(this.tabContainer, 'mousedown', (event) => {
|
|
4030
|
-
if (event.defaultPrevented) {
|
|
4031
|
-
return;
|
|
4032
|
-
}
|
|
4033
|
-
const isLeftClick = event.button === 0;
|
|
4034
|
-
if (isLeftClick) {
|
|
4035
|
-
this.accessor.doSetGroupActive(this.group);
|
|
4036
|
-
}
|
|
4037
|
-
}));
|
|
4038
|
-
}
|
|
4039
|
-
setActive(_isGroupActive) {
|
|
4040
|
-
// noop
|
|
4041
|
-
}
|
|
4042
|
-
addTab(tab, index = this.tabs.length) {
|
|
4043
|
-
if (index < 0 || index > this.tabs.length) {
|
|
4044
|
-
throw new Error('invalid location');
|
|
4045
|
-
}
|
|
4046
|
-
this.tabContainer.insertBefore(tab.value.element, this.tabContainer.children[index]);
|
|
4047
|
-
this.tabs = [
|
|
4048
|
-
...this.tabs.slice(0, index),
|
|
4049
|
-
tab,
|
|
4050
|
-
...this.tabs.slice(index),
|
|
4051
|
-
];
|
|
4052
|
-
if (this.selectedIndex < 0) {
|
|
4053
|
-
this.selectedIndex = index;
|
|
4054
|
-
}
|
|
4055
|
-
}
|
|
4056
|
-
delete(id) {
|
|
4057
|
-
const index = this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4058
|
-
const tabToRemove = this.tabs.splice(index, 1)[0];
|
|
4059
|
-
const { value, disposable } = tabToRemove;
|
|
4060
|
-
disposable.dispose();
|
|
4061
|
-
value.dispose();
|
|
4062
|
-
value.element.remove();
|
|
4063
|
-
}
|
|
4064
|
-
setActivePanel(panel) {
|
|
4065
|
-
this.tabs.forEach((tab) => {
|
|
4066
|
-
const isActivePanel = panel.id === tab.value.panel.id;
|
|
4067
|
-
tab.value.setActive(isActivePanel);
|
|
4068
|
-
});
|
|
4069
|
-
}
|
|
4070
|
-
openPanel(panel, index = this.tabs.length) {
|
|
4071
|
-
var _a;
|
|
4072
|
-
if (this.tabs.find((tab) => tab.value.panel.id === panel.id)) {
|
|
4073
|
-
return;
|
|
4074
|
-
}
|
|
4075
|
-
const tab = new Tab(panel, this.accessor, this.group);
|
|
4076
|
-
if (!((_a = panel.view) === null || _a === void 0 ? void 0 : _a.tab)) {
|
|
4077
|
-
throw new Error('invalid header component');
|
|
4078
|
-
}
|
|
4079
|
-
tab.setContent(panel.view.tab);
|
|
4080
|
-
const disposable = new CompositeDisposable(tab.onDragStart((event) => {
|
|
4081
|
-
this._onTabDragStart.fire({ nativeEvent: event, panel });
|
|
4082
|
-
}), tab.onChanged((event) => {
|
|
4083
|
-
const isFloatingGroupsEnabled = !this.accessor.options.disableFloatingGroups;
|
|
4084
|
-
const isFloatingWithOnePanel = this.group.api.location.type === 'floating' &&
|
|
4085
|
-
this.size === 1;
|
|
4086
|
-
if (isFloatingGroupsEnabled &&
|
|
4087
|
-
!isFloatingWithOnePanel &&
|
|
4088
|
-
event.shiftKey) {
|
|
4089
|
-
event.preventDefault();
|
|
4090
|
-
const panel = this.accessor.getGroupPanel(tab.panel.id);
|
|
4091
|
-
const { top, left } = tab.element.getBoundingClientRect();
|
|
4092
|
-
const { top: rootTop, left: rootLeft } = this.accessor.element.getBoundingClientRect();
|
|
4093
|
-
this.accessor.addFloatingGroup(panel, {
|
|
4094
|
-
x: left - rootLeft,
|
|
4095
|
-
y: top - rootTop,
|
|
4096
|
-
}, { inDragMode: true });
|
|
4097
|
-
return;
|
|
4098
|
-
}
|
|
4099
|
-
const isLeftClick = event.button === 0;
|
|
4100
|
-
if (!isLeftClick || event.defaultPrevented) {
|
|
4101
|
-
return;
|
|
4102
|
-
}
|
|
4103
|
-
if (this.group.activePanel !== panel) {
|
|
4104
|
-
this.group.model.openPanel(panel);
|
|
4105
|
-
}
|
|
4106
|
-
}), tab.onDrop((event) => {
|
|
4107
|
-
this._onDrop.fire({
|
|
4108
|
-
event: event.nativeEvent,
|
|
4109
|
-
index: this.tabs.findIndex((x) => x.value === tab),
|
|
4110
|
-
});
|
|
4111
|
-
}), tab.onWillShowOverlay((event) => {
|
|
4112
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, { kind: 'tab' }));
|
|
4113
|
-
}));
|
|
4114
|
-
const value = { value: tab, disposable };
|
|
4115
|
-
this.addTab(value, index);
|
|
4116
|
-
}
|
|
4117
|
-
closePanel(panel) {
|
|
4118
|
-
this.delete(panel.id);
|
|
4119
|
-
}
|
|
4120
|
-
dispose() {
|
|
4121
|
-
super.dispose();
|
|
4122
|
-
for (const { value, disposable } of this.tabs) {
|
|
4123
|
-
disposable.dispose();
|
|
4124
|
-
value.dispose();
|
|
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);
|
|
4125
4205
|
}
|
|
4126
|
-
this.tabs = [];
|
|
4127
|
-
}
|
|
4128
|
-
}
|
|
4129
|
-
|
|
4130
|
-
class DockviewDidDropEvent extends DockviewEvent {
|
|
4131
|
-
get nativeEvent() {
|
|
4132
|
-
return this.options.nativeEvent;
|
|
4133
|
-
}
|
|
4134
|
-
get position() {
|
|
4135
|
-
return this.options.position;
|
|
4136
|
-
}
|
|
4137
|
-
get panel() {
|
|
4138
|
-
return this.options.panel;
|
|
4139
|
-
}
|
|
4140
|
-
get group() {
|
|
4141
|
-
return this.options.group;
|
|
4142
|
-
}
|
|
4143
|
-
get api() {
|
|
4144
|
-
return this.options.api;
|
|
4145
|
-
}
|
|
4146
|
-
constructor(options) {
|
|
4147
|
-
super();
|
|
4148
|
-
this.options = options;
|
|
4149
|
-
}
|
|
4150
|
-
getData() {
|
|
4151
|
-
return this.options.getData();
|
|
4152
|
-
}
|
|
4153
|
-
}
|
|
4154
|
-
class DockviewWillDropEvent extends DockviewDidDropEvent {
|
|
4155
|
-
get kind() {
|
|
4156
|
-
return this._kind;
|
|
4157
|
-
}
|
|
4158
|
-
constructor(options) {
|
|
4159
|
-
super(options);
|
|
4160
|
-
this._kind = options.kind;
|
|
4161
|
-
}
|
|
4162
|
-
}
|
|
4163
|
-
class WillShowOverlayLocationEvent {
|
|
4164
|
-
get kind() {
|
|
4165
|
-
return this._kind;
|
|
4166
|
-
}
|
|
4167
|
-
get nativeEvent() {
|
|
4168
|
-
return this.event.nativeEvent;
|
|
4169
|
-
}
|
|
4170
|
-
get position() {
|
|
4171
|
-
return this.event.position;
|
|
4172
|
-
}
|
|
4173
|
-
get defaultPrevented() {
|
|
4174
|
-
return this.event.defaultPrevented;
|
|
4175
|
-
}
|
|
4176
|
-
preventDefault() {
|
|
4177
|
-
this.event.preventDefault();
|
|
4178
|
-
}
|
|
4179
|
-
constructor(event, options) {
|
|
4180
|
-
this.event = event;
|
|
4181
|
-
this._kind = options.kind;
|
|
4182
|
-
}
|
|
4183
|
-
}
|
|
4184
|
-
class DockviewGroupPanelModel extends CompositeDisposable {
|
|
4185
|
-
get element() {
|
|
4186
|
-
throw new Error('not supported');
|
|
4187
|
-
}
|
|
4188
|
-
get activePanel() {
|
|
4189
|
-
return this._activePanel;
|
|
4190
|
-
}
|
|
4191
|
-
get locked() {
|
|
4192
|
-
return this._locked;
|
|
4193
|
-
}
|
|
4194
|
-
set locked(value) {
|
|
4195
|
-
this._locked = value;
|
|
4196
|
-
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
4197
|
-
}
|
|
4198
|
-
get isActive() {
|
|
4199
|
-
return this._isGroupActive;
|
|
4200
4206
|
}
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
get size() {
|
|
4205
|
-
return this._panels.length;
|
|
4206
|
-
}
|
|
4207
|
-
get isEmpty() {
|
|
4208
|
-
return this._panels.length === 0;
|
|
4209
|
-
}
|
|
4210
|
-
get hasWatermark() {
|
|
4211
|
-
return !!(this.watermark && this.container.contains(this.watermark.element));
|
|
4212
|
-
}
|
|
4213
|
-
get header() {
|
|
4214
|
-
return this.tabsContainer;
|
|
4215
|
-
}
|
|
4216
|
-
get isContentFocused() {
|
|
4217
|
-
if (!document.activeElement) {
|
|
4218
|
-
return false;
|
|
4219
|
-
}
|
|
4220
|
-
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
4207
|
+
toJSON() {
|
|
4208
|
+
const params = this._params;
|
|
4209
|
+
return Object.assign(Object.assign({}, super.toJSON()), { headerComponent: this.headerComponent, title: params.title });
|
|
4221
4210
|
}
|
|
4222
|
-
|
|
4223
|
-
|
|
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);
|
|
4224
4223
|
}
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
this.
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
case 'floating':
|
|
4240
|
-
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4241
|
-
this.contentContainer.dropTarget.setTargetZones(value
|
|
4242
|
-
? ['center']
|
|
4243
|
-
: ['top', 'bottom', 'left', 'right', 'center']);
|
|
4244
|
-
toggleClass(this.container, 'dv-groupview-floating', true);
|
|
4245
|
-
break;
|
|
4246
|
-
case 'popout':
|
|
4247
|
-
this.contentContainer.dropTarget.setTargetZones(['center']);
|
|
4248
|
-
toggleClass(this.container, 'dv-groupview-popout', true);
|
|
4249
|
-
break;
|
|
4250
|
-
}
|
|
4251
|
-
this.groupPanel.api._onDidLocationChange.fire({
|
|
4252
|
-
location: this.location,
|
|
4253
|
-
});
|
|
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
|
+
};
|
|
4254
4238
|
}
|
|
4255
|
-
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
class DraggablePaneviewPanel extends PaneviewPanel {
|
|
4242
|
+
constructor(accessor, id, component, headerComponent, orientation, isExpanded, disableDnd) {
|
|
4243
|
+
super(id, component, headerComponent, orientation, isExpanded, true);
|
|
4259
4244
|
this.accessor = accessor;
|
|
4260
|
-
this.id = id;
|
|
4261
|
-
this.options = options;
|
|
4262
|
-
this.groupPanel = groupPanel;
|
|
4263
|
-
this._isGroupActive = false;
|
|
4264
|
-
this._locked = false;
|
|
4265
|
-
this._location = { type: 'grid' };
|
|
4266
|
-
this.mostRecentlyUsed = [];
|
|
4267
|
-
this._onDidChange = new Emitter();
|
|
4268
|
-
this.onDidChange = this._onDidChange.event;
|
|
4269
|
-
this._width = 0;
|
|
4270
|
-
this._height = 0;
|
|
4271
|
-
this._panels = [];
|
|
4272
|
-
this._panelDisposables = new Map();
|
|
4273
|
-
this._onMove = new Emitter();
|
|
4274
|
-
this.onMove = this._onMove.event;
|
|
4275
4245
|
this._onDidDrop = new Emitter();
|
|
4276
4246
|
this.onDidDrop = this._onDidDrop.event;
|
|
4277
|
-
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
4281
|
-
this._onTabDragStart = new Emitter();
|
|
4282
|
-
this.onTabDragStart = this._onTabDragStart.event;
|
|
4283
|
-
this._onGroupDragStart = new Emitter();
|
|
4284
|
-
this.onGroupDragStart = this._onGroupDragStart.event;
|
|
4285
|
-
this._onDidAddPanel = new Emitter();
|
|
4286
|
-
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
4287
|
-
this._onDidPanelTitleChange = new Emitter();
|
|
4288
|
-
this.onDidPanelTitleChange = this._onDidPanelTitleChange.event;
|
|
4289
|
-
this._onDidPanelParametersChange = new Emitter();
|
|
4290
|
-
this.onDidPanelParametersChange = this._onDidPanelParametersChange.event;
|
|
4291
|
-
this._onDidRemovePanel = new Emitter();
|
|
4292
|
-
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
4293
|
-
this._onDidActivePanelChange = new Emitter();
|
|
4294
|
-
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
4295
|
-
this._overwriteRenderContainer = null;
|
|
4296
|
-
toggleClass(this.container, 'groupview', true);
|
|
4297
|
-
this._api = new DockviewApi(this.accessor);
|
|
4298
|
-
this.tabsContainer = new TabsContainer(this.accessor, this.groupPanel);
|
|
4299
|
-
this.contentContainer = new ContentContainer(this.accessor, this);
|
|
4300
|
-
container.append(this.tabsContainer.element, this.contentContainer.element);
|
|
4301
|
-
this.header.hidden = !!options.hideHeader;
|
|
4302
|
-
this.locked = (_a = options.locked) !== null && _a !== void 0 ? _a : false;
|
|
4303
|
-
this.addDisposables(this._onTabDragStart, this._onGroupDragStart, this._onWillShowOverlay, this.tabsContainer.onTabDragStart((event) => {
|
|
4304
|
-
this._onTabDragStart.fire(event);
|
|
4305
|
-
}), this.tabsContainer.onGroupDragStart((event) => {
|
|
4306
|
-
this._onGroupDragStart.fire(event);
|
|
4307
|
-
}), this.tabsContainer.onDrop((event) => {
|
|
4308
|
-
this.handleDropEvent('header', event.event, 'center', event.index);
|
|
4309
|
-
}), this.contentContainer.onDidFocus(() => {
|
|
4310
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4311
|
-
}), this.contentContainer.onDidBlur(() => {
|
|
4312
|
-
// noop
|
|
4313
|
-
}), this.contentContainer.dropTarget.onDrop((event) => {
|
|
4314
|
-
this.handleDropEvent('content', event.nativeEvent, event.position);
|
|
4315
|
-
}), this.tabsContainer.onWillShowOverlay((event) => {
|
|
4316
|
-
this._onWillShowOverlay.fire(event);
|
|
4317
|
-
}), this.contentContainer.dropTarget.onWillShowOverlay((event) => {
|
|
4318
|
-
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
4319
|
-
kind: 'content',
|
|
4320
|
-
}));
|
|
4321
|
-
}), this._onMove, this._onDidChange, this._onDidDrop, this._onWillDrop, this._onDidAddPanel, this._onDidRemovePanel, this._onDidActivePanelChange);
|
|
4322
|
-
}
|
|
4323
|
-
focusContent() {
|
|
4324
|
-
this.contentContainer.element.focus();
|
|
4247
|
+
if (!disableDnd) {
|
|
4248
|
+
this.initDragFeatures();
|
|
4249
|
+
}
|
|
4325
4250
|
}
|
|
4326
|
-
|
|
4327
|
-
this.
|
|
4328
|
-
|
|
4329
|
-
}
|
|
4330
|
-
|
|
4331
|
-
this.
|
|
4332
|
-
|
|
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
|
+
},
|
|
4333
4290
|
});
|
|
4291
|
+
this.addDisposables(this._onDidDrop, this.handler, this.target, this.target.onDrop((event) => {
|
|
4292
|
+
this.onDrop(event);
|
|
4293
|
+
}));
|
|
4334
4294
|
}
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
|
|
4342
|
-
this.doAddPanel(panel);
|
|
4343
|
-
});
|
|
4344
|
-
}
|
|
4345
|
-
if (this.options.activePanel) {
|
|
4346
|
-
this.openPanel(this.options.activePanel);
|
|
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 }));
|
|
4301
|
+
return;
|
|
4347
4302
|
}
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
if (
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
this._rightHeaderActions.init({
|
|
4357
|
-
containerApi: this._api,
|
|
4358
|
-
api: this.groupPanel.api,
|
|
4359
|
-
});
|
|
4360
|
-
this.tabsContainer.setRightActionsElement(this._rightHeaderActions.element);
|
|
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;
|
|
4361
4311
|
}
|
|
4362
|
-
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
containerApi: this._api,
|
|
4368
|
-
api: this.groupPanel.api,
|
|
4369
|
-
});
|
|
4370
|
-
this.tabsContainer.setLeftActionsElement(this._leftHeaderActions.element);
|
|
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);
|
|
4371
4317
|
}
|
|
4372
|
-
if (
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
containerApi: this._api,
|
|
4378
|
-
api: this.groupPanel.api,
|
|
4379
|
-
});
|
|
4380
|
-
this.tabsContainer.setPrefixActionsElement(this._prefixHeaderActions.element);
|
|
4318
|
+
if (event.position === 'right' || event.position === 'bottom') {
|
|
4319
|
+
if (fromIndex > toIndex) {
|
|
4320
|
+
toIndex++;
|
|
4321
|
+
}
|
|
4322
|
+
toIndex = Math.min(allPanels.length - 1, toIndex);
|
|
4381
4323
|
}
|
|
4324
|
+
containerApi.movePanel(fromIndex, toIndex);
|
|
4382
4325
|
}
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
return this.
|
|
4326
|
+
}
|
|
4327
|
+
|
|
4328
|
+
class ContentContainer extends CompositeDisposable {
|
|
4329
|
+
get element() {
|
|
4330
|
+
return this._element;
|
|
4388
4331
|
}
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
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);
|
|
4403
4377
|
}
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
const
|
|
4412
|
-
|
|
4413
|
-
if (
|
|
4414
|
-
|
|
4378
|
+
show() {
|
|
4379
|
+
this.element.style.display = '';
|
|
4380
|
+
}
|
|
4381
|
+
hide() {
|
|
4382
|
+
this.element.style.display = 'none';
|
|
4383
|
+
}
|
|
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);
|
|
4415
4393
|
}
|
|
4416
|
-
|
|
4417
|
-
|
|
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;
|
|
4418
4415
|
}
|
|
4419
|
-
|
|
4420
|
-
|
|
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
4421
|
}
|
|
4422
|
-
this.openPanel(this.panels[normalizedIndex]);
|
|
4423
4422
|
}
|
|
4424
|
-
|
|
4425
|
-
if (
|
|
4426
|
-
options = {};
|
|
4427
|
-
}
|
|
4428
|
-
if (!options.panel) {
|
|
4429
|
-
options.panel = this.activePanel;
|
|
4430
|
-
}
|
|
4431
|
-
if (!options.panel) {
|
|
4423
|
+
openPanel(panel) {
|
|
4424
|
+
if (this.panel === panel) {
|
|
4432
4425
|
return;
|
|
4433
4426
|
}
|
|
4434
|
-
|
|
4435
|
-
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4427
|
+
this.renderPanel(panel);
|
|
4428
|
+
}
|
|
4429
|
+
layout(_width, _height) {
|
|
4430
|
+
// noop
|
|
4431
|
+
}
|
|
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
|
+
}
|
|
4444
4438
|
}
|
|
4445
|
-
this.
|
|
4439
|
+
this.panel = undefined;
|
|
4446
4440
|
}
|
|
4447
|
-
|
|
4448
|
-
|
|
4441
|
+
dispose() {
|
|
4442
|
+
this.disposable.dispose();
|
|
4443
|
+
super.dispose();
|
|
4449
4444
|
}
|
|
4450
|
-
|
|
4451
|
-
|
|
4445
|
+
}
|
|
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();
|
|
4452
4454
|
}
|
|
4453
|
-
|
|
4454
|
-
|
|
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
|
+
};
|
|
4455
4462
|
}
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4463
|
+
}
|
|
4464
|
+
class Tab extends CompositeDisposable {
|
|
4465
|
+
get element() {
|
|
4466
|
+
return this._element;
|
|
4459
4467
|
}
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
this.
|
|
4477
|
-
|
|
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
|
+
},
|
|
4478
4503
|
});
|
|
4479
|
-
|
|
4480
|
-
|
|
4481
|
-
|
|
4482
|
-
}
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4489
|
-
|
|
4490
|
-
this.updateContainer();
|
|
4491
|
-
}
|
|
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);
|
|
4492
4515
|
}
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
if (!panelToRemove) {
|
|
4501
|
-
throw new Error('invalid operation');
|
|
4516
|
+
setActive(isActive) {
|
|
4517
|
+
toggleClass(this.element, 'active-tab', isActive);
|
|
4518
|
+
toggleClass(this.element, 'inactive-tab', !isActive);
|
|
4519
|
+
}
|
|
4520
|
+
setContent(part) {
|
|
4521
|
+
if (this.content) {
|
|
4522
|
+
this._element.removeChild(this.content.element);
|
|
4502
4523
|
}
|
|
4503
|
-
|
|
4524
|
+
this.content = part;
|
|
4525
|
+
this._element.appendChild(this.content.element);
|
|
4504
4526
|
}
|
|
4505
|
-
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
4527
|
+
dispose() {
|
|
4528
|
+
super.dispose();
|
|
4529
|
+
}
|
|
4530
|
+
}
|
|
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);
|
|
4511
4557
|
}
|
|
4512
|
-
}
|
|
4513
|
-
else {
|
|
4514
|
-
this.accessor.removeGroup(this.groupPanel);
|
|
4515
|
-
}
|
|
4516
|
-
}
|
|
4517
|
-
closePanel(panel) {
|
|
4518
|
-
this.doClose(panel);
|
|
4519
|
-
}
|
|
4520
|
-
doClose(panel) {
|
|
4521
|
-
this.accessor.removePanel(panel);
|
|
4522
|
-
}
|
|
4523
|
-
isPanelActive(panel) {
|
|
4524
|
-
return this._activePanel === panel;
|
|
4525
|
-
}
|
|
4526
|
-
updateActions(element) {
|
|
4527
|
-
this.tabsContainer.setRightActionsElement(element);
|
|
4558
|
+
}, true));
|
|
4528
4559
|
}
|
|
4529
|
-
|
|
4530
|
-
if (
|
|
4531
|
-
return;
|
|
4532
|
-
}
|
|
4533
|
-
this._isGroupActive = isGroupActive;
|
|
4534
|
-
toggleClass(this.container, 'active-group', isGroupActive);
|
|
4535
|
-
toggleClass(this.container, 'inactive-group', !isGroupActive);
|
|
4536
|
-
this.tabsContainer.setActive(this.isActive);
|
|
4537
|
-
if (!this._activePanel && this.panels.length > 0) {
|
|
4538
|
-
this.doSetActivePanel(this.panels[0]);
|
|
4560
|
+
isCancelled(_event) {
|
|
4561
|
+
if (this.group.api.location.type === 'floating' && !_event.shiftKey) {
|
|
4562
|
+
return true;
|
|
4539
4563
|
}
|
|
4540
|
-
|
|
4564
|
+
return false;
|
|
4541
4565
|
}
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
this.
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
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);
|
|
4549
4584
|
}
|
|
4585
|
+
return {
|
|
4586
|
+
dispose: () => {
|
|
4587
|
+
this.panelTransfer.clearData(PanelTransfer.prototype);
|
|
4588
|
+
},
|
|
4589
|
+
};
|
|
4550
4590
|
}
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
this.openPanel(nextPanel, {
|
|
4557
|
-
skipSetActive: options.skipSetActive,
|
|
4558
|
-
skipSetGroupActive: options.skipSetActiveGroup,
|
|
4559
|
-
});
|
|
4560
|
-
}
|
|
4561
|
-
if (this._activePanel && this.panels.length === 0) {
|
|
4562
|
-
this.doSetActivePanel(undefined);
|
|
4563
|
-
}
|
|
4564
|
-
if (!options.skipSetActive) {
|
|
4565
|
-
this.updateContainer();
|
|
4566
|
-
}
|
|
4567
|
-
return panel;
|
|
4591
|
+
}
|
|
4592
|
+
|
|
4593
|
+
class VoidContainer extends CompositeDisposable {
|
|
4594
|
+
get element() {
|
|
4595
|
+
return this._element;
|
|
4568
4596
|
}
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4572
|
-
|
|
4573
|
-
|
|
4574
|
-
this.
|
|
4575
|
-
this.
|
|
4576
|
-
|
|
4577
|
-
|
|
4578
|
-
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
this.
|
|
4583
|
-
}
|
|
4584
|
-
this.
|
|
4597
|
+
constructor(accessor, group) {
|
|
4598
|
+
super();
|
|
4599
|
+
this.accessor = accessor;
|
|
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
|
+
},
|
|
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);
|
|
4585
4636
|
}
|
|
4586
|
-
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
this.
|
|
4591
|
-
this.tabsContainer.openPanel(panel, index);
|
|
4592
|
-
if (!options.skipSetActive) {
|
|
4593
|
-
this.contentContainer.openPanel(panel);
|
|
4594
|
-
}
|
|
4595
|
-
if (hasExistingPanel) {
|
|
4596
|
-
// TODO - need to ensure ordering hasn't changed and if it has need to re-order this.panels
|
|
4597
|
-
return;
|
|
4598
|
-
}
|
|
4599
|
-
this.updateMru(panel);
|
|
4600
|
-
this.panels.splice(index, 0, panel);
|
|
4601
|
-
this._panelDisposables.set(panel.id, new CompositeDisposable(panel.api.onDidTitleChange((event) => this._onDidPanelTitleChange.fire(event)), panel.api.onDidParametersChange((event) => this._onDidPanelParametersChange.fire(event))));
|
|
4602
|
-
this._onDidAddPanel.fire({ panel });
|
|
4637
|
+
}
|
|
4638
|
+
|
|
4639
|
+
class TabsContainer extends CompositeDisposable {
|
|
4640
|
+
get panels() {
|
|
4641
|
+
return this.tabs.map((_) => _.value.panel.id);
|
|
4603
4642
|
}
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
return;
|
|
4607
|
-
}
|
|
4608
|
-
this._activePanel = panel;
|
|
4609
|
-
if (panel) {
|
|
4610
|
-
this.tabsContainer.setActivePanel(panel);
|
|
4611
|
-
panel.layout(this._width, this._height);
|
|
4612
|
-
this.updateMru(panel);
|
|
4613
|
-
this._onDidActivePanelChange.fire({
|
|
4614
|
-
panel,
|
|
4615
|
-
});
|
|
4616
|
-
}
|
|
4643
|
+
get size() {
|
|
4644
|
+
return this.tabs.length;
|
|
4617
4645
|
}
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
4621
|
-
}
|
|
4622
|
-
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
4646
|
+
get hidden() {
|
|
4647
|
+
return this._hidden;
|
|
4623
4648
|
}
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
this.panels.forEach((panel) => panel.runEvents());
|
|
4628
|
-
if (this.isEmpty && !this.watermark) {
|
|
4629
|
-
const watermark = this.accessor.createWatermarkComponent();
|
|
4630
|
-
watermark.init({
|
|
4631
|
-
containerApi: this._api,
|
|
4632
|
-
group: this.groupPanel,
|
|
4633
|
-
});
|
|
4634
|
-
this.watermark = watermark;
|
|
4635
|
-
addDisposableListener(this.watermark.element, 'click', () => {
|
|
4636
|
-
if (!this.isActive) {
|
|
4637
|
-
this.accessor.doSetGroupActive(this.groupPanel);
|
|
4638
|
-
}
|
|
4639
|
-
});
|
|
4640
|
-
this.tabsContainer.hide();
|
|
4641
|
-
this.contentContainer.element.appendChild(this.watermark.element);
|
|
4642
|
-
this.watermark.updateParentGroup(this.groupPanel, true);
|
|
4643
|
-
}
|
|
4644
|
-
if (!this.isEmpty && this.watermark) {
|
|
4645
|
-
this.watermark.element.remove();
|
|
4646
|
-
(_b = (_a = this.watermark).dispose) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
4647
|
-
this.watermark = undefined;
|
|
4648
|
-
this.tabsContainer.show();
|
|
4649
|
-
}
|
|
4649
|
+
set hidden(value) {
|
|
4650
|
+
this._hidden = value;
|
|
4651
|
+
this.element.style.display = value ? 'none' : '';
|
|
4650
4652
|
}
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
return this.accessor.options.showDndOverlay({
|
|
4655
|
-
nativeEvent: event,
|
|
4656
|
-
target,
|
|
4657
|
-
group: this.accessor.getPanel(this.id),
|
|
4658
|
-
position,
|
|
4659
|
-
getData: getPanelData,
|
|
4660
|
-
});
|
|
4653
|
+
show() {
|
|
4654
|
+
if (!this.hidden) {
|
|
4655
|
+
this.element.style.display = '';
|
|
4661
4656
|
}
|
|
4662
|
-
return false;
|
|
4663
4657
|
}
|
|
4664
|
-
|
|
4665
|
-
|
|
4658
|
+
hide() {
|
|
4659
|
+
this._element.style.display = 'none';
|
|
4660
|
+
}
|
|
4661
|
+
setRightActionsElement(element) {
|
|
4662
|
+
if (this.rightActions === element) {
|
|
4666
4663
|
return;
|
|
4667
4664
|
}
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
return typeof index === 'number' ? 'tab' : 'header_space';
|
|
4672
|
-
case 'content':
|
|
4673
|
-
return 'content';
|
|
4674
|
-
}
|
|
4665
|
+
if (this.rightActions) {
|
|
4666
|
+
this.rightActions.remove();
|
|
4667
|
+
this.rightActions = undefined;
|
|
4675
4668
|
}
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
group: this.groupPanel,
|
|
4684
|
-
api: this._api,
|
|
4685
|
-
});
|
|
4686
|
-
this._onWillDrop.fire(willDropEvent);
|
|
4687
|
-
if (willDropEvent.defaultPrevented) {
|
|
4669
|
+
if (element) {
|
|
4670
|
+
this.rightActionsContainer.appendChild(element);
|
|
4671
|
+
this.rightActions = element;
|
|
4672
|
+
}
|
|
4673
|
+
}
|
|
4674
|
+
setLeftActionsElement(element) {
|
|
4675
|
+
if (this.leftActions === element) {
|
|
4688
4676
|
return;
|
|
4689
4677
|
}
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
// this is a group move dnd event
|
|
4694
|
-
const { groupId } = data;
|
|
4695
|
-
this._onMove.fire({
|
|
4696
|
-
target: position,
|
|
4697
|
-
groupId: groupId,
|
|
4698
|
-
index,
|
|
4699
|
-
});
|
|
4700
|
-
return;
|
|
4701
|
-
}
|
|
4702
|
-
const fromSameGroup = this.tabsContainer.indexOf(data.panelId) !== -1;
|
|
4703
|
-
if (fromSameGroup && this.tabsContainer.size === 1) {
|
|
4704
|
-
return;
|
|
4705
|
-
}
|
|
4706
|
-
const { groupId, panelId } = data;
|
|
4707
|
-
const isSameGroup = this.id === groupId;
|
|
4708
|
-
if (isSameGroup && !position) {
|
|
4709
|
-
const oldIndex = this.tabsContainer.indexOf(panelId);
|
|
4710
|
-
if (oldIndex === index) {
|
|
4711
|
-
return;
|
|
4712
|
-
}
|
|
4713
|
-
}
|
|
4714
|
-
this._onMove.fire({
|
|
4715
|
-
target: position,
|
|
4716
|
-
groupId: data.groupId,
|
|
4717
|
-
itemId: data.panelId,
|
|
4718
|
-
index,
|
|
4719
|
-
});
|
|
4678
|
+
if (this.leftActions) {
|
|
4679
|
+
this.leftActions.remove();
|
|
4680
|
+
this.leftActions = undefined;
|
|
4720
4681
|
}
|
|
4721
|
-
|
|
4722
|
-
this.
|
|
4723
|
-
|
|
4724
|
-
position,
|
|
4725
|
-
panel,
|
|
4726
|
-
getData: () => getPanelData(),
|
|
4727
|
-
group: this.groupPanel,
|
|
4728
|
-
api: this._api,
|
|
4729
|
-
}));
|
|
4682
|
+
if (element) {
|
|
4683
|
+
this.leftActionsContainer.appendChild(element);
|
|
4684
|
+
this.leftActions = element;
|
|
4730
4685
|
}
|
|
4731
4686
|
}
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
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;
|
|
4740
4698
|
}
|
|
4741
|
-
this.tabsContainer.dispose();
|
|
4742
|
-
this.contentContainer.dispose();
|
|
4743
4699
|
}
|
|
4744
|
-
}
|
|
4745
|
-
|
|
4746
|
-
class Resizable extends CompositeDisposable {
|
|
4747
4700
|
get element() {
|
|
4748
4701
|
return this._element;
|
|
4749
4702
|
}
|
|
4750
|
-
|
|
4751
|
-
return this.
|
|
4703
|
+
isActive(tab) {
|
|
4704
|
+
return (this.selectedIndex > -1 &&
|
|
4705
|
+
this.tabs[this.selectedIndex].value === tab);
|
|
4752
4706
|
}
|
|
4753
|
-
|
|
4754
|
-
this.
|
|
4707
|
+
indexOf(id) {
|
|
4708
|
+
return this.tabs.findIndex((tab) => tab.value.panel.id === id);
|
|
4755
4709
|
}
|
|
4756
|
-
constructor(
|
|
4710
|
+
constructor(accessor, group) {
|
|
4757
4711
|
super();
|
|
4758
|
-
this.
|
|
4759
|
-
this.
|
|
4760
|
-
this.
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
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);
|
|
4767
4745
|
}
|
|
4768
|
-
|
|
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) {
|
|
4769
4783
|
return;
|
|
4770
4784
|
}
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
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 });
|
|
4784
4849
|
return;
|
|
4785
4850
|
}
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
* since the event is dispatched through requestAnimationFrame there is a small chance
|
|
4789
|
-
* the component is no longer attached to the DOM, if that is the case the dimensions
|
|
4790
|
-
* are mostly likely all zero and meaningless. we should skip this case.
|
|
4791
|
-
*/
|
|
4851
|
+
const isLeftClick = event.button === 0;
|
|
4852
|
+
if (!isLeftClick || event.defaultPrevented) {
|
|
4792
4853
|
return;
|
|
4793
4854
|
}
|
|
4794
|
-
|
|
4795
|
-
|
|
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
|
+
}));
|
|
4796
4871
|
}));
|
|
4872
|
+
const value = { value: tab, disposable };
|
|
4873
|
+
this.addTab(value, index);
|
|
4797
4874
|
}
|
|
4798
|
-
|
|
4799
|
-
|
|
4800
|
-
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4808
|
-
return 'top';
|
|
4809
|
-
case 'below':
|
|
4810
|
-
return 'bottom';
|
|
4811
|
-
case 'within':
|
|
4812
|
-
default:
|
|
4813
|
-
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 = [];
|
|
4814
4885
|
}
|
|
4815
4886
|
}
|
|
4816
|
-
|
|
4817
|
-
|
|
4818
|
-
|
|
4887
|
+
|
|
4888
|
+
class DockviewUnhandledDragOverEvent {
|
|
4889
|
+
get isAccepted() {
|
|
4890
|
+
return this._isAccepted;
|
|
4819
4891
|
}
|
|
4820
|
-
|
|
4821
|
-
|
|
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;
|
|
4822
4899
|
}
|
|
4823
|
-
|
|
4824
|
-
|
|
4900
|
+
accept() {
|
|
4901
|
+
this._isAccepted = true;
|
|
4825
4902
|
}
|
|
4826
|
-
|
|
4827
|
-
|
|
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;
|
|
4828
4927
|
}
|
|
4829
|
-
|
|
4830
|
-
|
|
4928
|
+
return false;
|
|
4929
|
+
}
|
|
4930
|
+
function isPanelOptionsWithGroup(data) {
|
|
4931
|
+
if (data.referenceGroup) {
|
|
4932
|
+
return true;
|
|
4831
4933
|
}
|
|
4832
|
-
|
|
4833
|
-
|
|
4934
|
+
return false;
|
|
4935
|
+
}
|
|
4936
|
+
function isGroupOptionsWithPanel(data) {
|
|
4937
|
+
if (data.referencePanel) {
|
|
4938
|
+
return true;
|
|
4834
4939
|
}
|
|
4835
|
-
|
|
4836
|
-
|
|
4940
|
+
return false;
|
|
4941
|
+
}
|
|
4942
|
+
function isGroupOptionsWithGroup(data) {
|
|
4943
|
+
if (data.referenceGroup) {
|
|
4944
|
+
return true;
|
|
4837
4945
|
}
|
|
4838
|
-
|
|
4839
|
-
|
|
4946
|
+
return false;
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
class DockviewDidDropEvent extends DockviewEvent {
|
|
4950
|
+
get nativeEvent() {
|
|
4951
|
+
return this.options.nativeEvent;
|
|
4840
4952
|
}
|
|
4841
|
-
get
|
|
4842
|
-
return this.
|
|
4953
|
+
get position() {
|
|
4954
|
+
return this.options.position;
|
|
4843
4955
|
}
|
|
4844
|
-
get
|
|
4845
|
-
return this.
|
|
4956
|
+
get panel() {
|
|
4957
|
+
return this.options.panel;
|
|
4846
4958
|
}
|
|
4847
|
-
get
|
|
4848
|
-
return this.
|
|
4959
|
+
get group() {
|
|
4960
|
+
return this.options.group;
|
|
4849
4961
|
}
|
|
4850
|
-
|
|
4851
|
-
this.
|
|
4962
|
+
get api() {
|
|
4963
|
+
return this.options.api;
|
|
4852
4964
|
}
|
|
4853
4965
|
constructor(options) {
|
|
4854
|
-
super(
|
|
4855
|
-
this.
|
|
4856
|
-
this._groups = new Map();
|
|
4857
|
-
this._onDidLayoutChange = new Emitter();
|
|
4858
|
-
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
4859
|
-
this._onDidRemove = new Emitter();
|
|
4860
|
-
this.onDidRemove = this._onDidRemove.event;
|
|
4861
|
-
this._onDidAdd = new Emitter();
|
|
4862
|
-
this.onDidAdd = this._onDidAdd.event;
|
|
4863
|
-
this._onDidActiveChange = new Emitter();
|
|
4864
|
-
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
4865
|
-
this._bufferOnDidLayoutChange = new TickDelayedEvent();
|
|
4866
|
-
this.element.style.height = '100%';
|
|
4867
|
-
this.element.style.width = '100%';
|
|
4868
|
-
options.parentElement.appendChild(this.element);
|
|
4869
|
-
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
4870
|
-
this.gridview.locked = !!options.locked;
|
|
4871
|
-
this.element.appendChild(this.gridview.element);
|
|
4872
|
-
this.layout(0, 0, true); // set some elements height/widths
|
|
4873
|
-
this.addDisposables(Disposable.from(() => {
|
|
4874
|
-
var _a;
|
|
4875
|
-
(_a = this.element.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.element);
|
|
4876
|
-
}), this.gridview.onDidChange(() => {
|
|
4877
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4878
|
-
}), exports.DockviewEvent.any(this.onDidAdd, this.onDidRemove, this.onDidActiveChange)(() => {
|
|
4879
|
-
this._bufferOnDidLayoutChange.fire();
|
|
4880
|
-
}), this._bufferOnDidLayoutChange.onEvent(() => {
|
|
4881
|
-
this._onDidLayoutChange.fire();
|
|
4882
|
-
}), this._bufferOnDidLayoutChange);
|
|
4883
|
-
}
|
|
4884
|
-
setVisible(panel, visible) {
|
|
4885
|
-
this.gridview.setViewVisible(getGridLocation(panel.element), visible);
|
|
4886
|
-
this._onDidLayoutChange.fire();
|
|
4887
|
-
}
|
|
4888
|
-
isVisible(panel) {
|
|
4889
|
-
return this.gridview.isViewVisible(getGridLocation(panel.element));
|
|
4890
|
-
}
|
|
4891
|
-
maximizeGroup(panel) {
|
|
4892
|
-
this.gridview.maximizeView(panel);
|
|
4893
|
-
this.doSetGroupActive(panel);
|
|
4894
|
-
}
|
|
4895
|
-
isMaximizedGroup(panel) {
|
|
4896
|
-
return this.gridview.maximizedView() === panel;
|
|
4897
|
-
}
|
|
4898
|
-
exitMaximizedGroup() {
|
|
4899
|
-
this.gridview.exitMaximizedView();
|
|
4900
|
-
}
|
|
4901
|
-
hasMaximizedGroup() {
|
|
4902
|
-
return this.gridview.hasMaximizedView();
|
|
4903
|
-
}
|
|
4904
|
-
get onDidMaximizedGroupChange() {
|
|
4905
|
-
return this.gridview.onDidMaximizedNodeChange;
|
|
4906
|
-
}
|
|
4907
|
-
doAddGroup(group, location = [0], size) {
|
|
4908
|
-
this.gridview.addView(group, size !== null && size !== void 0 ? size : exports.Sizing.Distribute, location);
|
|
4909
|
-
this._onDidAdd.fire(group);
|
|
4910
|
-
}
|
|
4911
|
-
doRemoveGroup(group, options) {
|
|
4912
|
-
if (!this._groups.has(group.id)) {
|
|
4913
|
-
throw new Error('invalid operation');
|
|
4914
|
-
}
|
|
4915
|
-
const item = this._groups.get(group.id);
|
|
4916
|
-
const view = this.gridview.remove(group, exports.Sizing.Distribute);
|
|
4917
|
-
if (item && !(options === null || options === void 0 ? void 0 : options.skipDispose)) {
|
|
4918
|
-
item.disposable.dispose();
|
|
4919
|
-
item.value.dispose();
|
|
4920
|
-
this._groups.delete(group.id);
|
|
4921
|
-
this._onDidRemove.fire(group);
|
|
4922
|
-
}
|
|
4923
|
-
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
4924
|
-
const groups = Array.from(this._groups.values());
|
|
4925
|
-
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
4926
|
-
}
|
|
4927
|
-
return view;
|
|
4966
|
+
super();
|
|
4967
|
+
this.options = options;
|
|
4928
4968
|
}
|
|
4929
|
-
|
|
4930
|
-
|
|
4931
|
-
return (_a = this._groups.get(id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
4969
|
+
getData() {
|
|
4970
|
+
return this.options.getData();
|
|
4932
4971
|
}
|
|
4933
|
-
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
if (this._activeGroup) {
|
|
4938
|
-
this._activeGroup.setActive(false);
|
|
4939
|
-
}
|
|
4940
|
-
if (group) {
|
|
4941
|
-
group.setActive(true);
|
|
4942
|
-
}
|
|
4943
|
-
this._activeGroup = group;
|
|
4944
|
-
this._onDidActiveChange.fire(group);
|
|
4972
|
+
}
|
|
4973
|
+
class DockviewWillDropEvent extends DockviewDidDropEvent {
|
|
4974
|
+
get kind() {
|
|
4975
|
+
return this._kind;
|
|
4945
4976
|
}
|
|
4946
|
-
|
|
4947
|
-
|
|
4977
|
+
constructor(options) {
|
|
4978
|
+
super(options);
|
|
4979
|
+
this._kind = options.kind;
|
|
4948
4980
|
}
|
|
4949
|
-
|
|
4950
|
-
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
}
|
|
4954
|
-
if (!options.group) {
|
|
4955
|
-
if (!this.activeGroup) {
|
|
4956
|
-
return;
|
|
4957
|
-
}
|
|
4958
|
-
options.group = this.activeGroup;
|
|
4959
|
-
}
|
|
4960
|
-
const location = getGridLocation(options.group.element);
|
|
4961
|
-
const next = (_a = this.gridview.next(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
4962
|
-
this.doSetGroupActive(next);
|
|
4981
|
+
}
|
|
4982
|
+
class WillShowOverlayLocationEvent {
|
|
4983
|
+
get kind() {
|
|
4984
|
+
return this.options.kind;
|
|
4963
4985
|
}
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
if (!options) {
|
|
4967
|
-
options = {};
|
|
4968
|
-
}
|
|
4969
|
-
if (!options.group) {
|
|
4970
|
-
if (!this.activeGroup) {
|
|
4971
|
-
return;
|
|
4972
|
-
}
|
|
4973
|
-
options.group = this.activeGroup;
|
|
4974
|
-
}
|
|
4975
|
-
const location = getGridLocation(options.group.element);
|
|
4976
|
-
const next = (_a = this.gridview.previous(location)) === null || _a === void 0 ? void 0 : _a.view;
|
|
4977
|
-
this.doSetGroupActive(next);
|
|
4986
|
+
get nativeEvent() {
|
|
4987
|
+
return this.event.nativeEvent;
|
|
4978
4988
|
}
|
|
4979
|
-
|
|
4980
|
-
|
|
4981
|
-
if (!different) {
|
|
4982
|
-
return;
|
|
4983
|
-
}
|
|
4984
|
-
this.gridview.element.style.height = `${height}px`;
|
|
4985
|
-
this.gridview.element.style.width = `${width}px`;
|
|
4986
|
-
this.gridview.layout(width, height);
|
|
4989
|
+
get position() {
|
|
4990
|
+
return this.event.position;
|
|
4987
4991
|
}
|
|
4988
|
-
|
|
4989
|
-
this.
|
|
4990
|
-
this._onDidAdd.dispose();
|
|
4991
|
-
this._onDidRemove.dispose();
|
|
4992
|
-
this._onDidLayoutChange.dispose();
|
|
4993
|
-
for (const group of this.groups) {
|
|
4994
|
-
group.dispose();
|
|
4995
|
-
}
|
|
4996
|
-
this.gridview.dispose();
|
|
4997
|
-
super.dispose();
|
|
4992
|
+
get defaultPrevented() {
|
|
4993
|
+
return this.event.defaultPrevented;
|
|
4998
4994
|
}
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
class WillFocusEvent extends DockviewEvent {
|
|
5002
|
-
constructor() {
|
|
5003
|
-
super();
|
|
4995
|
+
get panel() {
|
|
4996
|
+
return this.options.panel;
|
|
5004
4997
|
}
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
* A core api implementation that should be used across all panel-like objects
|
|
5008
|
-
*/
|
|
5009
|
-
class PanelApiImpl extends CompositeDisposable {
|
|
5010
|
-
get isFocused() {
|
|
5011
|
-
return this._isFocused;
|
|
4998
|
+
get api() {
|
|
4999
|
+
return this.options.api;
|
|
5012
5000
|
}
|
|
5013
|
-
get
|
|
5014
|
-
return this.
|
|
5001
|
+
get group() {
|
|
5002
|
+
return this.options.group;
|
|
5015
5003
|
}
|
|
5016
|
-
|
|
5017
|
-
|
|
5004
|
+
preventDefault() {
|
|
5005
|
+
this.event.preventDefault();
|
|
5018
5006
|
}
|
|
5019
|
-
|
|
5020
|
-
return this.
|
|
5007
|
+
getData() {
|
|
5008
|
+
return this.options.getData();
|
|
5021
5009
|
}
|
|
5022
|
-
|
|
5023
|
-
|
|
5010
|
+
constructor(event, options) {
|
|
5011
|
+
this.event = event;
|
|
5012
|
+
this.options = options;
|
|
5024
5013
|
}
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
5029
|
-
this._isFocused = false;
|
|
5030
|
-
this._isActive = false;
|
|
5031
|
-
this._isVisible = true;
|
|
5032
|
-
this._width = 0;
|
|
5033
|
-
this._height = 0;
|
|
5034
|
-
this._parameters = {};
|
|
5035
|
-
this.panelUpdatesDisposable = new MutableDisposable();
|
|
5036
|
-
this._onDidDimensionChange = new Emitter();
|
|
5037
|
-
this.onDidDimensionsChange = this._onDidDimensionChange.event;
|
|
5038
|
-
this._onDidChangeFocus = new Emitter();
|
|
5039
|
-
this.onDidFocusChange = this._onDidChangeFocus.event;
|
|
5040
|
-
//
|
|
5041
|
-
this._onWillFocus = new Emitter();
|
|
5042
|
-
this.onWillFocus = this._onWillFocus.event;
|
|
5043
|
-
//
|
|
5044
|
-
this._onDidVisibilityChange = new Emitter();
|
|
5045
|
-
this.onDidVisibilityChange = this._onDidVisibilityChange.event;
|
|
5046
|
-
this._onWillVisibilityChange = new Emitter();
|
|
5047
|
-
this.onWillVisibilityChange = this._onWillVisibilityChange.event;
|
|
5048
|
-
this._onDidActiveChange = new Emitter();
|
|
5049
|
-
this.onDidActiveChange = this._onDidActiveChange.event;
|
|
5050
|
-
this._onActiveChange = new Emitter();
|
|
5051
|
-
this.onActiveChange = this._onActiveChange.event;
|
|
5052
|
-
this._onDidParametersChange = new Emitter();
|
|
5053
|
-
this.onDidParametersChange = this._onDidParametersChange.event;
|
|
5054
|
-
this.addDisposables(this.onDidFocusChange((event) => {
|
|
5055
|
-
this._isFocused = event.isFocused;
|
|
5056
|
-
}), this.onDidActiveChange((event) => {
|
|
5057
|
-
this._isActive = event.isActive;
|
|
5058
|
-
}), this.onDidVisibilityChange((event) => {
|
|
5059
|
-
this._isVisible = event.isVisible;
|
|
5060
|
-
}), this.onDidDimensionsChange((event) => {
|
|
5061
|
-
this._width = event.width;
|
|
5062
|
-
this._height = event.height;
|
|
5063
|
-
}), this.panelUpdatesDisposable, this._onDidDimensionChange, this._onDidChangeFocus, this._onDidVisibilityChange, this._onDidActiveChange, this._onWillFocus, this._onActiveChange, this._onWillFocus, this._onWillVisibilityChange, this._onDidParametersChange);
|
|
5014
|
+
}
|
|
5015
|
+
class DockviewGroupPanelModel extends CompositeDisposable {
|
|
5016
|
+
get element() {
|
|
5017
|
+
throw new Error('not supported');
|
|
5064
5018
|
}
|
|
5065
|
-
|
|
5066
|
-
return this.
|
|
5019
|
+
get activePanel() {
|
|
5020
|
+
return this._activePanel;
|
|
5067
5021
|
}
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
this._parameters = parameters;
|
|
5071
|
-
panel.update({
|
|
5072
|
-
params: parameters,
|
|
5073
|
-
});
|
|
5074
|
-
});
|
|
5022
|
+
get locked() {
|
|
5023
|
+
return this._locked;
|
|
5075
5024
|
}
|
|
5076
|
-
|
|
5077
|
-
this.
|
|
5025
|
+
set locked(value) {
|
|
5026
|
+
this._locked = value;
|
|
5027
|
+
toggleClass(this.container, 'locked-groupview', value === 'no-drop-target' || value);
|
|
5078
5028
|
}
|
|
5079
|
-
|
|
5080
|
-
this.
|
|
5029
|
+
get isActive() {
|
|
5030
|
+
return this._isGroupActive;
|
|
5081
5031
|
}
|
|
5082
|
-
|
|
5083
|
-
this.
|
|
5032
|
+
get panels() {
|
|
5033
|
+
return this._panels;
|
|
5084
5034
|
}
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
class SplitviewPanelApiImpl extends PanelApiImpl {
|
|
5088
|
-
//
|
|
5089
|
-
constructor(id, component) {
|
|
5090
|
-
super(id, component);
|
|
5091
|
-
this._onDidConstraintsChangeInternal = new Emitter();
|
|
5092
|
-
this.onDidConstraintsChangeInternal = this._onDidConstraintsChangeInternal.event;
|
|
5093
|
-
//
|
|
5094
|
-
this._onDidConstraintsChange = new Emitter({
|
|
5095
|
-
replay: true,
|
|
5096
|
-
});
|
|
5097
|
-
this.onDidConstraintsChange = this._onDidConstraintsChange.event;
|
|
5098
|
-
//
|
|
5099
|
-
this._onDidSizeChange = new Emitter();
|
|
5100
|
-
this.onDidSizeChange = this._onDidSizeChange.event;
|
|
5101
|
-
this.addDisposables(this._onDidConstraintsChangeInternal, this._onDidConstraintsChange, this._onDidSizeChange);
|
|
5035
|
+
get size() {
|
|
5036
|
+
return this._panels.length;
|
|
5102
5037
|
}
|
|
5103
|
-
|
|
5104
|
-
this.
|
|
5038
|
+
get isEmpty() {
|
|
5039
|
+
return this._panels.length === 0;
|
|
5105
5040
|
}
|
|
5106
|
-
|
|
5107
|
-
this.
|
|
5041
|
+
get hasWatermark() {
|
|
5042
|
+
return !!(this.watermark && this.container.contains(this.watermark.element));
|
|
5108
5043
|
}
|
|
5109
|
-
|
|
5110
|
-
|
|
5111
|
-
class PaneviewPanelApiImpl extends SplitviewPanelApiImpl {
|
|
5112
|
-
set pane(pane) {
|
|
5113
|
-
this._pane = pane;
|
|
5044
|
+
get header() {
|
|
5045
|
+
return this.tabsContainer;
|
|
5114
5046
|
}
|
|
5115
|
-
|
|
5116
|
-
|
|
5117
|
-
|
|
5118
|
-
|
|
5119
|
-
|
|
5120
|
-
this.onDidExpansionChange = this._onDidExpansionChange.event;
|
|
5121
|
-
this._onMouseEnter = new Emitter({});
|
|
5122
|
-
this.onMouseEnter = this._onMouseEnter.event;
|
|
5123
|
-
this._onMouseLeave = new Emitter({});
|
|
5124
|
-
this.onMouseLeave = this._onMouseLeave.event;
|
|
5125
|
-
this.addDisposables(this._onDidExpansionChange, this._onMouseEnter, this._onMouseLeave);
|
|
5047
|
+
get isContentFocused() {
|
|
5048
|
+
if (!document.activeElement) {
|
|
5049
|
+
return false;
|
|
5050
|
+
}
|
|
5051
|
+
return isAncestor(document.activeElement, this.contentContainer.element);
|
|
5126
5052
|
}
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
(_a = this._pane) === null || _a === void 0 ? void 0 : _a.setExpanded(isExpanded);
|
|
5053
|
+
get location() {
|
|
5054
|
+
return this._location;
|
|
5130
5055
|
}
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
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,
|
|
5084
|
+
});
|
|
5134
5085
|
}
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5086
|
+
constructor(container, accessor, id, options, groupPanel) {
|
|
5087
|
+
var _a;
|
|
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);
|
|
5140
5159
|
}
|
|
5141
|
-
|
|
5142
|
-
|
|
5160
|
+
focusContent() {
|
|
5161
|
+
this.contentContainer.element.focus();
|
|
5143
5162
|
}
|
|
5144
|
-
|
|
5145
|
-
|
|
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
|
+
});
|
|
5146
5171
|
}
|
|
5147
|
-
get
|
|
5172
|
+
get renderContainer() {
|
|
5148
5173
|
var _a;
|
|
5149
|
-
return (_a = this.
|
|
5150
|
-
}
|
|
5151
|
-
constructor(id, component, api) {
|
|
5152
|
-
super();
|
|
5153
|
-
this.id = id;
|
|
5154
|
-
this.component = component;
|
|
5155
|
-
this.api = api;
|
|
5156
|
-
this._height = 0;
|
|
5157
|
-
this._width = 0;
|
|
5158
|
-
this._element = document.createElement('div');
|
|
5159
|
-
this._element.tabIndex = -1;
|
|
5160
|
-
this._element.style.outline = 'none';
|
|
5161
|
-
this._element.style.height = '100%';
|
|
5162
|
-
this._element.style.width = '100%';
|
|
5163
|
-
this._element.style.overflow = 'hidden';
|
|
5164
|
-
const focusTracker = trackFocus(this._element);
|
|
5165
|
-
this.addDisposables(this.api, focusTracker.onDidFocus(() => {
|
|
5166
|
-
this.api._onDidChangeFocus.fire({ isFocused: true });
|
|
5167
|
-
}), focusTracker.onDidBlur(() => {
|
|
5168
|
-
this.api._onDidChangeFocus.fire({ isFocused: false });
|
|
5169
|
-
}), focusTracker);
|
|
5174
|
+
return ((_a = this._overwriteRenderContainer) !== null && _a !== void 0 ? _a : this.accessor.overlayRenderContainer);
|
|
5170
5175
|
}
|
|
5171
|
-
|
|
5172
|
-
|
|
5173
|
-
|
|
5174
|
-
|
|
5175
|
-
|
|
5176
|
+
initialize() {
|
|
5177
|
+
if (this.options.panels) {
|
|
5178
|
+
this.options.panels.forEach((panel) => {
|
|
5179
|
+
this.doAddPanel(panel);
|
|
5180
|
+
});
|
|
5176
5181
|
}
|
|
5177
|
-
this.
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
this.
|
|
5181
|
-
|
|
5182
|
-
this.
|
|
5183
|
-
|
|
5184
|
-
|
|
5185
|
-
|
|
5186
|
-
|
|
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);
|
|
5187
5221
|
}
|
|
5188
5222
|
}
|
|
5189
|
-
|
|
5190
|
-
this.
|
|
5191
|
-
this.part = this.getComponent();
|
|
5223
|
+
rerender(panel) {
|
|
5224
|
+
this.contentContainer.renderPanel(panel, { asActive: false });
|
|
5192
5225
|
}
|
|
5193
|
-
|
|
5194
|
-
|
|
5195
|
-
// merge the new parameters with the existing parameters
|
|
5196
|
-
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) });
|
|
5197
|
-
/**
|
|
5198
|
-
* delete new keys that have a value of undefined,
|
|
5199
|
-
* allow values of null
|
|
5200
|
-
*/
|
|
5201
|
-
for (const key of Object.keys(event.params)) {
|
|
5202
|
-
if (event.params[key] === undefined) {
|
|
5203
|
-
delete this._params.params[key];
|
|
5204
|
-
}
|
|
5205
|
-
}
|
|
5206
|
-
// update the view with the updated props
|
|
5207
|
-
(_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);
|
|
5208
5228
|
}
|
|
5209
5229
|
toJSON() {
|
|
5210
|
-
var _a
|
|
5211
|
-
const
|
|
5212
|
-
|
|
5230
|
+
var _a;
|
|
5231
|
+
const result = {
|
|
5232
|
+
views: this.tabsContainer.panels,
|
|
5233
|
+
activeView: (_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.id,
|
|
5213
5234
|
id: this.id,
|
|
5214
|
-
component: this.component,
|
|
5215
|
-
params: Object.keys(params).length > 0 ? params : undefined,
|
|
5216
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;
|
|
5217
5243
|
}
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
return headerSize + minimumBodySize;
|
|
5238
|
-
}
|
|
5239
|
-
get maximumSize() {
|
|
5240
|
-
const headerSize = this.headerSize;
|
|
5241
|
-
const expanded = this.isExpanded();
|
|
5242
|
-
const maximumBodySize = expanded ? this._maximumBodySize : 0;
|
|
5243
|
-
return headerSize + maximumBodySize;
|
|
5244
|
-
}
|
|
5245
|
-
get size() {
|
|
5246
|
-
return this._size;
|
|
5247
|
-
}
|
|
5248
|
-
get orthogonalSize() {
|
|
5249
|
-
return this._orthogonalSize;
|
|
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]);
|
|
5250
5263
|
}
|
|
5251
|
-
|
|
5252
|
-
|
|
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]);
|
|
5253
5286
|
}
|
|
5254
|
-
|
|
5255
|
-
return this.
|
|
5287
|
+
containsPanel(panel) {
|
|
5288
|
+
return this.panels.includes(panel);
|
|
5256
5289
|
}
|
|
5257
|
-
|
|
5258
|
-
|
|
5290
|
+
init(_params) {
|
|
5291
|
+
//noop
|
|
5259
5292
|
}
|
|
5260
|
-
|
|
5261
|
-
|
|
5293
|
+
update(_params) {
|
|
5294
|
+
//noop
|
|
5262
5295
|
}
|
|
5263
|
-
|
|
5264
|
-
|
|
5265
|
-
|
|
5296
|
+
focus() {
|
|
5297
|
+
var _a;
|
|
5298
|
+
(_a = this._activePanel) === null || _a === void 0 ? void 0 : _a.focus();
|
|
5266
5299
|
}
|
|
5267
|
-
|
|
5268
|
-
|
|
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 });
|
|
5321
|
+
return;
|
|
5322
|
+
}
|
|
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
|
+
}
|
|
5269
5332
|
}
|
|
5270
|
-
|
|
5271
|
-
|
|
5272
|
-
|
|
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);
|
|
5273
5344
|
}
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5278
|
-
|
|
5279
|
-
|
|
5280
|
-
this.onDidChange = this._onDidChange.event;
|
|
5281
|
-
this.headerSize = 22;
|
|
5282
|
-
this._orthogonalSize = 0;
|
|
5283
|
-
this._size = 0;
|
|
5284
|
-
this._minimumBodySize = 100;
|
|
5285
|
-
this._maximumBodySize = Number.POSITIVE_INFINITY;
|
|
5286
|
-
this._isExpanded = false;
|
|
5287
|
-
this.expandedSize = 0;
|
|
5288
|
-
this.api.pane = this; // TODO cannot use 'this' before 'super'
|
|
5289
|
-
this.api.initialize(this);
|
|
5290
|
-
this._isExpanded = isExpanded;
|
|
5291
|
-
this._headerVisible = isHeaderVisible;
|
|
5292
|
-
this._onDidChangeExpansionState.fire(this.isExpanded()); // initialize value
|
|
5293
|
-
this._orientation = orientation;
|
|
5294
|
-
this.element.classList.add('pane');
|
|
5295
|
-
this.addDisposables(this.api.onWillVisibilityChange((event) => {
|
|
5296
|
-
const { isVisible } = event;
|
|
5297
|
-
const { accessor } = this._params;
|
|
5298
|
-
accessor.setVisible(this, isVisible);
|
|
5299
|
-
}), this.api.onDidSizeChange((event) => {
|
|
5300
|
-
this._onDidChange.fire({ size: event.size });
|
|
5301
|
-
}), addDisposableListener(this.element, 'mouseenter', (ev) => {
|
|
5302
|
-
this.api._onMouseEnter.fire(ev);
|
|
5303
|
-
}), addDisposableListener(this.element, 'mouseleave', (ev) => {
|
|
5304
|
-
this.api._onMouseLeave.fire(ev);
|
|
5305
|
-
}));
|
|
5306
|
-
this.addDisposables(this._onDidChangeExpansionState, this.onDidChangeExpansionState((isPanelExpanded) => {
|
|
5307
|
-
this.api._onDidExpansionChange.fire({
|
|
5308
|
-
isExpanded: isPanelExpanded,
|
|
5309
|
-
});
|
|
5310
|
-
}), this.api.onDidFocusChange((e) => {
|
|
5311
|
-
if (!this.header) {
|
|
5312
|
-
return;
|
|
5313
|
-
}
|
|
5314
|
-
if (e.isFocused) {
|
|
5315
|
-
addClasses(this.header, 'focused');
|
|
5316
|
-
}
|
|
5317
|
-
else {
|
|
5318
|
-
removeClasses(this.header, 'focused');
|
|
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);
|
|
5319
5351
|
}
|
|
5320
|
-
}
|
|
5321
|
-
|
|
5352
|
+
}
|
|
5353
|
+
else {
|
|
5354
|
+
this.accessor.removeGroup(this.groupPanel);
|
|
5355
|
+
}
|
|
5322
5356
|
}
|
|
5323
|
-
|
|
5324
|
-
this.
|
|
5357
|
+
closePanel(panel) {
|
|
5358
|
+
this.doClose(panel);
|
|
5325
5359
|
}
|
|
5326
|
-
|
|
5327
|
-
this.
|
|
5360
|
+
doClose(panel) {
|
|
5361
|
+
this.accessor.removePanel(panel);
|
|
5328
5362
|
}
|
|
5329
|
-
|
|
5330
|
-
return this.
|
|
5363
|
+
isPanelActive(panel) {
|
|
5364
|
+
return this._activePanel === panel;
|
|
5331
5365
|
}
|
|
5332
|
-
|
|
5333
|
-
|
|
5366
|
+
updateActions(element) {
|
|
5367
|
+
this.tabsContainer.setRightActionsElement(element);
|
|
5368
|
+
}
|
|
5369
|
+
setActive(isGroupActive, force = false) {
|
|
5370
|
+
if (!force && this.isActive === isGroupActive) {
|
|
5334
5371
|
return;
|
|
5335
5372
|
}
|
|
5336
|
-
this.
|
|
5337
|
-
|
|
5338
|
-
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
5342
|
-
this.element.appendChild(this.body);
|
|
5343
|
-
}
|
|
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]);
|
|
5344
5379
|
}
|
|
5345
|
-
|
|
5346
|
-
|
|
5347
|
-
|
|
5348
|
-
|
|
5349
|
-
|
|
5380
|
+
this.updateContainer();
|
|
5381
|
+
}
|
|
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);
|
|
5350
5389
|
}
|
|
5351
|
-
this._onDidChange.fire(expanded ? { size: this.width } : {});
|
|
5352
|
-
this._onDidChangeExpansionState.fire(expanded);
|
|
5353
5390
|
}
|
|
5354
|
-
|
|
5355
|
-
this.
|
|
5356
|
-
this.
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
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
|
+
});
|
|
5362
5400
|
}
|
|
5363
|
-
|
|
5401
|
+
if (this._activePanel && this.panels.length === 0) {
|
|
5402
|
+
this.doSetActivePanel(undefined);
|
|
5403
|
+
}
|
|
5404
|
+
if (!options.skipSetActive) {
|
|
5405
|
+
this.updateContainer();
|
|
5406
|
+
}
|
|
5407
|
+
return panel;
|
|
5364
5408
|
}
|
|
5365
|
-
|
|
5366
|
-
|
|
5367
|
-
|
|
5368
|
-
|
|
5369
|
-
this.minimumBodySize = parameters.minimumBodySize;
|
|
5409
|
+
doRemovePanel(panel) {
|
|
5410
|
+
const index = this.panels.indexOf(panel);
|
|
5411
|
+
if (this._activePanel === panel) {
|
|
5412
|
+
this.contentContainer.closePanel();
|
|
5370
5413
|
}
|
|
5371
|
-
|
|
5372
|
-
|
|
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);
|
|
5373
5419
|
}
|
|
5374
|
-
|
|
5375
|
-
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
(_a = this.body) === null || _a === void 0 ? void 0 : _a.append(this.bodyPart.element);
|
|
5379
|
-
(_b = this.header) === null || _b === void 0 ? void 0 : _b.append(this.headerPart.element);
|
|
5380
|
-
if (typeof parameters.isExpanded === 'boolean') {
|
|
5381
|
-
this.setExpanded(parameters.isExpanded);
|
|
5420
|
+
const disposable = this._panelDisposables.get(panel.id);
|
|
5421
|
+
if (disposable) {
|
|
5422
|
+
disposable.dispose();
|
|
5423
|
+
this._panelDisposables.delete(panel.id);
|
|
5382
5424
|
}
|
|
5425
|
+
this._onDidRemovePanel.fire({ panel });
|
|
5383
5426
|
}
|
|
5384
|
-
|
|
5385
|
-
const
|
|
5386
|
-
|
|
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 });
|
|
5387
5444
|
}
|
|
5388
|
-
|
|
5389
|
-
this.
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
this.
|
|
5393
|
-
|
|
5394
|
-
|
|
5395
|
-
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
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
|
+
}
|
|
5400
5458
|
}
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.update({ params });
|
|
5407
|
-
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.update({ params });
|
|
5408
|
-
},
|
|
5409
|
-
dispose: () => {
|
|
5410
|
-
var _a, _b;
|
|
5411
|
-
(_a = this.bodyPart) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
5412
|
-
(_b = this.headerPart) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
5413
|
-
},
|
|
5414
|
-
};
|
|
5459
|
+
updateMru(panel) {
|
|
5460
|
+
if (this.mostRecentlyUsed.includes(panel)) {
|
|
5461
|
+
this.mostRecentlyUsed.splice(this.mostRecentlyUsed.indexOf(panel), 1);
|
|
5462
|
+
}
|
|
5463
|
+
this.mostRecentlyUsed = [panel, ...this.mostRecentlyUsed];
|
|
5415
5464
|
}
|
|
5416
|
-
|
|
5417
|
-
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
|
|
5421
|
-
|
|
5422
|
-
|
|
5423
|
-
|
|
5424
|
-
|
|
5425
|
-
|
|
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();
|
|
5426
5490
|
}
|
|
5427
5491
|
}
|
|
5428
|
-
|
|
5429
|
-
|
|
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') {
|
|
5430
5499
|
return;
|
|
5431
5500
|
}
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
return {
|
|
5439
|
-
dispose: () => {
|
|
5440
|
-
LocalSelectionTransfer.getInstance().clearData(PaneTransfer.prototype);
|
|
5441
|
-
},
|
|
5442
|
-
};
|
|
5501
|
+
function getKind() {
|
|
5502
|
+
switch (type) {
|
|
5503
|
+
case 'header':
|
|
5504
|
+
return typeof index === 'number' ? 'tab' : 'header_space';
|
|
5505
|
+
case 'content':
|
|
5506
|
+
return 'content';
|
|
5443
5507
|
}
|
|
5444
|
-
}
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5448
|
-
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
data.viewId === this.accessor.id) {
|
|
5455
|
-
return true;
|
|
5456
|
-
}
|
|
5457
|
-
}
|
|
5458
|
-
if (this.accessor.options.showDndOverlay) {
|
|
5459
|
-
return this.accessor.options.showDndOverlay({
|
|
5460
|
-
nativeEvent: event,
|
|
5461
|
-
getData: getPaneData,
|
|
5462
|
-
panel: this,
|
|
5463
|
-
});
|
|
5464
|
-
}
|
|
5465
|
-
return false;
|
|
5466
|
-
},
|
|
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,
|
|
5467
5518
|
});
|
|
5468
|
-
this.
|
|
5469
|
-
|
|
5470
|
-
}));
|
|
5471
|
-
}
|
|
5472
|
-
onDrop(event) {
|
|
5473
|
-
const data = getPaneData();
|
|
5474
|
-
if (!data || data.viewId !== this.accessor.id) {
|
|
5475
|
-
// if there is no local drag event for this panel
|
|
5476
|
-
// or if the drag event was creating by another Paneview instance
|
|
5477
|
-
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) {
|
|
5478
5521
|
return;
|
|
5479
5522
|
}
|
|
5480
|
-
const
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
|
|
5487
|
-
|
|
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
|
+
});
|
|
5488
5553
|
}
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
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
|
+
}));
|
|
5494
5563
|
}
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
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();
|
|
5500
5573
|
}
|
|
5501
|
-
|
|
5574
|
+
this.tabsContainer.dispose();
|
|
5575
|
+
this.contentContainer.dispose();
|
|
5502
5576
|
}
|
|
5503
5577
|
}
|
|
5504
5578
|
|
|
@@ -5685,9 +5759,12 @@
|
|
|
5685
5759
|
constructor(id, accessor) {
|
|
5686
5760
|
super(id, '__dockviewgroup__');
|
|
5687
5761
|
this.accessor = accessor;
|
|
5762
|
+
this._mutableDisposable = new MutableDisposable();
|
|
5688
5763
|
this._onDidLocationChange = new Emitter();
|
|
5689
5764
|
this.onDidLocationChange = this._onDidLocationChange.event;
|
|
5690
|
-
this.
|
|
5765
|
+
this._onDidActivePanelChange = new Emitter();
|
|
5766
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
5767
|
+
this.addDisposables(this._onDidLocationChange, this._onDidActivePanelChange, this._mutableDisposable);
|
|
5691
5768
|
}
|
|
5692
5769
|
close() {
|
|
5693
5770
|
if (!this._group) {
|
|
@@ -5745,6 +5822,19 @@
|
|
|
5745
5822
|
}
|
|
5746
5823
|
initialize(group) {
|
|
5747
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
|
+
});
|
|
5748
5838
|
}
|
|
5749
5839
|
}
|
|
5750
5840
|
|
|
@@ -5805,31 +5895,6 @@
|
|
|
5805
5895
|
}
|
|
5806
5896
|
}
|
|
5807
5897
|
|
|
5808
|
-
function isPanelOptionsWithPanel(data) {
|
|
5809
|
-
if (data.referencePanel) {
|
|
5810
|
-
return true;
|
|
5811
|
-
}
|
|
5812
|
-
return false;
|
|
5813
|
-
}
|
|
5814
|
-
function isPanelOptionsWithGroup(data) {
|
|
5815
|
-
if (data.referenceGroup) {
|
|
5816
|
-
return true;
|
|
5817
|
-
}
|
|
5818
|
-
return false;
|
|
5819
|
-
}
|
|
5820
|
-
function isGroupOptionsWithPanel(data) {
|
|
5821
|
-
if (data.referencePanel) {
|
|
5822
|
-
return true;
|
|
5823
|
-
}
|
|
5824
|
-
return false;
|
|
5825
|
-
}
|
|
5826
|
-
function isGroupOptionsWithGroup(data) {
|
|
5827
|
-
if (data.referenceGroup) {
|
|
5828
|
-
return true;
|
|
5829
|
-
}
|
|
5830
|
-
return false;
|
|
5831
|
-
}
|
|
5832
|
-
|
|
5833
5898
|
class DockviewPanelApiImpl extends GridviewPanelApiImpl {
|
|
5834
5899
|
get location() {
|
|
5835
5900
|
return this.group.api.location;
|
|
@@ -6197,7 +6262,7 @@
|
|
|
6197
6262
|
this._tab = this.createTabComponent(this.id, tabComponent);
|
|
6198
6263
|
}
|
|
6199
6264
|
init(params) {
|
|
6200
|
-
this.content.init(
|
|
6265
|
+
this.content.init(params);
|
|
6201
6266
|
this.tab.init(params);
|
|
6202
6267
|
}
|
|
6203
6268
|
updateParentGroup(_group, _isPanelVisible) {
|
|
@@ -6218,20 +6283,29 @@
|
|
|
6218
6283
|
(_d = (_c = this.tab).dispose) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
6219
6284
|
}
|
|
6220
6285
|
createContentComponent(id, componentName) {
|
|
6221
|
-
|
|
6222
|
-
|
|
6286
|
+
return this.accessor.options.createComponent({
|
|
6287
|
+
id,
|
|
6288
|
+
name: componentName,
|
|
6289
|
+
});
|
|
6223
6290
|
}
|
|
6224
6291
|
createTabComponent(id, componentName) {
|
|
6225
|
-
|
|
6226
|
-
if (
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
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.`);
|
|
6234
6307
|
}
|
|
6308
|
+
return new DefaultTab();
|
|
6235
6309
|
}
|
|
6236
6310
|
}
|
|
6237
6311
|
|
|
@@ -6985,14 +7059,19 @@
|
|
|
6985
7059
|
}
|
|
6986
7060
|
get renderer() {
|
|
6987
7061
|
var _a;
|
|
6988
|
-
return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : '
|
|
7062
|
+
return (_a = this.options.defaultRenderer) !== null && _a !== void 0 ? _a : 'onlyWhenVisible';
|
|
7063
|
+
}
|
|
7064
|
+
get api() {
|
|
7065
|
+
return this._api;
|
|
6989
7066
|
}
|
|
6990
7067
|
constructor(options) {
|
|
6991
|
-
var _a
|
|
7068
|
+
var _a;
|
|
6992
7069
|
super({
|
|
6993
7070
|
proportionalLayout: true,
|
|
6994
|
-
orientation:
|
|
6995
|
-
styles: options.
|
|
7071
|
+
orientation: exports.Orientation.HORIZONTAL,
|
|
7072
|
+
styles: options.hideBorders
|
|
7073
|
+
? { separatorBorder: 'transparent' }
|
|
7074
|
+
: undefined,
|
|
6996
7075
|
parentElement: options.parentElement,
|
|
6997
7076
|
disableAutoResizing: options.disableAutoResizing,
|
|
6998
7077
|
locked: options.locked,
|
|
@@ -7010,6 +7089,8 @@
|
|
|
7010
7089
|
this.onWillDrop = this._onWillDrop.event;
|
|
7011
7090
|
this._onWillShowOverlay = new Emitter();
|
|
7012
7091
|
this.onWillShowOverlay = this._onWillShowOverlay.event;
|
|
7092
|
+
this._onUnhandledDragOverEvent = new Emitter();
|
|
7093
|
+
this.onUnhandledDragOverEvent = this._onUnhandledDragOverEvent.event;
|
|
7013
7094
|
this._onDidRemovePanel = new Emitter();
|
|
7014
7095
|
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
7015
7096
|
this._onDidAddPanel = new Emitter();
|
|
@@ -7035,7 +7116,7 @@
|
|
|
7035
7116
|
this.overlayRenderContainer = new OverlayRenderContainer(gready);
|
|
7036
7117
|
toggleClass(this.gridview.element, 'dv-dockview', true);
|
|
7037
7118
|
toggleClass(this.element, 'dv-debug', !!options.debug);
|
|
7038
|
-
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) => {
|
|
7039
7120
|
if (!this._moving) {
|
|
7040
7121
|
this._onDidAddGroup.fire(event);
|
|
7041
7122
|
}
|
|
@@ -7062,22 +7143,6 @@
|
|
|
7062
7143
|
}
|
|
7063
7144
|
}));
|
|
7064
7145
|
this._options = options;
|
|
7065
|
-
if (!this.options.components) {
|
|
7066
|
-
this.options.components = {};
|
|
7067
|
-
}
|
|
7068
|
-
if (!this.options.frameworkComponents) {
|
|
7069
|
-
this.options.frameworkComponents = {};
|
|
7070
|
-
}
|
|
7071
|
-
if (!this.options.frameworkTabComponents) {
|
|
7072
|
-
this.options.frameworkTabComponents = {};
|
|
7073
|
-
}
|
|
7074
|
-
if (!this.options.tabComponents) {
|
|
7075
|
-
this.options.tabComponents = {};
|
|
7076
|
-
}
|
|
7077
|
-
if (!this.options.watermarkComponent &&
|
|
7078
|
-
!this.options.watermarkFrameworkComponent) {
|
|
7079
|
-
this.options.watermarkComponent = Watermark;
|
|
7080
|
-
}
|
|
7081
7146
|
this._rootDropTarget = new Droptarget(this.element, {
|
|
7082
7147
|
canDisplayOverlay: (event, position) => {
|
|
7083
7148
|
const data = getPanelData();
|
|
@@ -7092,26 +7157,20 @@
|
|
|
7092
7157
|
}
|
|
7093
7158
|
return true;
|
|
7094
7159
|
}
|
|
7095
|
-
if (this.
|
|
7096
|
-
|
|
7097
|
-
|
|
7098
|
-
|
|
7099
|
-
|
|
7100
|
-
|
|
7101
|
-
|
|
7102
|
-
return false;
|
|
7103
|
-
}
|
|
7104
|
-
return this.options.showDndOverlay({
|
|
7105
|
-
nativeEvent: event,
|
|
7106
|
-
position: position,
|
|
7107
|
-
target: 'edge',
|
|
7108
|
-
getData: getPanelData,
|
|
7109
|
-
});
|
|
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;
|
|
7110
7167
|
}
|
|
7111
|
-
|
|
7168
|
+
const firedEvent = new DockviewUnhandledDragOverEvent(event, 'edge', position, getPanelData);
|
|
7169
|
+
this._onUnhandledDragOverEvent.fire(firedEvent);
|
|
7170
|
+
return firedEvent.isAccepted;
|
|
7112
7171
|
},
|
|
7113
7172
|
acceptedTargetZones: ['top', 'bottom', 'left', 'right', 'center'],
|
|
7114
|
-
overlayModel: (
|
|
7173
|
+
overlayModel: (_a = this.options.rootOverlayModel) !== null && _a !== void 0 ? _a : DEFAULT_ROOT_OVERLAY_MODEL,
|
|
7115
7174
|
});
|
|
7116
7175
|
this.addDisposables(this._rootDropTarget, this._rootDropTarget.onWillShowOverlay((event) => {
|
|
7117
7176
|
if (this.gridview.length > 0 && event.position === 'center') {
|
|
@@ -7120,6 +7179,10 @@
|
|
|
7120
7179
|
}
|
|
7121
7180
|
this._onWillShowOverlay.fire(new WillShowOverlayLocationEvent(event, {
|
|
7122
7181
|
kind: 'edge',
|
|
7182
|
+
panel: undefined,
|
|
7183
|
+
api: this._api,
|
|
7184
|
+
group: undefined,
|
|
7185
|
+
getData: getPanelData,
|
|
7123
7186
|
}));
|
|
7124
7187
|
}), this._rootDropTarget.onDrop((event) => {
|
|
7125
7188
|
var _a;
|
|
@@ -7331,7 +7394,7 @@
|
|
|
7331
7394
|
skipDispose: true,
|
|
7332
7395
|
skipSetActiveGroup: true,
|
|
7333
7396
|
}));
|
|
7334
|
-
group.model.openPanel(item, { skipSetGroupActive: true });
|
|
7397
|
+
this.movingLock(() => group.model.openPanel(item, { skipSetGroupActive: true }));
|
|
7335
7398
|
}
|
|
7336
7399
|
else {
|
|
7337
7400
|
group = item;
|
|
@@ -7404,7 +7467,7 @@
|
|
|
7404
7467
|
// this is either a resize or a move
|
|
7405
7468
|
// to inform the panels .layout(...) the group with it's current size
|
|
7406
7469
|
// don't care about resize since the above watcher handles that
|
|
7407
|
-
group.layout(group.
|
|
7470
|
+
group.layout(group.width, group.height);
|
|
7408
7471
|
}), overlay.onDidChangeEnd(() => {
|
|
7409
7472
|
this._bufferOnDidLayoutChange.fire();
|
|
7410
7473
|
}), group.onDidChange((event) => {
|
|
@@ -7459,16 +7522,11 @@
|
|
|
7459
7522
|
}
|
|
7460
7523
|
updateOptions(options) {
|
|
7461
7524
|
var _a, _b;
|
|
7462
|
-
const
|
|
7463
|
-
this.gridview.orientation !== options.orientation;
|
|
7464
|
-
const changed_floatingGroupBounds = options.floatingGroupBounds !== undefined &&
|
|
7525
|
+
const changed_floatingGroupBounds = 'floatingGroupBounds' in options &&
|
|
7465
7526
|
options.floatingGroupBounds !== this.options.floatingGroupBounds;
|
|
7466
|
-
const changed_rootOverlayOptions =
|
|
7527
|
+
const changed_rootOverlayOptions = 'rootOverlayModel' in options &&
|
|
7467
7528
|
options.rootOverlayModel !== this.options.rootOverlayModel;
|
|
7468
7529
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
7469
|
-
if (changed_orientation) {
|
|
7470
|
-
this.gridview.orientation = options.orientation;
|
|
7471
|
-
}
|
|
7472
7530
|
if (changed_floatingGroupBounds) {
|
|
7473
7531
|
for (const group of this._floatingGroups) {
|
|
7474
7532
|
switch (this.options.floatingGroupBounds) {
|
|
@@ -7756,7 +7814,7 @@
|
|
|
7756
7814
|
? this.getGroupPanel(options.position.referencePanel)
|
|
7757
7815
|
: options.position.referencePanel;
|
|
7758
7816
|
if (!referencePanel) {
|
|
7759
|
-
throw new Error(`referencePanel ${options.position.referencePanel} does not exist`);
|
|
7817
|
+
throw new Error(`referencePanel '${options.position.referencePanel}' does not exist`);
|
|
7760
7818
|
}
|
|
7761
7819
|
referenceGroup = this.findGroup(referencePanel);
|
|
7762
7820
|
}
|
|
@@ -7766,14 +7824,19 @@
|
|
|
7766
7824
|
? (_a = this._groups.get(options.position.referenceGroup)) === null || _a === void 0 ? void 0 : _a.value
|
|
7767
7825
|
: options.position.referenceGroup;
|
|
7768
7826
|
if (!referenceGroup) {
|
|
7769
|
-
throw new Error(`
|
|
7827
|
+
throw new Error(`referenceGroup '${options.position.referenceGroup}' does not exist`);
|
|
7770
7828
|
}
|
|
7771
7829
|
}
|
|
7772
7830
|
else {
|
|
7773
7831
|
const group = this.orthogonalize(directionToPosition(options.position.direction));
|
|
7774
7832
|
const panel = this.createPanel(options, group);
|
|
7775
|
-
group.model.openPanel(panel
|
|
7776
|
-
|
|
7833
|
+
group.model.openPanel(panel, {
|
|
7834
|
+
skipSetActive: options.inactive,
|
|
7835
|
+
skipSetGroupActive: options.inactive,
|
|
7836
|
+
});
|
|
7837
|
+
if (!options.inactive) {
|
|
7838
|
+
this.doSetGroupAndPanelActive(group);
|
|
7839
|
+
}
|
|
7777
7840
|
return panel;
|
|
7778
7841
|
}
|
|
7779
7842
|
}
|
|
@@ -7796,43 +7859,64 @@
|
|
|
7796
7859
|
skipActiveGroup: true,
|
|
7797
7860
|
});
|
|
7798
7861
|
panel = this.createPanel(options, group);
|
|
7799
|
-
group.model.openPanel(panel
|
|
7862
|
+
group.model.openPanel(panel, {
|
|
7863
|
+
skipSetActive: options.inactive,
|
|
7864
|
+
skipSetGroupActive: options.inactive,
|
|
7865
|
+
});
|
|
7800
7866
|
}
|
|
7801
7867
|
else if (referenceGroup.api.location.type === 'floating' ||
|
|
7802
7868
|
target === 'center') {
|
|
7803
7869
|
panel = this.createPanel(options, referenceGroup);
|
|
7804
|
-
referenceGroup.model.openPanel(panel
|
|
7805
|
-
|
|
7870
|
+
referenceGroup.model.openPanel(panel, {
|
|
7871
|
+
skipSetActive: options.inactive,
|
|
7872
|
+
skipSetGroupActive: options.inactive,
|
|
7873
|
+
});
|
|
7874
|
+
if (!options.inactive) {
|
|
7875
|
+
this.doSetGroupAndPanelActive(referenceGroup);
|
|
7876
|
+
}
|
|
7806
7877
|
}
|
|
7807
7878
|
else {
|
|
7808
7879
|
const location = getGridLocation(referenceGroup.element);
|
|
7809
7880
|
const relativeLocation = getRelativeLocation(this.gridview.orientation, location, target);
|
|
7810
7881
|
const group = this.createGroupAtLocation(relativeLocation);
|
|
7811
7882
|
panel = this.createPanel(options, group);
|
|
7812
|
-
group.model.openPanel(panel
|
|
7813
|
-
|
|
7883
|
+
group.model.openPanel(panel, {
|
|
7884
|
+
skipSetActive: options.inactive,
|
|
7885
|
+
skipSetGroupActive: options.inactive,
|
|
7886
|
+
});
|
|
7887
|
+
if (!options.inactive) {
|
|
7888
|
+
this.doSetGroupAndPanelActive(group);
|
|
7889
|
+
}
|
|
7814
7890
|
}
|
|
7815
7891
|
}
|
|
7816
7892
|
else if (options.floating) {
|
|
7817
7893
|
const group = this.createGroup();
|
|
7818
7894
|
this._onDidAddGroup.fire(group);
|
|
7819
|
-
const
|
|
7895
|
+
const coordinates = typeof options.floating === 'object' &&
|
|
7820
7896
|
options.floating !== null
|
|
7821
7897
|
? options.floating
|
|
7822
7898
|
: {};
|
|
7823
|
-
this.addFloatingGroup(group,
|
|
7899
|
+
this.addFloatingGroup(group, coordinates, {
|
|
7824
7900
|
inDragMode: false,
|
|
7825
7901
|
skipRemoveGroup: true,
|
|
7826
7902
|
skipActiveGroup: true,
|
|
7827
7903
|
});
|
|
7828
7904
|
panel = this.createPanel(options, group);
|
|
7829
|
-
group.model.openPanel(panel
|
|
7905
|
+
group.model.openPanel(panel, {
|
|
7906
|
+
skipSetActive: options.inactive,
|
|
7907
|
+
skipSetGroupActive: options.inactive,
|
|
7908
|
+
});
|
|
7830
7909
|
}
|
|
7831
7910
|
else {
|
|
7832
7911
|
const group = this.createGroupAtLocation();
|
|
7833
7912
|
panel = this.createPanel(options, group);
|
|
7834
|
-
group.model.openPanel(panel
|
|
7835
|
-
|
|
7913
|
+
group.model.openPanel(panel, {
|
|
7914
|
+
skipSetActive: options.inactive,
|
|
7915
|
+
skipSetGroupActive: options.inactive,
|
|
7916
|
+
});
|
|
7917
|
+
if (!options.inactive) {
|
|
7918
|
+
this.doSetGroupAndPanelActive(group);
|
|
7919
|
+
}
|
|
7836
7920
|
}
|
|
7837
7921
|
return panel;
|
|
7838
7922
|
}
|
|
@@ -7856,12 +7940,10 @@
|
|
|
7856
7940
|
}
|
|
7857
7941
|
}
|
|
7858
7942
|
createWatermarkComponent() {
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
7862
|
-
|
|
7863
|
-
? { 'watermark-name': this.options.watermarkFrameworkComponent }
|
|
7864
|
-
: {}, (_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();
|
|
7865
7947
|
}
|
|
7866
7948
|
updateWatermark() {
|
|
7867
7949
|
var _a, _b;
|
|
@@ -8242,6 +8324,8 @@
|
|
|
8242
8324
|
return;
|
|
8243
8325
|
}
|
|
8244
8326
|
this._onWillShowOverlay.fire(event);
|
|
8327
|
+
}), view.model.onUnhandledDragOverEvent((event) => {
|
|
8328
|
+
this._onUnhandledDragOverEvent.fire(event);
|
|
8245
8329
|
}), view.model.onDidAddPanel((event) => {
|
|
8246
8330
|
if (this._moving) {
|
|
8247
8331
|
return;
|
|
@@ -9275,6 +9359,7 @@
|
|
|
9275
9359
|
exports.DockviewGroupPanelModel = DockviewGroupPanelModel;
|
|
9276
9360
|
exports.DockviewMutableDisposable = MutableDisposable;
|
|
9277
9361
|
exports.DockviewPanel = DockviewPanel;
|
|
9362
|
+
exports.DockviewUnhandledDragOverEvent = DockviewUnhandledDragOverEvent;
|
|
9278
9363
|
exports.DockviewWillDropEvent = DockviewWillDropEvent;
|
|
9279
9364
|
exports.DraggablePaneviewPanel = DraggablePaneviewPanel;
|
|
9280
9365
|
exports.Gridview = Gridview;
|
|
@@ -9282,6 +9367,7 @@
|
|
|
9282
9367
|
exports.GridviewComponent = GridviewComponent;
|
|
9283
9368
|
exports.GridviewPanel = GridviewPanel;
|
|
9284
9369
|
exports.LocalSelectionTransfer = LocalSelectionTransfer;
|
|
9370
|
+
exports.PROPERTY_KEYS = PROPERTY_KEYS;
|
|
9285
9371
|
exports.PaneFramework = PaneFramework;
|
|
9286
9372
|
exports.PaneTransfer = PaneTransfer;
|
|
9287
9373
|
exports.PanelTransfer = PanelTransfer;
|