1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as DOM from 'vs/base/browser/dom';
import { ToolBar } from 'vs/base/browser/ui/toolbar/toolbar';
import { IAction } from 'vs/base/common/actions';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem';
import { IMenu, IMenuService, MenuItemAction } from 'vs/platform/actions/common/actions';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { INotebookActionContext } from 'vs/workbench/contrib/notebook/browser/controller/coreActions';
import { INotebookEditorDelegate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { CodiconActionViewItem } from 'vs/workbench/contrib/notebook/browser/view/cellParts/cellActionView';
export class ListTopCellToolbar extends Disposable {
private topCellToolbar: HTMLElement;
private menu: IMenu;
private toolbar: ToolBar;
private readonly _modelDisposables = this._register(new DisposableStore());
constructor(
protected readonly notebookEditor: INotebookEditorDelegate,
contextKeyService: IContextKeyService,
insertionIndicatorContainer: HTMLElement,
@IInstantiationService protected readonly instantiationService: IInstantiationService,
@IContextMenuService protected readonly contextMenuService: IContextMenuService,
@IMenuService protected readonly menuService: IMenuService
) {
super();
this.topCellToolbar = DOM.append(insertionIndicatorContainer, DOM.$('.cell-list-top-cell-toolbar-container'));
this.toolbar = this._register(new ToolBar(this.topCellToolbar, this.contextMenuService, {
actionViewItemProvider: action => {
if (action instanceof MenuItemAction) {
const item = this.instantiationService.createInstance(CodiconActionViewItem, action, undefined);
return item;
}
return undefined;
}
}));
this.toolbar.context = <INotebookActionContext>{
notebookEditor
};
this.menu = this._register(this.menuService.createMenu(this.notebookEditor.creationOptions.menuIds.cellTopInsertToolbar, contextKeyService));
this._register(this.menu.onDidChange(() => {
this.updateActions();
}));
this.updateActions();
// update toolbar container css based on cell list length
this._register(this.notebookEditor.onDidChangeModel(() => {
this._modelDisposables.clear();
if (this.notebookEditor.hasModel()) {
this._modelDisposables.add(this.notebookEditor.onDidChangeViewCells(() => {
this.updateClass();
}));
this.updateClass();
}
}));
this.updateClass();
}
private updateActions() {
const actions = this.getCellToolbarActions(this.menu, false);
this.toolbar.setActions(actions.primary, actions.secondary);
}
private updateClass() {
if (this.notebookEditor.hasModel() && this.notebookEditor.getLength() === 0) {
this.topCellToolbar.classList.add('emptyNotebook');
} else {
this.topCellToolbar.classList.remove('emptyNotebook');
}
}
private getCellToolbarActions(menu: IMenu, alwaysFillSecondaryActions: boolean): { primary: IAction[]; secondary: IAction[] } {
type NewType = IAction;
const primary: NewType[] = [];
const secondary: IAction[] = [];
const result = { primary, secondary };
createAndFillInActionBarActions(menu, { shouldForwardArgs: true }, result, g => /^inline/.test(g));
return result;
}
}
|