|
1 | | -import * as vscode from "vscode"; |
| 1 | +import { |
| 2 | + Disposable, |
| 3 | + window, |
| 4 | + StatusBarAlignment, |
| 5 | + StatusBarItem, |
| 6 | + workspace, |
| 7 | + ConfigurationChangeEvent, |
| 8 | +} from "vscode"; |
2 | 9 | import { ENABLED_CONFIG, TOGGLE_COMMAND, MENU_BAR_CONFIG } from "./constants"; |
3 | 10 |
|
4 | | -export function activateMenuBarItem(subscriptions: { dispose(): any }[]) { |
5 | | - const statusBarItem = vscode.window.createStatusBarItem( |
6 | | - vscode.StatusBarAlignment.Left, |
7 | | - 100 |
8 | | - ); |
9 | | - statusBarItem.command = TOGGLE_COMMAND; |
| 11 | +const PLAY = "\u25BA"; |
| 12 | +const STOP = "\u25A0"; |
10 | 13 |
|
11 | | - const PLAY = "\u25BA"; |
12 | | - const STOP = "\u25A0"; |
| 14 | +export default class MenuBarItem implements Disposable { |
| 15 | + private readonly _disposables: Disposable[] = []; |
| 16 | + private readonly _statusBarItem: StatusBarItem; |
| 17 | + constructor() { |
| 18 | + this._disposables = []; |
| 19 | + this._statusBarItem = window.createStatusBarItem( |
| 20 | + StatusBarAlignment.Left, |
| 21 | + 100 // What should this number be? |
| 22 | + ); |
| 23 | + this._statusBarItem.command = TOGGLE_COMMAND; |
13 | 24 |
|
14 | | - function setText() { |
15 | | - const config = vscode.workspace.getConfiguration(); |
| 25 | + this._disposables.push(this._statusBarItem); |
| 26 | + |
| 27 | + this._setText(); |
| 28 | + this._setVisibility(); |
| 29 | + |
| 30 | + workspace.onDidChangeConfiguration( |
| 31 | + this._handleConfigChange, |
| 32 | + this, |
| 33 | + this._disposables |
| 34 | + ); |
| 35 | + } |
| 36 | + |
| 37 | + _handleConfigChange(event: ConfigurationChangeEvent) { |
| 38 | + if (event.affectsConfiguration(ENABLED_CONFIG)) { |
| 39 | + this._setText(); |
| 40 | + } |
| 41 | + if (event.affectsConfiguration(MENU_BAR_CONFIG)) { |
| 42 | + this._setVisibility(); |
| 43 | + } |
| 44 | + } |
| 45 | + |
| 46 | + _setText() { |
| 47 | + const config = workspace.getConfiguration(); |
16 | 48 | const icon = config.get(ENABLED_CONFIG) ? STOP : PLAY; |
17 | 49 | const action = config.get(ENABLED_CONFIG) ? "hide" : "show"; |
18 | | - statusBarItem.text = `(${icon})`; |
19 | | - statusBarItem.tooltip = `Click to ${action} implicit parentheses.`; |
| 50 | + this._statusBarItem.text = `(${icon})`; |
| 51 | + this._statusBarItem.tooltip = `Click to ${action} implicit parentheses.`; |
20 | 52 | } |
21 | 53 |
|
22 | | - function setVisibility() { |
23 | | - if (vscode.workspace.getConfiguration().get(MENU_BAR_CONFIG)) { |
24 | | - statusBarItem.show(); |
| 54 | + _setVisibility() { |
| 55 | + if (workspace.getConfiguration().get(MENU_BAR_CONFIG)) { |
| 56 | + this._statusBarItem.show(); |
25 | 57 | } else { |
26 | | - statusBarItem.hide(); |
| 58 | + this._statusBarItem.hide(); |
27 | 59 | } |
28 | 60 | } |
29 | 61 |
|
30 | | - setText(); |
31 | | - setVisibility(); |
32 | | - |
33 | | - vscode.workspace.onDidChangeConfiguration( |
34 | | - (event) => { |
35 | | - if (event.affectsConfiguration(ENABLED_CONFIG)) { |
36 | | - setText(); |
37 | | - } |
38 | | - if (event.affectsConfiguration(MENU_BAR_CONFIG)) { |
39 | | - setVisibility(); |
40 | | - } |
41 | | - }, |
42 | | - null, |
43 | | - subscriptions |
44 | | - ); |
45 | | - subscriptions.push(statusBarItem); |
| 62 | + dispose() { |
| 63 | + this._disposables.forEach((disposable) => disposable.dispose()); |
| 64 | + } |
46 | 65 | } |
0 commit comments