Skip to content

Commit b4a5f5e

Browse files
committed
Extract status item into its own class.
1 parent 74b4e76 commit b4a5f5e

File tree

3 files changed

+57
-37
lines changed

3 files changed

+57
-37
lines changed

src/debugger.ts

+3-32
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { CXXRTLConnection, CXXRTLDebugItem, CXXRTLDebugItemType, CXXRTLNodeDesig
55
import { TimePoint } from './model/time';
66
import { Scope } from './model/scope';
77
import { Variable } from './model/variable';
8+
import { StatusItemController } from './ui/status';
89

910
export enum CXXRTLSessionStatus {
1011
Absent = "absent",
@@ -13,7 +14,7 @@ export enum CXXRTLSessionStatus {
1314
}
1415

1516
export class CXXRTLDebugger {
16-
private statusItem: vscode.StatusBarItem;
17+
private statusItemController: StatusItemController;
1718
private terminal: vscode.Terminal | null = null;
1819
private connection: CXXRTLConnection | null = null;
1920

@@ -44,37 +45,7 @@ export class CXXRTLDebugger {
4445
readonly onDidChangeLatestTime: vscode.Event<TimePoint> = this._onDidChangeLatestTime.event;
4546

4647
constructor() {
47-
this.statusItem = vscode.window.createStatusBarItem('rtlDebugger', vscode.StatusBarAlignment.Left, 10);
48-
this.statusItem.tooltip = 'RTL Debugger Status';
49-
this.statusItem.command = 'rtlDebugger.runPauseSimulation';
50-
this.onDidChangeSessionStatus((_state) => this.updateStatusItem());
51-
this.onDidChangeCurrentTime((_time) => this.updateStatusItem());
52-
this.onDidChangeSimulationStatus((_state) => this.updateStatusItem());
53-
this.onDidChangeLatestTime((_time) => this.updateStatusItem());
54-
}
55-
56-
private updateStatusItem() {
57-
if (this.sessionStatus === CXXRTLSessionStatus.Absent) {
58-
this.statusItem.hide();
59-
} else {
60-
this.statusItem.show();
61-
if (this.sessionStatus === CXXRTLSessionStatus.Starting) {
62-
this.statusItem.text = `$(gear~spin) Starting...`;
63-
this.statusItem.tooltip = `RTL Debugger: Starting`;
64-
} else { // this.sessionState === CXXRTLSessionState.Running
65-
if (this.simulationStatus === CXXRTLSimulationStatus.Running) {
66-
this.statusItem.text = '$(debug-pause) ';
67-
this.statusItem.tooltip = `RTL Debugger: Running`;
68-
} else if (this.simulationStatus === CXXRTLSimulationStatus.Paused) {
69-
this.statusItem.text = '$(debug-continue) ';
70-
this.statusItem.tooltip = `RTL Debugger: Paused`;
71-
} else if (this.simulationStatus === CXXRTLSimulationStatus.Finished) {
72-
this.statusItem.text = '';
73-
this.statusItem.tooltip = `RTL Debugger: Finished`;
74-
}
75-
this.statusItem.text += `${this.currentTime} / ${this.latestTime}`;
76-
}
77-
}
48+
this.statusItemController = new StatusItemController(this);
7849
}
7950

8051
public dispose() {

src/ui/sidebar.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -192,17 +192,17 @@ export class TreeDataProvider implements vscode.TreeDataProvider<TreeItem> {
192192
constructor(
193193
readonly rtlDebugger: CXXRTLDebugger
194194
) {
195+
vscode.workspace.onDidChangeConfiguration((event) => {
196+
if (event.affectsConfiguration('rtlDebugger.displayStyle')) {
197+
this._onDidChangeTreeData.fire(null);
198+
}
199+
});
195200
rtlDebugger.onDidChangeSessionStatus((_state) => {
196201
this._onDidChangeTreeData.fire(null);
197202
});
198203
rtlDebugger.onDidChangeCurrentTime((_time) => {
199204
this._onDidChangeTreeData.fire(null);
200205
});
201-
vscode.workspace.onDidChangeConfiguration((event) => {
202-
if (event.affectsConfiguration('rtlDebugger.displayStyle')) {
203-
this._onDidChangeTreeData.fire(null);
204-
}
205-
});
206206
}
207207

208208
getTreeItem(element: TreeItem): vscode.TreeItem | Thenable<vscode.TreeItem> {

src/ui/status.ts

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import * as vscode from 'vscode';
2+
import { CXXRTLDebugger, CXXRTLSessionStatus } from '../debugger';
3+
import { CXXRTLSimulationStatus } from '../connection';
4+
5+
export class StatusItemController {
6+
private statusItem: vscode.StatusBarItem;
7+
private subscriptions: vscode.Disposable[] = [];
8+
9+
constructor(
10+
private rtlDebugger: CXXRTLDebugger
11+
) {
12+
this.statusItem = vscode.window.createStatusBarItem('rtlDebugger', vscode.StatusBarAlignment.Left, 10);
13+
this.statusItem.tooltip = 'RTL Debugger Status';
14+
this.statusItem.command = 'rtlDebugger.runPauseSimulation';
15+
16+
rtlDebugger.onDidChangeSessionStatus((_state) => this.update(), this.subscriptions);
17+
rtlDebugger.onDidChangeCurrentTime((_time) => this.update(), this.subscriptions);
18+
rtlDebugger.onDidChangeSimulationStatus((_state) => this.update(), this.subscriptions);
19+
rtlDebugger.onDidChangeLatestTime((_time) => this.update(), this.subscriptions);
20+
}
21+
22+
dispose() {
23+
this.subscriptions.splice(0, this.subscriptions.length).forEach(sub => sub.dispose());
24+
}
25+
26+
private update() {
27+
if (this.rtlDebugger.sessionStatus === CXXRTLSessionStatus.Absent) {
28+
this.statusItem.hide();
29+
} else {
30+
this.statusItem.show();
31+
if (this.rtlDebugger.sessionStatus === CXXRTLSessionStatus.Starting) {
32+
this.statusItem.text = `$(gear~spin) Starting...`;
33+
this.statusItem.tooltip = `RTL Debugger: Starting`;
34+
} else { // this.sessionState === CXXRTLSessionState.Running
35+
if (this.rtlDebugger.simulationStatus === CXXRTLSimulationStatus.Running) {
36+
this.statusItem.text = '$(debug-pause) ';
37+
this.statusItem.tooltip = `RTL Debugger: Running`;
38+
} else if (this.rtlDebugger.simulationStatus === CXXRTLSimulationStatus.Paused) {
39+
this.statusItem.text = '$(debug-continue) ';
40+
this.statusItem.tooltip = `RTL Debugger: Paused`;
41+
} else if (this.rtlDebugger.simulationStatus === CXXRTLSimulationStatus.Finished) {
42+
this.statusItem.text = '';
43+
this.statusItem.tooltip = `RTL Debugger: Finished`;
44+
}
45+
this.statusItem.text += `${this.rtlDebugger.currentTime} / ${this.rtlDebugger.latestTime}`;
46+
}
47+
}
48+
}
49+
};

0 commit comments

Comments
 (0)