From 639c00a7fad956d2483976ddc07691cf3289e7b2 Mon Sep 17 00:00:00 2001 From: "sheche@microsoft.com" Date: Fri, 22 Mar 2019 18:44:08 +0800 Subject: [PATCH 1/3] Can hide the status bar --- package.json | 6 +++ src/extension.ts | 6 +-- .../LeetCodeStatusBarItem.ts} | 6 +-- src/statusbar/leetCodeStatusBarController.ts | 51 +++++++++++++++++++ 4 files changed, 62 insertions(+), 7 deletions(-) rename src/{leetCodeStatusBarItem.ts => statusbar/LeetCodeStatusBarItem.ts} (81%) create mode 100644 src/statusbar/leetCodeStatusBarController.ts 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 81% rename from src/leetCodeStatusBarItem.ts rename to src/statusbar/LeetCodeStatusBarItem.ts index 224a3536..ef7af685 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() { @@ -29,5 +29,3 @@ class LeetCodeStatusBarItem implements vscode.Disposable { 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..9dde6b73 --- /dev/null +++ b/src/statusbar/leetCodeStatusBarController.ts @@ -0,0 +1,51 @@ +// Copyright (c) jdneo. All rights reserved. +// Licensed under the MIT license. + +import { ConfigurationChangeEvent, Disposable, workspace, WorkspaceConfiguration } from "vscode"; +import { leetCodeManager } from "../leetCodeManager"; +import { UserStatus } from "../shared"; +import { LeetCodeStatusBarItem } from "./leetCodeStatusBarItem"; + +class LeetCodeStatusBarController implements Disposable { + private statusBar: LeetCodeStatusBarItem | undefined; + private configurationChangeListener: Disposable; + + constructor() { + if (this.isStatusBarEnabled()) { + this.statusBar = new LeetCodeStatusBarItem(); + } + + this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { + if (event.affectsConfiguration("leetcode.enableStatusBar")) { + const isStatusBarEnabled: boolean = this.isStatusBarEnabled(); + if (isStatusBarEnabled && this.statusBar === undefined) { + this.statusBar = new LeetCodeStatusBarItem(); + this.statusBar.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser()); + } else if (!isStatusBarEnabled && this.statusBar !== undefined) { + this.statusBar.dispose(); + this.statusBar = undefined; + } + } + }, this); + } + + public updateStatusBar(status: UserStatus, user?: string): void { + if (this.statusBar) { + this.statusBar.updateStatusBar(status, user); + } + } + + public dispose(): void { + if (this.statusBar) { + this.statusBar.dispose(); + } + this.configurationChangeListener.dispose(); + } + + private isStatusBarEnabled(): boolean { + const configuration: WorkspaceConfiguration = workspace.getConfiguration(); + return configuration.get("leetcode.enableStatusBar", false); + } +} + +export const leetCodeStatusBarController: LeetCodeStatusBarController = new LeetCodeStatusBarController(); From 2be220e84282c7fce2240355a7d726830801303a Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 22 Mar 2019 19:34:25 +0800 Subject: [PATCH 2/3] Correct the import name --- src/statusbar/leetCodeStatusBarController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/statusbar/leetCodeStatusBarController.ts b/src/statusbar/leetCodeStatusBarController.ts index 9dde6b73..0e4d4acd 100644 --- a/src/statusbar/leetCodeStatusBarController.ts +++ b/src/statusbar/leetCodeStatusBarController.ts @@ -4,7 +4,7 @@ import { ConfigurationChangeEvent, Disposable, workspace, WorkspaceConfiguration } from "vscode"; import { leetCodeManager } from "../leetCodeManager"; import { UserStatus } from "../shared"; -import { LeetCodeStatusBarItem } from "./leetCodeStatusBarItem"; +import { LeetCodeStatusBarItem } from "./LeetCodeStatusBarItem"; class LeetCodeStatusBarController implements Disposable { private statusBar: LeetCodeStatusBarItem | undefined; From a5fa748184e74cd054427117f9cdcae3cefa507b Mon Sep 17 00:00:00 2001 From: "sheche@microsoft.com" Date: Fri, 22 Mar 2019 21:06:42 +0800 Subject: [PATCH 3/3] Using hide/show instead of disposing --- README.md | 1 + docs/README_zh-CN.md | 1 + src/statusbar/LeetCodeStatusBarItem.ts | 8 ++++++ src/statusbar/leetCodeStatusBarController.ts | 29 +++++++++----------- 4 files changed, 23 insertions(+), 16 deletions(-) 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:
  • `${tag}`: Categorize the problem according to their tags.
  • `${language}`: Categorize the problem according to their language.
  • `${difficulty}`: Categorize the problem according to their difficulty.
| 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` | 指定保存文件时所用的相对文件夹路径。除了用户自定义路径外,也可以使用保留项,包括:
  • `${tag}`: 根据题目的类别进行分类。
  • `${language}`: 根据题目的语言进行分类。
  • `${difficulty}`: 根据题目的难度进行分类。
| 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/src/statusbar/LeetCodeStatusBarItem.ts b/src/statusbar/LeetCodeStatusBarItem.ts index ef7af685..749bbfac 100644 --- a/src/statusbar/LeetCodeStatusBarItem.ts +++ b/src/statusbar/LeetCodeStatusBarItem.ts @@ -25,6 +25,14 @@ export class LeetCodeStatusBarItem implements vscode.Disposable { } } + public show(): void { + this.statusBarItem.show(); + } + + public hide(): void { + this.statusBarItem.hide(); + } + public dispose(): void { this.statusBarItem.dispose(); } diff --git a/src/statusbar/leetCodeStatusBarController.ts b/src/statusbar/leetCodeStatusBarController.ts index 0e4d4acd..177853a1 100644 --- a/src/statusbar/leetCodeStatusBarController.ts +++ b/src/statusbar/leetCodeStatusBarController.ts @@ -2,29 +2,20 @@ // Licensed under the MIT license. import { ConfigurationChangeEvent, Disposable, workspace, WorkspaceConfiguration } from "vscode"; -import { leetCodeManager } from "../leetCodeManager"; import { UserStatus } from "../shared"; import { LeetCodeStatusBarItem } from "./LeetCodeStatusBarItem"; class LeetCodeStatusBarController implements Disposable { - private statusBar: LeetCodeStatusBarItem | undefined; + private statusBar: LeetCodeStatusBarItem; private configurationChangeListener: Disposable; constructor() { - if (this.isStatusBarEnabled()) { - this.statusBar = new LeetCodeStatusBarItem(); - } + this.statusBar = new LeetCodeStatusBarItem(); + this.setStatusBarVisibility(); this.configurationChangeListener = workspace.onDidChangeConfiguration((event: ConfigurationChangeEvent) => { if (event.affectsConfiguration("leetcode.enableStatusBar")) { - const isStatusBarEnabled: boolean = this.isStatusBarEnabled(); - if (isStatusBarEnabled && this.statusBar === undefined) { - this.statusBar = new LeetCodeStatusBarItem(); - this.statusBar.updateStatusBar(leetCodeManager.getStatus(), leetCodeManager.getUser()); - } else if (!isStatusBarEnabled && this.statusBar !== undefined) { - this.statusBar.dispose(); - this.statusBar = undefined; - } + this.setStatusBarVisibility(); } }, this); } @@ -36,12 +27,18 @@ class LeetCodeStatusBarController implements Disposable { } public dispose(): void { - if (this.statusBar) { - this.statusBar.dispose(); - } + 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);