From 71c3136106fb75e017f5a3b4447ad80cfc7dde67 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 21 Nov 2019 20:46:21 -0800 Subject: [PATCH] Extract out common status bar entry management code --- .../src/binarySizeStatusBarEntry.ts | 23 +++----------- .../image-preview/src/sizeStatusBarEntry.ts | 23 +++----------- .../image-preview/src/statusBarEntry.ts | 31 +++++++++++++++++++ .../image-preview/src/zoomStatusBarEntry.ts | 25 ++++----------- 4 files changed, 47 insertions(+), 55 deletions(-) create mode 100644 extensions/image-preview/src/statusBarEntry.ts diff --git a/extensions/image-preview/src/binarySizeStatusBarEntry.ts b/extensions/image-preview/src/binarySizeStatusBarEntry.ts index 1f48580d1e7..f8012edd2fd 100644 --- a/extensions/image-preview/src/binarySizeStatusBarEntry.ts +++ b/extensions/image-preview/src/binarySizeStatusBarEntry.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Disposable } from './dispose'; import * as nls from 'vscode-nls'; +import { PreviewStatusBarEntry } from './statusBarEntry'; const localize = nls.loadMessageBundle(); @@ -36,35 +36,22 @@ class BinarySize { } } -export class BinarySizeStatusBarEntry extends Disposable { - private readonly _entry: vscode.StatusBarItem; - - private _showingOwner: string | undefined; +export class BinarySizeStatusBarEntry extends PreviewStatusBarEntry { constructor() { - super(); - this._entry = this._register(vscode.window.createStatusBarItem({ + super({ id: 'imagePreview.binarySize', name: localize('sizeStatusBar.name', "Image Binary Size"), alignment: vscode.StatusBarAlignment.Right, priority: 100, - })); + }); } public show(owner: string, size: number | undefined) { - this._showingOwner = owner; if (typeof size === 'number') { - this._entry.text = BinarySize.formatSize(size); - this._entry.show(); + super.showItem(owner, BinarySize.formatSize(size)); } else { this.hide(owner); } } - - public hide(owner: string) { - if (owner === this._showingOwner) { - this._entry.hide(); - this._showingOwner = undefined; - } - } } diff --git a/extensions/image-preview/src/sizeStatusBarEntry.ts b/extensions/image-preview/src/sizeStatusBarEntry.ts index 6b2bff746cf..3c1d84dd6a9 100644 --- a/extensions/image-preview/src/sizeStatusBarEntry.ts +++ b/extensions/image-preview/src/sizeStatusBarEntry.ts @@ -4,36 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Disposable } from './dispose'; import * as nls from 'vscode-nls'; +import { PreviewStatusBarEntry } from './statusBarEntry'; const localize = nls.loadMessageBundle(); -export class SizeStatusBarEntry extends Disposable { - private readonly _entry: vscode.StatusBarItem; - - private _showingOwner: string | undefined; +export class SizeStatusBarEntry extends PreviewStatusBarEntry { constructor() { - super(); - this._entry = this._register(vscode.window.createStatusBarItem({ + super({ id: 'imagePreview.size', name: localize('sizeStatusBar.name', "Image Size"), alignment: vscode.StatusBarAlignment.Right, priority: 101 /* to the left of editor status (100) */, - })); + }); } public show(owner: string, text: string) { - this._showingOwner = owner; - this._entry.text = text; - this._entry.show(); - } - - public hide(owner: string) { - if (owner === this._showingOwner) { - this._entry.hide(); - this._showingOwner = undefined; - } + this.showItem(owner, text); } } diff --git a/extensions/image-preview/src/statusBarEntry.ts b/extensions/image-preview/src/statusBarEntry.ts new file mode 100644 index 00000000000..7be0ec30f71 --- /dev/null +++ b/extensions/image-preview/src/statusBarEntry.ts @@ -0,0 +1,31 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { Disposable } from './dispose'; + +export abstract class PreviewStatusBarEntry extends Disposable { + private _showOwner: string | undefined; + + protected readonly entry: vscode.StatusBarItem; + + constructor(options: vscode.window.StatusBarItemOptions) { + super(); + this.entry = this._register(vscode.window.createStatusBarItem(options)); + } + + protected showItem(owner: string, text: string) { + this._showOwner = owner; + this.entry.text = text; + this.entry.show(); + } + + public hide(owner: string) { + if (owner === this._showOwner) { + this.entry.hide(); + this._showOwner = undefined; + } + } +} diff --git a/extensions/image-preview/src/zoomStatusBarEntry.ts b/extensions/image-preview/src/zoomStatusBarEntry.ts index dc102a48d64..395a14e186d 100644 --- a/extensions/image-preview/src/zoomStatusBarEntry.ts +++ b/extensions/image-preview/src/zoomStatusBarEntry.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; -import { Disposable } from './dispose'; +import { PreviewStatusBarEntry } from './statusBarEntry'; const localize = nls.loadMessageBundle(); @@ -13,22 +13,18 @@ const selectZoomLevelCommandId = '_imagePreview.selectZoomLevel'; export type Scale = number | 'fit'; -export class ZoomStatusBarEntry extends Disposable { - private readonly _entry: vscode.StatusBarItem; +export class ZoomStatusBarEntry extends PreviewStatusBarEntry { private readonly _onDidChangeScale = this._register(new vscode.EventEmitter<{ scale: Scale }>()); public readonly onDidChangeScale = this._onDidChangeScale.event; - private _showOwner: string | undefined; - constructor() { - super(); - this._entry = this._register(vscode.window.createStatusBarItem({ + super({ id: 'imagePreview.zoom', name: localize('zoomStatusBar.name', "Image Zoom"), alignment: vscode.StatusBarAlignment.Right, priority: 102 /* to the left of editor size entry (101) */, - })); + }); this._register(vscode.commands.registerCommand(selectZoomLevelCommandId, async () => { type MyPickItem = vscode.QuickPickItem & { scale: Scale }; @@ -47,20 +43,11 @@ export class ZoomStatusBarEntry extends Disposable { } })); - this._entry.command = selectZoomLevelCommandId; + this.entry.command = selectZoomLevelCommandId; } public show(owner: string, scale: Scale) { - this._showOwner = owner; - this._entry.text = this.zoomLabel(scale); - this._entry.show(); - } - - public hide(owner: string) { - if (owner === this._showOwner) { - this._entry.hide(); - this._showOwner = undefined; - } + this.showItem(owner, this.zoomLabel(scale)); } private zoomLabel(scale: Scale): string {