diff --git a/README.md b/README.md index fc09cb67..d5a881aa 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,7 @@ | `leetcode.useWsl` | Specify whether to use WSL or not | `false` | | `leetcode.endpoint` | Specify the active endpoint. Supported endpoints are: `leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.outputFolder`| Specify the relative path to save the problem files. Besides using customized path, there are also several reserved words which can be used here: | N/A | +| `leetcode.enableStatusBar` | Specify whether the LeetCode status bar will be shown or not. | `true` | ## Troubleshooting When you meet any problem, you can check the [Troubleshooting Page](https://github.com/jdneo/vscode-leetcode/wiki/Troubleshooting) first. diff --git a/docs/README_zh-CN.md b/docs/README_zh-CN.md index fc66aeaf..dda1b4ac 100644 --- a/docs/README_zh-CN.md +++ b/docs/README_zh-CN.md @@ -137,6 +137,7 @@ | `leetcode.useWsl` | 指定是否启用 WSL | `false` | | `leetcode.endpoint` | 指定使用的终端,可用终端有:`leetcode`, `leetcode-cn` | `leetcode` | | `leetcode.outputFolder` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括: | N/A | +| `leetcode.enableStatusBar` | 指定是否在 VS Code 下方显示插件状态栏。 | `true` | ## 疑难解答 在遇到任何问题时,可以先查看一下[疑难解答](https://github.com/jdneo/vscode-leetcode/wiki/%E7%96%91%E9%9A%BE%E8%A7%A3%E7%AD%94)文档寻求帮助。 diff --git a/package.json b/package.json index e97cce5d..56343331 100644 --- a/package.json +++ b/package.json @@ -287,6 +287,12 @@ "type": "string", "scope": "application", "description": "Specify the relative path to save the problem files." + }, + "leetcode.enableStatusBar": { + "type": "boolean", + "default": true, + "scope": "application", + "description": "Specify whether the LeetCode status bar will be shown or not." } } } diff --git a/src/extension.ts b/src/extension.ts index eb376a90..7a389142 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -15,7 +15,7 @@ import { LeetCodeTreeDataProvider } from "./explorer/LeetCodeTreeDataProvider"; import { leetCodeChannel } from "./leetCodeChannel"; import { leetCodeExecutor } from "./leetCodeExecutor"; import { leetCodeManager } from "./leetCodeManager"; -import { leetCodeStatusBarItem } from "./leetCodeStatusBarItem"; +import { leetCodeStatusBarController } from "./statusbar/leetCodeStatusBarController"; import { leetCodePreviewProvider } from "./webview/leetCodePreviewProvider"; import { leetCodeResultProvider } from "./webview/leetCodeResultProvider"; import { leetCodeSolutionProvider } from "./webview/leetCodeSolutionProvider"; @@ -26,7 +26,7 @@ export async function activate(context: vscode.ExtensionContext): Promise } leetCodeManager.on("statusChanged", () => { - leetCodeStatusBarItem.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser()); + leetCodeStatusBarController.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser()); leetCodeTreeDataProvider.refresh(); }); @@ -36,7 +36,7 @@ export async function activate(context: vscode.ExtensionContext): Promise leetCodeSolutionProvider.initialize(context); context.subscriptions.push( - leetCodeStatusBarItem, + leetCodeStatusBarController, leetCodeChannel, leetCodePreviewProvider, leetCodeResultProvider, diff --git a/src/leetCodeStatusBarItem.ts b/src/statusbar/LeetCodeStatusBarItem.ts similarity index 77% rename from src/leetCodeStatusBarItem.ts rename to src/statusbar/LeetCodeStatusBarItem.ts index 224a3536..749bbfac 100644 --- a/src/leetCodeStatusBarItem.ts +++ b/src/statusbar/LeetCodeStatusBarItem.ts @@ -2,9 +2,9 @@ // Licensed under the MIT license. import * as vscode from "vscode"; -import { UserStatus } from "./shared"; +import { UserStatus } from "../shared"; -class LeetCodeStatusBarItem implements vscode.Disposable { +export class LeetCodeStatusBarItem implements vscode.Disposable { private readonly statusBarItem: vscode.StatusBarItem; constructor() { @@ -25,9 +25,15 @@ class LeetCodeStatusBarItem implements vscode.Disposable { } } + public show(): void { + this.statusBarItem.show(); + } + + public hide(): void { + this.statusBarItem.hide(); + } + public dispose(): void { this.statusBarItem.dispose(); } } - -export const leetCodeStatusBarItem: LeetCodeStatusBarItem = new LeetCodeStatusBarItem(); diff --git a/src/statusbar/leetCodeStatusBarController.ts b/src/statusbar/leetCodeStatusBarController.ts new file mode 100644 index 00000000..177853a1 --- /dev/null +++ b/src/statusbar/leetCodeStatusBarController.ts @@ -0,0 +1,48 @@ +// Copyright (c) jdneo. All rights reserved. +// Licensed under the MIT license. + +import { ConfigurationChangeEvent, Disposable, workspace, WorkspaceConfiguration } from "vscode"; +import { UserStatus } from "../shared"; +import { LeetCodeStatusBarItem } from "./LeetCodeStatusBarItem"; + +class LeetCodeStatusBarController implements Disposable { + private statusBar: LeetCodeStatusBarItem; + private configurationChangeListener: Disposable; + + constructor() { + this.statusBar = new LeetCodeStatusBarItem(); + this.setStatusBarVisibility(); + + this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { + if (event.affectsConfiguration("leetcode.enableStatusBar")) { + this.setStatusBarVisibility(); + } + }, this); + } + + public updateStatusBar(status: UserStatus, user?: string): void { + if (this.statusBar) { + this.statusBar.updateStatusBar(status, user); + } + } + + public dispose(): void { + this.statusBar.dispose(); + this.configurationChangeListener.dispose(); + } + + private setStatusBarVisibility(): void { + if (this.isStatusBarEnabled()) { + this.statusBar.show(); + } else { + this.statusBar.hide(); + } + } + + private isStatusBarEnabled(): boolean { + const configuration: WorkspaceConfiguration = workspace.getConfiguration(); + return configuration.get("leetcode.enableStatusBar", false); + } +} + +export const leetCodeStatusBarController: LeetCodeStatusBarController = new LeetCodeStatusBarController();