1 import { window, type StatusBarItem, StatusBarAlignment } from "vscode";
2 import Logger from "./logger.mjs";
3 import type { PicoProjectActivityBar } from "./webview/activityBar.mjs";
5 enum StatusBarItemKey {
6 compile = "raspberry-pi-pico.compileProject",
7 run = "raspberry-pi-pico.runProject",
8 picoSDKQuickPick = "raspberry-pi-pico.sdk-quick-pick",
9 picoBoardQuickPick = "raspberry-pi-pico.board-quick-pick",
12 const STATUS_BAR_ITEMS: {
13 [key: string]: { text: string; command: string; tooltip: string };
15 [StatusBarItemKey.compile]: {
16 // alt. "$(gear) Compile"
17 text: "$(file-binary) Compile",
18 command: "raspberry-pi-pico.compileProject",
19 tooltip: "Compile Project",
21 [StatusBarItemKey.run]: {
22 // alt. "$(gear) Compile"
24 command: "raspberry-pi-pico.runProject",
25 tooltip: "Run Project",
27 [StatusBarItemKey.picoSDKQuickPick]: {
28 text: "Pico SDK: <version>",
29 command: "raspberry-pi-pico.switchSDK",
30 tooltip: "Select Pico SDK",
32 [StatusBarItemKey.picoBoardQuickPick]: {
33 text: "Board: <board>",
34 command: "raspberry-pi-pico.switchBoard",
35 tooltip: "Select Board",
39 export default class UI {
40 private _logger: Logger;
41 private _items: { [key: string]: StatusBarItem } = {};
43 constructor(private readonly _activityBarProvider: PicoProjectActivityBar) {
44 this._logger = new Logger("UI");
48 this._logger.info("Initializing UI");
50 Object.entries(STATUS_BAR_ITEMS).forEach(([key, value]) => {
51 this._items[key] = this.createStatusBarItem(
60 public showStatusBarItems(): void {
61 Object.values(this._items).forEach(item => item.show());
64 public updateSDKVersion(version: string): void {
65 this._items[StatusBarItemKey.picoSDKQuickPick].text = STATUS_BAR_ITEMS[
66 StatusBarItemKey.picoSDKQuickPick
67 ].text.replace("<version>", version);
68 this._activityBarProvider.refresh(version);
71 public updateBoard(board: string): void {
72 this._items[StatusBarItemKey.picoBoardQuickPick].text = STATUS_BAR_ITEMS[
73 StatusBarItemKey.picoBoardQuickPick
74 ].text.replace("<board>", board);
79 * Returns the selected Pico SDK version from the status bar.
82 public getUIPicoSDKVersion(): string {
83 /* unsafe, Needs to be updated if the status bar item format ever changes
85 return this._items[StatusBarItemKey.picoSDKQuickPick].text
88 return this._sdkVersion;
91 private createStatusBarItem(
97 const item = window.createStatusBarItem(key, StatusBarAlignment.Right);
99 item.command = command;
100 item.tooltip = tooltip;