dockview 1.0.1 → 1.1.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/README.md +243 -186
- package/dist/cjs/api/component.api.d.ts +32 -17
- package/dist/cjs/api/component.api.js +155 -28
- package/dist/cjs/api/component.api.js.map +1 -1
- package/dist/cjs/api/gridviewPanelApi.js +1 -0
- package/dist/cjs/api/gridviewPanelApi.js.map +1 -1
- package/dist/cjs/api/groupPanelApi.d.ts +11 -14
- package/dist/cjs/api/groupPanelApi.js +19 -17
- package/dist/cjs/api/groupPanelApi.js.map +1 -1
- package/dist/cjs/api/panelApi.d.ts +0 -25
- package/dist/cjs/api/panelApi.js +1 -20
- package/dist/cjs/api/panelApi.js.map +1 -1
- package/dist/cjs/api/paneviewPanelApi.js +1 -0
- package/dist/cjs/api/paneviewPanelApi.js.map +1 -1
- package/dist/cjs/api/splitviewPanelApi.d.ts +0 -1
- package/dist/cjs/api/splitviewPanelApi.js +1 -5
- package/dist/cjs/api/splitviewPanelApi.js.map +1 -1
- package/dist/cjs/dnd/abstractDragHandler.d.ts +3 -3
- package/dist/cjs/dnd/abstractDragHandler.js +15 -14
- package/dist/cjs/dnd/abstractDragHandler.js.map +1 -1
- package/dist/cjs/dnd/dataTransfer.d.ts +0 -25
- package/dist/cjs/dnd/dataTransfer.js +1 -45
- package/dist/cjs/dnd/dataTransfer.js.map +1 -1
- package/dist/cjs/dnd/dnd.d.ts +1 -14
- package/dist/cjs/dnd/dnd.js +1 -79
- package/dist/cjs/dnd/dnd.js.map +1 -1
- package/dist/cjs/dnd/droptarget.d.ts +4 -5
- package/dist/cjs/dnd/droptarget.js +70 -46
- package/dist/cjs/dnd/droptarget.js.map +1 -1
- package/dist/cjs/dockview/components/tab/defaultTab.d.ts +0 -1
- package/dist/cjs/dockview/components/tab/defaultTab.js +0 -8
- package/dist/cjs/dockview/components/tab/defaultTab.js.map +1 -1
- package/dist/cjs/dockview/defaultGroupPanelView.js +3 -1
- package/dist/cjs/dockview/defaultGroupPanelView.js.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +27 -19
- package/dist/cjs/dockview/dockviewComponent.js +67 -178
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +2 -5
- package/dist/cjs/dockview/dockviewGroupPanel.js +2 -31
- package/dist/cjs/dockview/dockviewGroupPanel.js.map +1 -1
- package/dist/cjs/dockview/options.d.ts +2 -1
- package/dist/cjs/events.d.ts +7 -0
- package/dist/cjs/events.js +47 -5
- package/dist/cjs/events.js.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +9 -0
- package/dist/cjs/gridview/baseComponentGridview.js +20 -15
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
- package/dist/cjs/gridview/basePanelView.d.ts +5 -8
- package/dist/cjs/gridview/basePanelView.js +14 -8
- package/dist/cjs/gridview/basePanelView.js.map +1 -1
- package/dist/cjs/gridview/branchNode.js +1 -1
- package/dist/cjs/gridview/branchNode.js.map +1 -1
- package/dist/cjs/gridview/gridview.js +19 -18
- package/dist/cjs/gridview/gridview.js.map +1 -1
- package/dist/cjs/gridview/gridviewComponent.d.ts +4 -0
- package/dist/cjs/gridview/gridviewComponent.js +5 -0
- package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
- package/dist/cjs/gridview/gridviewPanel.d.ts +0 -1
- package/dist/cjs/gridview/gridviewPanel.js +3 -6
- package/dist/cjs/gridview/gridviewPanel.js.map +1 -1
- package/dist/cjs/gridview/leafNode.js +1 -0
- package/dist/cjs/gridview/leafNode.js.map +1 -1
- package/dist/cjs/groupview/groupPanel.d.ts +0 -7
- package/dist/cjs/groupview/groupview.d.ts +15 -8
- package/dist/cjs/groupview/groupview.js +38 -125
- package/dist/cjs/groupview/groupview.js.map +1 -1
- package/dist/cjs/groupview/groupviewPanel.d.ts +5 -2
- package/dist/cjs/groupview/groupviewPanel.js.map +1 -1
- package/dist/cjs/groupview/panel/content.js +1 -0
- package/dist/cjs/groupview/panel/content.js.map +1 -1
- package/dist/cjs/groupview/tab.d.ts +10 -13
- package/dist/cjs/groupview/tab.js +22 -80
- package/dist/cjs/groupview/tab.js.map +1 -1
- package/dist/cjs/groupview/titlebar/tabsContainer.js +6 -8
- package/dist/cjs/groupview/titlebar/tabsContainer.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/lifecycle.js +2 -1
- package/dist/cjs/lifecycle.js.map +1 -1
- package/dist/cjs/panel/types.d.ts +0 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/cjs/paneview/draggablePaneviewPanel.js +32 -29
- package/dist/cjs/paneview/draggablePaneviewPanel.js.map +1 -1
- package/dist/cjs/paneview/paneview.d.ts +1 -1
- package/dist/cjs/paneview/paneview.js +2 -5
- package/dist/cjs/paneview/paneview.js.map +1 -1
- package/dist/cjs/paneview/paneviewComponent.d.ts +6 -5
- package/dist/cjs/paneview/paneviewComponent.js +11 -16
- package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
- package/dist/cjs/paneview/paneviewPanel.d.ts +5 -1
- package/dist/cjs/paneview/paneviewPanel.js +14 -2
- package/dist/cjs/paneview/paneviewPanel.js.map +1 -1
- package/dist/cjs/react/deserializer.js +1 -3
- package/dist/cjs/react/deserializer.js.map +1 -1
- package/dist/cjs/react/dockview/dockview.d.ts +9 -9
- package/dist/cjs/react/dockview/dockview.js +14 -1
- package/dist/cjs/react/dockview/dockview.js.map +1 -1
- package/dist/cjs/react/dockview/reactContentPart.js +4 -4
- package/dist/cjs/react/dockview/reactContentPart.js.map +1 -1
- package/dist/cjs/react/dockview/reactHeaderPart.js +1 -0
- package/dist/cjs/react/dockview/reactHeaderPart.js.map +1 -1
- package/dist/cjs/react/dockview/reactWatermarkPart.d.ts +1 -2
- package/dist/cjs/react/dockview/reactWatermarkPart.js +1 -2
- package/dist/cjs/react/dockview/reactWatermarkPart.js.map +1 -1
- package/dist/cjs/react/gridview/view.js +2 -2
- package/dist/cjs/react/gridview/view.js.map +1 -1
- package/dist/cjs/react/index.d.ts +1 -0
- package/dist/cjs/react/index.js.map +1 -1
- package/dist/cjs/react/react.js +1 -2
- package/dist/cjs/react/react.js.map +1 -1
- package/dist/cjs/react/splitview/view.js +2 -2
- package/dist/cjs/react/splitview/view.js.map +1 -1
- package/dist/cjs/splitview/core/splitview.js +1 -1
- package/dist/cjs/splitview/core/splitview.js.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.d.ts +9 -6
- package/dist/cjs/splitview/splitviewComponent.js +11 -1
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.d.ts +1 -6
- package/dist/cjs/splitview/splitviewPanel.js +5 -3
- package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
- package/dist/dockview.amd.js +480 -567
- package/dist/dockview.amd.min.js +2 -16
- package/dist/dockview.amd.min.noStyle.js +2 -16
- package/dist/dockview.amd.noStyle.js +479 -566
- package/dist/dockview.cjs.js +480 -567
- package/dist/dockview.esm.js +480 -563
- package/dist/dockview.esm.min.js +2 -16
- package/dist/dockview.js +480 -567
- package/dist/dockview.min.js +2 -16
- package/dist/dockview.min.noStyle.js +2 -16
- package/dist/dockview.noStyle.js +479 -566
- package/dist/esm/api/component.api.d.ts +32 -17
- package/dist/esm/api/component.api.js +71 -20
- package/dist/esm/api/gridviewPanelApi.js +1 -0
- package/dist/esm/api/groupPanelApi.d.ts +11 -14
- package/dist/esm/api/groupPanelApi.js +18 -13
- package/dist/esm/api/panelApi.d.ts +0 -25
- package/dist/esm/api/panelApi.js +1 -20
- package/dist/esm/api/paneviewPanelApi.js +1 -0
- package/dist/esm/api/splitviewPanelApi.d.ts +0 -1
- package/dist/esm/api/splitviewPanelApi.js +1 -5
- package/dist/esm/dnd/abstractDragHandler.d.ts +3 -3
- package/dist/esm/dnd/abstractDragHandler.js +9 -8
- package/dist/esm/dnd/dataTransfer.d.ts +0 -25
- package/dist/esm/dnd/dataTransfer.js +0 -40
- package/dist/esm/dnd/dnd.d.ts +1 -14
- package/dist/esm/dnd/dnd.js +1 -69
- package/dist/esm/dnd/droptarget.d.ts +4 -5
- package/dist/esm/dnd/droptarget.js +70 -46
- package/dist/esm/dockview/components/tab/defaultTab.d.ts +0 -1
- package/dist/esm/dockview/components/tab/defaultTab.js +1 -9
- package/dist/esm/dockview/defaultGroupPanelView.js +3 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +27 -19
- package/dist/esm/dockview/dockviewComponent.js +54 -118
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +2 -5
- package/dist/esm/dockview/dockviewGroupPanel.js +2 -30
- package/dist/esm/dockview/options.d.ts +2 -1
- package/dist/esm/events.d.ts +7 -0
- package/dist/esm/events.js +20 -3
- package/dist/esm/gridview/baseComponentGridview.d.ts +9 -0
- package/dist/esm/gridview/baseComponentGridview.js +21 -16
- package/dist/esm/gridview/basePanelView.d.ts +5 -8
- package/dist/esm/gridview/basePanelView.js +10 -8
- package/dist/esm/gridview/branchNode.js +1 -1
- package/dist/esm/gridview/gridview.js +16 -16
- package/dist/esm/gridview/gridviewComponent.d.ts +4 -0
- package/dist/esm/gridview/gridviewComponent.js +5 -0
- package/dist/esm/gridview/gridviewPanel.d.ts +0 -1
- package/dist/esm/gridview/gridviewPanel.js +3 -6
- package/dist/esm/gridview/leafNode.js +1 -0
- package/dist/esm/groupview/groupPanel.d.ts +0 -7
- package/dist/esm/groupview/groupview.d.ts +15 -8
- package/dist/esm/groupview/groupview.js +24 -58
- package/dist/esm/groupview/groupviewPanel.d.ts +5 -2
- package/dist/esm/groupview/panel/content.js +1 -0
- package/dist/esm/groupview/tab.d.ts +10 -13
- package/dist/esm/groupview/tab.js +17 -24
- package/dist/esm/groupview/titlebar/tabsContainer.js +6 -8
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/lifecycle.js +2 -1
- package/dist/esm/panel/types.d.ts +0 -2
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +2 -2
- package/dist/esm/paneview/draggablePaneviewPanel.js +32 -29
- package/dist/esm/paneview/paneview.d.ts +1 -1
- package/dist/esm/paneview/paneview.js +2 -5
- package/dist/esm/paneview/paneviewComponent.d.ts +6 -5
- package/dist/esm/paneview/paneviewComponent.js +11 -8
- package/dist/esm/paneview/paneviewPanel.d.ts +5 -1
- package/dist/esm/paneview/paneviewPanel.js +10 -2
- package/dist/esm/react/deserializer.js +1 -3
- package/dist/esm/react/dockview/dockview.d.ts +9 -9
- package/dist/esm/react/dockview/dockview.js +15 -2
- package/dist/esm/react/dockview/reactContentPart.js +4 -4
- package/dist/esm/react/dockview/reactHeaderPart.js +1 -0
- package/dist/esm/react/dockview/reactWatermarkPart.d.ts +1 -2
- package/dist/esm/react/dockview/reactWatermarkPart.js +1 -2
- package/dist/esm/react/gridview/view.js +2 -2
- package/dist/esm/react/index.d.ts +1 -0
- package/dist/esm/react/react.js +1 -2
- package/dist/esm/react/splitview/view.js +2 -2
- package/dist/esm/splitview/core/splitview.js +1 -1
- package/dist/esm/splitview/splitviewComponent.d.ts +9 -6
- package/dist/esm/splitview/splitviewComponent.js +10 -2
- package/dist/esm/splitview/splitviewPanel.d.ts +1 -6
- package/dist/esm/splitview/splitviewPanel.js +5 -3
- package/dist/styles/dockview.css +5 -9
- package/package.json +4 -4
- package/dist/cjs/functions.d.ts +0 -1
- package/dist/cjs/functions.js +0 -42
- package/dist/cjs/functions.js.map +0 -1
- package/dist/cjs/groupview/panel/hostedPanel.d.ts +0 -22
- package/dist/cjs/groupview/panel/hostedPanel.js +0 -57
- package/dist/cjs/groupview/panel/hostedPanel.js.map +0 -1
- package/dist/cjs/json.d.ts +0 -1
- package/dist/cjs/json.js +0 -14
- package/dist/cjs/json.js.map +0 -1
- package/dist/esm/functions.d.ts +0 -1
- package/dist/esm/functions.js +0 -8
- package/dist/esm/groupview/panel/hostedPanel.d.ts +0 -22
- package/dist/esm/groupview/panel/hostedPanel.js +0 -43
- package/dist/esm/json.d.ts +0 -1
- package/dist/esm/json.js +0 -9
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { getRelativeLocation, getGridLocation, } from '../gridview/gridview';
|
|
11
2
|
import { Position } from '../dnd/droptarget';
|
|
12
3
|
import { tail, sequenceEquals } from '../array';
|
|
@@ -14,7 +5,6 @@ import { DockviewGroupPanel } from './dockviewGroupPanel';
|
|
|
14
5
|
import { CompositeDisposable } from '../lifecycle';
|
|
15
6
|
import { Emitter } from '../events';
|
|
16
7
|
import { Watermark } from './components/watermark/watermark';
|
|
17
|
-
import { debounce } from '../functions';
|
|
18
8
|
import { sequentialNumberGenerator } from '../math';
|
|
19
9
|
import { DefaultDeserializer } from './deserializer';
|
|
20
10
|
import { createComponent } from '../panel/componentFactory';
|
|
@@ -34,15 +24,22 @@ export class DockviewComponent extends BaseGrid {
|
|
|
34
24
|
orientation: options.orientation || Orientation.HORIZONTAL,
|
|
35
25
|
styles: options.styles,
|
|
36
26
|
});
|
|
37
|
-
this._panels = new Map();
|
|
38
|
-
this.dirtyPanels = new Set();
|
|
39
|
-
this.debouncedDeque = debounce(this.syncConfigs.bind(this), 5000);
|
|
40
27
|
// events
|
|
41
28
|
this._onTabInteractionEvent = new Emitter();
|
|
42
29
|
this.onTabInteractionEvent = this._onTabInteractionEvent.event;
|
|
43
30
|
this._onTabContextMenu = new Emitter();
|
|
44
31
|
this.onTabContextMenu = this._onTabContextMenu.event;
|
|
45
|
-
this.
|
|
32
|
+
this._onDidDrop = new Emitter();
|
|
33
|
+
this.onDidDrop = this._onDidDrop.event;
|
|
34
|
+
this._onDidRemovePanel = new Emitter();
|
|
35
|
+
this.onDidRemovePanel = this._onDidRemovePanel.event;
|
|
36
|
+
this._onDidAddPanel = new Emitter();
|
|
37
|
+
this.onDidAddPanel = this._onDidAddPanel.event;
|
|
38
|
+
this._onDidLayoutfromJSON = new Emitter();
|
|
39
|
+
this.onDidLayoutfromJSON = this._onDidLayoutfromJSON.event;
|
|
40
|
+
this._onDidActivePanelChange = new Emitter();
|
|
41
|
+
this.onDidActivePanelChange = this._onDidActivePanelChange.event;
|
|
42
|
+
this.addDisposables(this._onTabInteractionEvent, this._onTabContextMenu, this._onDidDrop);
|
|
46
43
|
this._options = options;
|
|
47
44
|
if (!this.options.components) {
|
|
48
45
|
this.options.components = {};
|
|
@@ -63,10 +60,10 @@ export class DockviewComponent extends BaseGrid {
|
|
|
63
60
|
this._api = new DockviewApi(this);
|
|
64
61
|
}
|
|
65
62
|
get totalPanels() {
|
|
66
|
-
return this.
|
|
63
|
+
return this.panels.length;
|
|
67
64
|
}
|
|
68
65
|
get panels() {
|
|
69
|
-
return
|
|
66
|
+
return this.groups.flatMap((group) => group.model.panels);
|
|
70
67
|
}
|
|
71
68
|
get deserializer() {
|
|
72
69
|
return this._deserializer;
|
|
@@ -96,10 +93,6 @@ export class DockviewComponent extends BaseGrid {
|
|
|
96
93
|
updateOptions(options) {
|
|
97
94
|
const hasOrientationChanged = typeof options.orientation === 'string' &&
|
|
98
95
|
this.options.orientation !== options.orientation;
|
|
99
|
-
// TODO support style update
|
|
100
|
-
// const hasStylesChanged =
|
|
101
|
-
// typeof options.styles === 'object' &&
|
|
102
|
-
// this.options.styles !== options.styles;
|
|
103
96
|
this._options = Object.assign(Object.assign({}, this.options), options);
|
|
104
97
|
if (hasOrientationChanged) {
|
|
105
98
|
this.gridview.orientation = options.orientation;
|
|
@@ -111,8 +104,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
111
104
|
(_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.focus();
|
|
112
105
|
}
|
|
113
106
|
getGroupPanel(id) {
|
|
114
|
-
|
|
115
|
-
return (_a = this._panels.get(id)) === null || _a === void 0 ? void 0 : _a.value;
|
|
107
|
+
return this.panels.find((panel) => panel.id === id);
|
|
116
108
|
}
|
|
117
109
|
setActivePanel(panel) {
|
|
118
110
|
if (!panel.group) {
|
|
@@ -161,24 +153,6 @@ export class DockviewComponent extends BaseGrid {
|
|
|
161
153
|
this.doSetGroupActive(next);
|
|
162
154
|
}
|
|
163
155
|
}
|
|
164
|
-
registerPanel(panel) {
|
|
165
|
-
if (this._panels.has(panel.id)) {
|
|
166
|
-
throw new Error(`panel ${panel.id} already exists`);
|
|
167
|
-
}
|
|
168
|
-
const disposable = new CompositeDisposable(panel.onDidStateChange(() => this.addDirtyPanel(panel)));
|
|
169
|
-
this._panels.set(panel.id, { value: panel, disposable });
|
|
170
|
-
}
|
|
171
|
-
unregisterPanel(panel) {
|
|
172
|
-
if (!this._panels.has(panel.id)) {
|
|
173
|
-
throw new Error(`panel ${panel.id} doesn't exist`);
|
|
174
|
-
}
|
|
175
|
-
const item = this._panels.get(panel.id);
|
|
176
|
-
if (item) {
|
|
177
|
-
item.disposable.dispose();
|
|
178
|
-
item.value.dispose();
|
|
179
|
-
}
|
|
180
|
-
this._panels.delete(panel.id);
|
|
181
|
-
}
|
|
182
156
|
/**
|
|
183
157
|
* Serialize the current state of the layout
|
|
184
158
|
*
|
|
@@ -186,12 +160,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
186
160
|
*/
|
|
187
161
|
toJSON() {
|
|
188
162
|
var _a;
|
|
189
|
-
this.syncConfigs();
|
|
190
163
|
const data = this.gridview.serialize();
|
|
191
|
-
const panels =
|
|
192
|
-
|
|
193
|
-
collection[panel.value.id] = panel.value.toJSON();
|
|
194
|
-
}
|
|
164
|
+
const panels = this.panels.reduce((collection, panel) => {
|
|
165
|
+
collection[panel.id] = panel.toJSON();
|
|
195
166
|
return collection;
|
|
196
167
|
}, {});
|
|
197
168
|
return {
|
|
@@ -203,11 +174,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
203
174
|
}
|
|
204
175
|
fromJSON(data) {
|
|
205
176
|
this.gridview.clear();
|
|
206
|
-
this.
|
|
207
|
-
panel.
|
|
208
|
-
panel.value.dispose();
|
|
177
|
+
this.panels.forEach((panel) => {
|
|
178
|
+
panel.dispose();
|
|
209
179
|
});
|
|
210
|
-
this._panels.clear();
|
|
211
180
|
this._groups.clear();
|
|
212
181
|
if (!this.deserializer) {
|
|
213
182
|
throw new Error('invalid deserializer');
|
|
@@ -222,9 +191,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
222
191
|
this.gridview.deserialize(grid, new DefaultDeserializer(this, {
|
|
223
192
|
createPanel: (id) => {
|
|
224
193
|
const panelData = panels[id];
|
|
225
|
-
|
|
226
|
-
this.registerPanel(panel);
|
|
227
|
-
return panel;
|
|
194
|
+
return this.deserializer.fromJSON(panelData);
|
|
228
195
|
},
|
|
229
196
|
}));
|
|
230
197
|
if (typeof activeGroup === 'string') {
|
|
@@ -235,30 +202,23 @@ export class DockviewComponent extends BaseGrid {
|
|
|
235
202
|
}
|
|
236
203
|
this.gridview.layout(this.width, this.height);
|
|
237
204
|
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT_FROM_JSON });
|
|
205
|
+
this._onDidLayoutfromJSON.fire();
|
|
238
206
|
}
|
|
239
207
|
closeAllGroups() {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
if (!didCloseAll) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return true;
|
|
249
|
-
});
|
|
208
|
+
for (const entry of this._groups.entries()) {
|
|
209
|
+
const [_, group] = entry;
|
|
210
|
+
group.value.model.closeAllPanels();
|
|
211
|
+
}
|
|
250
212
|
}
|
|
251
213
|
fireMouseEvent(event) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}
|
|
261
|
-
break;
|
|
214
|
+
if (event.kind === MouseEventKind.CONTEXT_MENU) {
|
|
215
|
+
if (event.tab && event.panel) {
|
|
216
|
+
this._onTabContextMenu.fire({
|
|
217
|
+
event: event.event,
|
|
218
|
+
api: this._api,
|
|
219
|
+
panel: event.panel,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
262
222
|
}
|
|
263
223
|
}
|
|
264
224
|
addPanel(options) {
|
|
@@ -292,7 +252,6 @@ export class DockviewComponent extends BaseGrid {
|
|
|
292
252
|
return panel;
|
|
293
253
|
}
|
|
294
254
|
removePanel(panel) {
|
|
295
|
-
this.unregisterPanel(panel);
|
|
296
255
|
const group = panel.group;
|
|
297
256
|
if (!group) {
|
|
298
257
|
throw new Error(`cannot remove panel ${panel.id}. it's missing a group.`);
|
|
@@ -311,10 +270,9 @@ export class DockviewComponent extends BaseGrid {
|
|
|
311
270
|
: {}, (_a = this.options.frameworkComponentFactory) === null || _a === void 0 ? void 0 : _a.watermark);
|
|
312
271
|
}
|
|
313
272
|
addEmptyGroup(options) {
|
|
314
|
-
var _a;
|
|
315
273
|
const group = this.createGroup();
|
|
316
274
|
if (options) {
|
|
317
|
-
const referencePanel =
|
|
275
|
+
const referencePanel = this.panels.find((panel) => panel.id === options.referencePanel);
|
|
318
276
|
if (!referencePanel) {
|
|
319
277
|
throw new Error(`reference panel ${options.referencePanel} does not exist`);
|
|
320
278
|
}
|
|
@@ -343,13 +301,13 @@ export class DockviewComponent extends BaseGrid {
|
|
|
343
301
|
super.removeGroup(group);
|
|
344
302
|
}
|
|
345
303
|
moveGroupOrPanel(referenceGroup, groupId, itemId, target, index) {
|
|
346
|
-
var _a
|
|
304
|
+
var _a;
|
|
347
305
|
const sourceGroup = groupId
|
|
348
306
|
? (_a = this._groups.get(groupId)) === null || _a === void 0 ? void 0 : _a.value
|
|
349
307
|
: undefined;
|
|
350
308
|
if (!target || target === Position.Center) {
|
|
351
309
|
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
|
|
352
|
-
|
|
310
|
+
this.panels.find((panel) => panel.id === itemId);
|
|
353
311
|
if (!groupItem) {
|
|
354
312
|
throw new Error(`No panel with id ${itemId}`);
|
|
355
313
|
}
|
|
@@ -385,7 +343,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
385
343
|
}
|
|
386
344
|
else {
|
|
387
345
|
const groupItem = (sourceGroup === null || sourceGroup === void 0 ? void 0 : sourceGroup.model.removePanel(itemId)) ||
|
|
388
|
-
|
|
346
|
+
this.panels.find((panel) => panel.id === itemId);
|
|
389
347
|
if (!groupItem) {
|
|
390
348
|
throw new Error(`No panel with id ${itemId}`);
|
|
391
349
|
}
|
|
@@ -395,7 +353,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
395
353
|
}
|
|
396
354
|
}
|
|
397
355
|
doSetGroupActive(group, skipFocus) {
|
|
398
|
-
var _a, _b;
|
|
356
|
+
var _a, _b, _c;
|
|
399
357
|
const isGroupAlreadyFocused = this._activeGroup === group;
|
|
400
358
|
super.doSetGroupActive(group, skipFocus);
|
|
401
359
|
if (!isGroupAlreadyFocused && ((_a = this._activeGroup) === null || _a === void 0 ? void 0 : _a.model.activePanel)) {
|
|
@@ -403,6 +361,7 @@ export class DockviewComponent extends BaseGrid {
|
|
|
403
361
|
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
404
362
|
panel: (_b = this._activeGroup) === null || _b === void 0 ? void 0 : _b.model.activePanel,
|
|
405
363
|
});
|
|
364
|
+
this._onDidActivePanelChange.fire((_c = this._activeGroup) === null || _c === void 0 ? void 0 : _c.model.activePanel);
|
|
406
365
|
}
|
|
407
366
|
}
|
|
408
367
|
createGroup(options) {
|
|
@@ -428,6 +387,8 @@ export class DockviewComponent extends BaseGrid {
|
|
|
428
387
|
const disposable = new CompositeDisposable(view.model.onMove((event) => {
|
|
429
388
|
const { groupId, itemId, target, index } = event;
|
|
430
389
|
this.moveGroupOrPanel(view, groupId, itemId, target, index);
|
|
390
|
+
}), view.model.onDidDrop((event) => {
|
|
391
|
+
this._onDidDrop.fire(Object.assign(Object.assign({}, event), { api: this._api }));
|
|
431
392
|
}), view.model.onDidGroupChange((event) => {
|
|
432
393
|
switch (event.kind) {
|
|
433
394
|
case GroupChangeKind2.ADD_PANEL:
|
|
@@ -435,24 +396,25 @@ export class DockviewComponent extends BaseGrid {
|
|
|
435
396
|
kind: GroupChangeKind.ADD_PANEL,
|
|
436
397
|
panel: event.panel,
|
|
437
398
|
});
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
kind: GroupChangeKind.GROUP_ACTIVE,
|
|
442
|
-
panel: event.panel,
|
|
443
|
-
});
|
|
399
|
+
if (event.panel) {
|
|
400
|
+
this._onDidAddPanel.fire(event.panel);
|
|
401
|
+
}
|
|
444
402
|
break;
|
|
445
403
|
case GroupChangeKind2.REMOVE_PANEL:
|
|
446
404
|
this._onGridEvent.fire({
|
|
447
405
|
kind: GroupChangeKind.REMOVE_PANEL,
|
|
448
406
|
panel: event.panel,
|
|
449
407
|
});
|
|
408
|
+
if (event.panel) {
|
|
409
|
+
this._onDidRemovePanel.fire(event.panel);
|
|
410
|
+
}
|
|
450
411
|
break;
|
|
451
412
|
case GroupChangeKind2.PANEL_ACTIVE:
|
|
452
413
|
this._onGridEvent.fire({
|
|
453
414
|
kind: GroupChangeKind.PANEL_ACTIVE,
|
|
454
415
|
panel: event.panel,
|
|
455
416
|
});
|
|
417
|
+
this._onDidActivePanelChange.fire(event.panel);
|
|
456
418
|
break;
|
|
457
419
|
}
|
|
458
420
|
}));
|
|
@@ -466,46 +428,18 @@ export class DockviewComponent extends BaseGrid {
|
|
|
466
428
|
}
|
|
467
429
|
return view;
|
|
468
430
|
}
|
|
469
|
-
dispose() {
|
|
470
|
-
super.dispose();
|
|
471
|
-
this._onGridEvent.dispose();
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* Ensure the local copy of the layout state is up-to-date
|
|
475
|
-
*/
|
|
476
|
-
syncConfigs() {
|
|
477
|
-
const dirtyPanels = Array.from(this.dirtyPanels);
|
|
478
|
-
if (dirtyPanels.length === 0) {
|
|
479
|
-
//
|
|
480
|
-
}
|
|
481
|
-
this.dirtyPanels.clear();
|
|
482
|
-
const partialPanelState = dirtyPanels
|
|
483
|
-
.map((panel) => this._panels.get(panel.id))
|
|
484
|
-
.filter((_) => !!_)
|
|
485
|
-
.reduce((collection, panel) => {
|
|
486
|
-
collection[panel.value.id] = panel.value.toJSON();
|
|
487
|
-
return collection;
|
|
488
|
-
}, {});
|
|
489
|
-
this.panelState = Object.assign(Object.assign({}, this.panelState), partialPanelState);
|
|
490
|
-
dirtyPanels
|
|
491
|
-
.filter((p) => this._panels.has(p.id))
|
|
492
|
-
.forEach((panel) => {
|
|
493
|
-
panel.setDirty(false);
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
431
|
_addPanel(options) {
|
|
497
432
|
const view = new DefaultGroupPanelView({
|
|
498
433
|
content: this.createContentComponent(options.id, options.component),
|
|
499
434
|
tab: this.createTabComponent(options.id, options.tabComponent),
|
|
500
435
|
});
|
|
501
|
-
const panel = new DockviewGroupPanel(options.id, this._api);
|
|
436
|
+
const panel = new DockviewGroupPanel(options.id, this, this._api);
|
|
502
437
|
panel.init({
|
|
503
438
|
view,
|
|
504
439
|
title: options.title || options.id,
|
|
505
440
|
suppressClosable: options === null || options === void 0 ? void 0 : options.suppressClosable,
|
|
506
441
|
params: (options === null || options === void 0 ? void 0 : options.params) || {},
|
|
507
442
|
});
|
|
508
|
-
this.registerPanel(panel);
|
|
509
443
|
return panel;
|
|
510
444
|
}
|
|
511
445
|
createContentComponent(id, componentName) {
|
|
@@ -525,9 +459,11 @@ export class DockviewComponent extends BaseGrid {
|
|
|
525
459
|
var _a;
|
|
526
460
|
return (_a = Array.from(this._groups.values()).find((group) => group.value.model.containsPanel(panel))) === null || _a === void 0 ? void 0 : _a.value;
|
|
527
461
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
this.
|
|
462
|
+
dispose() {
|
|
463
|
+
super.dispose();
|
|
464
|
+
this._onDidActivePanelChange.dispose();
|
|
465
|
+
this._onDidAddPanel.dispose();
|
|
466
|
+
this._onDidRemovePanel.dispose();
|
|
467
|
+
this._onDidLayoutfromJSON.dispose();
|
|
532
468
|
}
|
|
533
469
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { DockviewApi } from '../api/component.api';
|
|
2
2
|
import { DockviewPanelApiImpl } from '../api/groupPanelApi';
|
|
3
|
-
import { Event } from '../events';
|
|
4
3
|
import { GroupPanelUpdateEvent, GroupviewPanelState, IGroupPanel, IGroupPanelInitParameters } from '../groupview/groupPanel';
|
|
5
4
|
import { GroupviewPanel } from '../groupview/groupviewPanel';
|
|
6
5
|
import { CompositeDisposable } from '../lifecycle';
|
|
7
6
|
import { IGroupPanelView } from './defaultGroupPanelView';
|
|
7
|
+
import { DockviewComponent } from './dockviewComponent';
|
|
8
8
|
export declare class DockviewGroupPanel extends CompositeDisposable implements IGroupPanel {
|
|
9
9
|
readonly id: string;
|
|
10
10
|
private readonly containerApi;
|
|
@@ -12,7 +12,6 @@ export declare class DockviewGroupPanel extends CompositeDisposable implements I
|
|
|
12
12
|
readonly api: DockviewPanelApiImpl;
|
|
13
13
|
private _group;
|
|
14
14
|
private _params?;
|
|
15
|
-
readonly onDidStateChange: Event<void>;
|
|
16
15
|
private _view?;
|
|
17
16
|
private _title;
|
|
18
17
|
private _suppressClosable;
|
|
@@ -20,11 +19,9 @@ export declare class DockviewGroupPanel extends CompositeDisposable implements I
|
|
|
20
19
|
get suppressClosable(): boolean;
|
|
21
20
|
get group(): GroupviewPanel | undefined;
|
|
22
21
|
get view(): IGroupPanelView | undefined;
|
|
23
|
-
constructor(id: string, containerApi: DockviewApi);
|
|
22
|
+
constructor(id: string, accessor: DockviewComponent, containerApi: DockviewApi);
|
|
24
23
|
init(params: IGroupPanelInitParameters): void;
|
|
25
24
|
focus(): void;
|
|
26
|
-
setDirty(isDirty: boolean): void;
|
|
27
|
-
close(): Promise<boolean>;
|
|
28
25
|
toJSON(): GroupviewPanelState;
|
|
29
26
|
setTitle(title: string): void;
|
|
30
27
|
setSuppressClosable(suppressClosable: boolean): void;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { GroupChangeKind2 } from '../groupview/groupview';
|
|
2
1
|
import { DockviewPanelApiImpl } from '../api/groupPanelApi';
|
|
3
2
|
import { CompositeDisposable, MutableDisposable } from '../lifecycle';
|
|
4
3
|
export class DockviewGroupPanel extends CompositeDisposable {
|
|
5
|
-
constructor(id, containerApi) {
|
|
4
|
+
constructor(id, accessor, containerApi) {
|
|
6
5
|
super();
|
|
7
6
|
this.id = id;
|
|
8
7
|
this.containerApi = containerApi;
|
|
@@ -10,9 +9,8 @@ export class DockviewGroupPanel extends CompositeDisposable {
|
|
|
10
9
|
this._suppressClosable = false;
|
|
11
10
|
this._title = '';
|
|
12
11
|
this.api = new DockviewPanelApiImpl(this, this._group);
|
|
13
|
-
this.onDidStateChange = this.api.onDidStateChange;
|
|
14
12
|
this.addDisposables(this.api.onActiveChange(() => {
|
|
15
|
-
|
|
13
|
+
accessor.setActivePanel(this);
|
|
16
14
|
}), this.api.onDidTitleChange((event) => {
|
|
17
15
|
const title = event.title;
|
|
18
16
|
this.update({ params: { title } });
|
|
@@ -36,32 +34,18 @@ export class DockviewGroupPanel extends CompositeDisposable {
|
|
|
36
34
|
this._view = params.view;
|
|
37
35
|
this.setTitle(params.title);
|
|
38
36
|
this.setSuppressClosable(params.suppressClosable || false);
|
|
39
|
-
if (params.state) {
|
|
40
|
-
this.api.setState(params.state);
|
|
41
|
-
}
|
|
42
37
|
(_a = this.view) === null || _a === void 0 ? void 0 : _a.init(Object.assign(Object.assign({}, params), { api: this.api, containerApi: this.containerApi }));
|
|
43
38
|
}
|
|
44
39
|
focus() {
|
|
45
40
|
this.api._onFocusEvent.fire();
|
|
46
41
|
}
|
|
47
|
-
setDirty(isDirty) {
|
|
48
|
-
this.api._onDidDirtyChange.fire(isDirty);
|
|
49
|
-
}
|
|
50
|
-
close() {
|
|
51
|
-
if (this.api.tryClose) {
|
|
52
|
-
return this.api.tryClose();
|
|
53
|
-
}
|
|
54
|
-
return Promise.resolve(true);
|
|
55
|
-
}
|
|
56
42
|
toJSON() {
|
|
57
|
-
const state = this.api.getState();
|
|
58
43
|
return {
|
|
59
44
|
id: this.id,
|
|
60
45
|
view: this.view.toJSON(),
|
|
61
46
|
params: Object.keys(this._params || {}).length > 0
|
|
62
47
|
? this._params
|
|
63
48
|
: undefined,
|
|
64
|
-
state: state && Object.keys(state).length > 0 ? state : undefined,
|
|
65
49
|
suppressClosable: this.suppressClosable || undefined,
|
|
66
50
|
title: this.title,
|
|
67
51
|
};
|
|
@@ -106,18 +90,6 @@ export class DockviewGroupPanel extends CompositeDisposable {
|
|
|
106
90
|
var _a;
|
|
107
91
|
this._group = group;
|
|
108
92
|
this.api.group = group;
|
|
109
|
-
this.mutableDisposable.value = this._group.model.onDidGroupChange((ev) => {
|
|
110
|
-
var _a;
|
|
111
|
-
if (ev.kind === GroupChangeKind2.GROUP_ACTIVE) {
|
|
112
|
-
const isVisible = !!((_a = this._group) === null || _a === void 0 ? void 0 : _a.model.isPanelActive(this));
|
|
113
|
-
this.api._onDidActiveChange.fire({
|
|
114
|
-
isActive: isGroupActive && isVisible,
|
|
115
|
-
});
|
|
116
|
-
this.api._onDidVisibilityChange.fire({
|
|
117
|
-
isVisible,
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
93
|
const isPanelVisible = this._group.model.isPanelActive(this);
|
|
122
94
|
this.api._onDidActiveChange.fire({
|
|
123
95
|
isActive: isGroupActive && isPanelVisible,
|
|
@@ -6,6 +6,7 @@ import { IContentRenderer, ITabRenderer, WatermarkConstructor, IWatermarkRendere
|
|
|
6
6
|
import { GroupviewPanel } from '../groupview/groupviewPanel';
|
|
7
7
|
import { ISplitviewStyles, Orientation } from '../splitview/core/splitview';
|
|
8
8
|
import { FrameworkFactory } from '../types';
|
|
9
|
+
import { DockviewDropTargets } from '../groupview/dnd';
|
|
9
10
|
export interface GroupPanelFrameworkComponentFactory {
|
|
10
11
|
content: FrameworkFactory<IContentRenderer>;
|
|
11
12
|
tab: FrameworkFactory<ITabRenderer>;
|
|
@@ -44,9 +45,9 @@ export interface DockviewOptions extends DockviewRenderFunctions {
|
|
|
44
45
|
frameworkComponentFactory?: GroupPanelFrameworkComponentFactory;
|
|
45
46
|
tabHeight?: number;
|
|
46
47
|
debug?: boolean;
|
|
47
|
-
enableExternalDragEvents?: boolean;
|
|
48
48
|
orientation?: Orientation;
|
|
49
49
|
styles?: ISplitviewStyles;
|
|
50
|
+
showDndOverlay?: (event: DragEvent, target: DockviewDropTargets) => boolean;
|
|
50
51
|
}
|
|
51
52
|
export interface PanelOptions {
|
|
52
53
|
component: string;
|
package/dist/esm/events.d.ts
CHANGED
|
@@ -21,3 +21,10 @@ export declare class Emitter<T> implements IDisposable {
|
|
|
21
21
|
}
|
|
22
22
|
export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
23
23
|
export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
24
|
+
export declare class TickDelayedEvent implements IDisposable {
|
|
25
|
+
private timer;
|
|
26
|
+
private readonly _onFired;
|
|
27
|
+
readonly onEvent: Event<void>;
|
|
28
|
+
fire(): void;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
package/dist/esm/events.js
CHANGED
|
@@ -28,7 +28,6 @@ export class Emitter {
|
|
|
28
28
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
|
|
29
29
|
listener(this._last);
|
|
30
30
|
}
|
|
31
|
-
const firstListener = this._listeners.length === 0;
|
|
32
31
|
this._listeners.push(listener);
|
|
33
32
|
return {
|
|
34
33
|
dispose: () => {
|
|
@@ -44,9 +43,9 @@ export class Emitter {
|
|
|
44
43
|
}
|
|
45
44
|
fire(e) {
|
|
46
45
|
this._last = e;
|
|
47
|
-
this._listeners
|
|
46
|
+
for (const listener of this._listeners) {
|
|
48
47
|
listener(e);
|
|
49
|
-
}
|
|
48
|
+
}
|
|
50
49
|
}
|
|
51
50
|
dispose() {
|
|
52
51
|
this._listeners = [];
|
|
@@ -69,3 +68,21 @@ export function addDisposableListener(element, type, listener, options) {
|
|
|
69
68
|
},
|
|
70
69
|
};
|
|
71
70
|
}
|
|
71
|
+
export class TickDelayedEvent {
|
|
72
|
+
constructor() {
|
|
73
|
+
this._onFired = new Emitter();
|
|
74
|
+
this.onEvent = this._onFired.event;
|
|
75
|
+
}
|
|
76
|
+
fire() {
|
|
77
|
+
if (this.timer) {
|
|
78
|
+
clearTimeout(this.timer);
|
|
79
|
+
}
|
|
80
|
+
this.timer = setTimeout(() => {
|
|
81
|
+
this._onFired.fire();
|
|
82
|
+
clearTimeout(this.timer);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
dispose() {
|
|
86
|
+
this._onFired.dispose();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -45,6 +45,9 @@ export interface IBaseGrid<T extends IGridPanelView> {
|
|
|
45
45
|
readonly groups: T[];
|
|
46
46
|
readonly onGridEvent: Event<GroupChangeEvent>;
|
|
47
47
|
readonly onDidLayoutChange: Event<void>;
|
|
48
|
+
readonly onDidRemoveGroup: Event<T>;
|
|
49
|
+
readonly onDidAddGroup: Event<T>;
|
|
50
|
+
readonly onDidActiveGroupChange: Event<T | undefined>;
|
|
48
51
|
getPanel(id: string): T | undefined;
|
|
49
52
|
toJSON(): object;
|
|
50
53
|
fromJSON(data: any): void;
|
|
@@ -63,6 +66,12 @@ export declare abstract class BaseGrid<T extends IGridPanelView> extends Composi
|
|
|
63
66
|
readonly onGridEvent: Event<GroupChangeEvent>;
|
|
64
67
|
private _onDidLayoutChange;
|
|
65
68
|
readonly onDidLayoutChange: Event<void>;
|
|
69
|
+
private readonly _onDidRemoveGroup;
|
|
70
|
+
readonly onDidRemoveGroup: Event<T>;
|
|
71
|
+
private readonly _onDidAddGroup;
|
|
72
|
+
readonly onDidAddGroup: Event<T>;
|
|
73
|
+
private readonly _onDidActiveGroupChange;
|
|
74
|
+
readonly onDidActiveGroupChange: Event<T | undefined>;
|
|
66
75
|
get id(): string;
|
|
67
76
|
get element(): HTMLElement;
|
|
68
77
|
get size(): number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Emitter } from '../events';
|
|
1
|
+
import { Emitter, TickDelayedEvent } from '../events';
|
|
2
2
|
import { getGridLocation, Gridview } from './gridview';
|
|
3
3
|
import { Position } from '../dnd/droptarget';
|
|
4
4
|
import { CompositeDisposable } from '../lifecycle';
|
|
@@ -44,19 +44,21 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
44
44
|
this.onGridEvent = this._onGridEvent.event;
|
|
45
45
|
this._onDidLayoutChange = new Emitter();
|
|
46
46
|
this.onDidLayoutChange = this._onDidLayoutChange.event;
|
|
47
|
+
this._onDidRemoveGroup = new Emitter();
|
|
48
|
+
this.onDidRemoveGroup = this._onDidRemoveGroup.event;
|
|
49
|
+
this._onDidAddGroup = new Emitter();
|
|
50
|
+
this.onDidAddGroup = this._onDidAddGroup.event;
|
|
51
|
+
this._onDidActiveGroupChange = new Emitter();
|
|
52
|
+
this.onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
|
47
53
|
this.gridview = new Gridview(!!options.proportionalLayout, options.styles, options.orientation);
|
|
48
54
|
this.element.appendChild(this.gridview.element);
|
|
49
|
-
|
|
50
|
-
this.layout(0, 0, true);
|
|
55
|
+
this.layout(0, 0, true); // set some elements height/widths
|
|
51
56
|
this.addDisposables(this.gridview.onDidChange(() => {
|
|
52
57
|
this._onGridEvent.fire({ kind: GroupChangeKind.LAYOUT });
|
|
53
58
|
}));
|
|
54
59
|
this.addDisposables((() => {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
*/
|
|
58
|
-
let timer;
|
|
59
|
-
return this.onGridEvent((event) => {
|
|
60
|
+
const tickDelayedEvent = new TickDelayedEvent();
|
|
61
|
+
return new CompositeDisposable(this.onGridEvent((event) => {
|
|
60
62
|
if ([
|
|
61
63
|
GroupChangeKind.ADD_GROUP,
|
|
62
64
|
GroupChangeKind.REMOVE_GROUP,
|
|
@@ -66,15 +68,11 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
66
68
|
GroupChangeKind.PANEL_ACTIVE,
|
|
67
69
|
GroupChangeKind.LAYOUT,
|
|
68
70
|
].includes(event.kind)) {
|
|
69
|
-
|
|
70
|
-
clearTimeout(timer);
|
|
71
|
-
}
|
|
72
|
-
timer = setTimeout(() => {
|
|
73
|
-
this._onDidLayoutChange.fire();
|
|
74
|
-
clearTimeout(timer);
|
|
75
|
-
});
|
|
71
|
+
tickDelayedEvent.fire();
|
|
76
72
|
}
|
|
77
|
-
})
|
|
73
|
+
}), tickDelayedEvent.onEvent(() => {
|
|
74
|
+
this._onDidLayoutChange.fire();
|
|
75
|
+
}), tickDelayedEvent);
|
|
78
76
|
})());
|
|
79
77
|
}
|
|
80
78
|
get id() {
|
|
@@ -120,6 +118,7 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
120
118
|
doAddGroup(group, location = [0], size) {
|
|
121
119
|
this.gridview.addView(group, size !== null && size !== void 0 ? size : Sizing.Distribute, location);
|
|
122
120
|
this._onGridEvent.fire({ kind: GroupChangeKind.ADD_GROUP });
|
|
121
|
+
this._onDidAddGroup.fire(group);
|
|
123
122
|
this.doSetGroupActive(group);
|
|
124
123
|
}
|
|
125
124
|
doRemoveGroup(group, options) {
|
|
@@ -133,6 +132,7 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
133
132
|
this._groups.delete(group.id);
|
|
134
133
|
}
|
|
135
134
|
this._onGridEvent.fire({ kind: GroupChangeKind.REMOVE_GROUP });
|
|
135
|
+
this._onDidRemoveGroup.fire(group);
|
|
136
136
|
if (!(options === null || options === void 0 ? void 0 : options.skipActive) && this._activeGroup === group) {
|
|
137
137
|
const groups = Array.from(this._groups.values());
|
|
138
138
|
this.doSetGroupActive(groups.length > 0 ? groups[0].value : undefined);
|
|
@@ -163,6 +163,7 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
163
163
|
this._onGridEvent.fire({
|
|
164
164
|
kind: GroupChangeKind.GROUP_ACTIVE,
|
|
165
165
|
});
|
|
166
|
+
this._onDidActiveGroupChange.fire(group);
|
|
166
167
|
}
|
|
167
168
|
removeGroup(group) {
|
|
168
169
|
this.doRemoveGroup(group);
|
|
@@ -219,6 +220,10 @@ export class BaseGrid extends CompositeDisposable {
|
|
|
219
220
|
dispose() {
|
|
220
221
|
super.dispose();
|
|
221
222
|
this._onGridEvent.dispose();
|
|
223
|
+
this._onDidActiveGroupChange.dispose();
|
|
224
|
+
this._onDidAddGroup.dispose();
|
|
225
|
+
this._onDidRemoveGroup.dispose();
|
|
226
|
+
this._onDidLayoutChange.dispose();
|
|
222
227
|
this.gridview.dispose();
|
|
223
228
|
}
|
|
224
229
|
}
|