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 picoSDKQuickPick = "raspberry-pi-pico.sdk-quick-pick",
10 const STATUS_BAR_ITEMS: {
11 [key: string]: { text: string; command: string; tooltip: string };
13 [StatusBarItemKey.compile]: {
14 // alt. "$(gear) Compile"
15 text: "$(file-binary) Build UF2",
16 command: "raspberry-pi-pico.compileProject",
17 tooltip: "Compile project",
19 [StatusBarItemKey.picoSDKQuickPick]: {
20 text: "Pico SDK: <version>",
21 command: "raspberry-pi-pico.switchSDK",
22 tooltip: "Select Pico SDK",
26 export default class UI {
27 private _logger: Logger;
28 private _items: { [key: string]: StatusBarItem } = {};
30 constructor(private readonly _activityBarProvider: PicoProjectActivityBar) {
31 this._logger = new Logger("UI");
35 this._logger.info("Initializing UI");
37 Object.entries(STATUS_BAR_ITEMS).forEach(([key, value]) => {
38 this._items[key] = this.createStatusBarItem(
47 public showStatusBarItems(): void {
48 Object.values(this._items).forEach(item => item.show());
51 public updateSDKVersion(version: string): void {
52 this._items[StatusBarItemKey.picoSDKQuickPick].text = STATUS_BAR_ITEMS[
53 StatusBarItemKey.picoSDKQuickPick
54 ].text.replace("<version>", version);
55 this._activityBarProvider.refresh(version);
60 * Returns the selected Pico SDK version from the status bar.
63 public getUIPicoSDKVersion(): string {
64 /* unsafe, Needs to be updated if the status bar item format ever changes
66 return this._items[StatusBarItemKey.picoSDKQuickPick].text
69 return this._sdkVersion;
72 private createStatusBarItem(
78 const item = window.createStatusBarItem(key, StatusBarAlignment.Right);
80 item.command = command;
81 item.tooltip = tooltip;