-
-
Notifications
You must be signed in to change notification settings - Fork 436
/
Copy pathdebug-widget.ts
56 lines (51 loc) · 1.92 KB
/
debug-widget.ts
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
import { codicon } from '@theia/core/lib/browser/widgets/widget';
import { Widget } from '@theia/core/shared/@phosphor/widgets';
import {
inject,
injectable,
postConstruct,
} from '@theia/core/shared/inversify';
import { DebugWidget as TheiaDebugWidget } from '@theia/debug/lib/browser/view/debug-widget';
import { DebugDisabledStatusMessageSource } from '../../contributions/debug';
import {
removeWidgetIfPresent,
unshiftWidgetIfNotPresent,
} from '../dialogs/widgets';
@injectable()
export class DebugWidget extends TheiaDebugWidget {
@inject(DebugDisabledStatusMessageSource)
private readonly debugStatusMessageSource: DebugDisabledStatusMessageSource;
private readonly statusMessageWidget = new Widget();
private readonly messageNode = document.createElement('div');
@postConstruct()
protected override init(): void {
super.init();
this.messageNode.classList.add('status-message', 'noselect');
this.statusMessageWidget.node.appendChild(this.messageNode);
this.updateState();
this.toDisposeOnDetach.pushAll([
this.debugStatusMessageSource.onDidChangeMessage((message) =>
this.updateState(message)
),
this.statusMessageWidget,
]);
}
private updateState(message = this.debugStatusMessageSource.message): void {
requestAnimationFrame(() => {
this.messageNode.textContent = message ?? '';
const enabled = !message;
updateVisibility(enabled, this.toolbar, this.sessionWidget);
if (enabled) {
removeWidgetIfPresent(this.layout, this.statusMessageWidget);
} else {
unshiftWidgetIfNotPresent(this.layout, this.statusMessageWidget);
}
this.title.iconClass = enabled ? codicon('debug-alt') : 'fa fa-ban'; // TODO: find a better icon?
});
}
}
function updateVisibility(visible: boolean, ...widgets: Widget[]): void {
widgets.forEach((widget) =>
visible ? widget.removeClass('hidden') : widget.addClass('hidden')
);
}