mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-22 01:25:38 -05:00
* Merge from vscode 64980ea1f3f532c82bb6c28d27bba9ef2c5b4463 * fix config changes * fix strictnull checks
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as vscode from 'vscode';
|
|
import * as nls from 'vscode-nls';
|
|
import { Disposable } from './dispose';
|
|
|
|
const localize = nls.loadMessageBundle();
|
|
|
|
const selectZoomLevelCommandId = '_imagePreview.selectZoomLevel';
|
|
|
|
type Scale = number | 'fit';
|
|
|
|
export class ZoomStatusBarEntry extends Disposable {
|
|
private readonly _entry: vscode.StatusBarItem;
|
|
|
|
private readonly _onDidChangeScale = this._register(new vscode.EventEmitter<{ scale: Scale }>());
|
|
public readonly onDidChangeScale = this._onDidChangeScale.event;
|
|
|
|
constructor() {
|
|
super();
|
|
this._entry = this._register(vscode.window.createStatusBarItem({
|
|
id: 'imagePreview.zoom',
|
|
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 };
|
|
|
|
const scales: Scale[] = [10, 5, 2, 1, 0.5, 0.2, 'fit'];
|
|
const options = scales.map((scale): MyPickItem => ({
|
|
label: this.zoomLabel(scale),
|
|
scale
|
|
}));
|
|
|
|
const pick = await vscode.window.showQuickPick(options, {
|
|
placeHolder: localize('zoomStatusBar.placeholder', "Select zoom level")
|
|
});
|
|
if (pick) {
|
|
this._onDidChangeScale.fire({ scale: pick.scale });
|
|
}
|
|
}));
|
|
|
|
this._entry.command = selectZoomLevelCommandId;
|
|
}
|
|
|
|
public show() {
|
|
this._entry.show();
|
|
}
|
|
|
|
public hide() {
|
|
this._entry.hide();
|
|
}
|
|
|
|
public update(scale: Scale) {
|
|
this._entry.text = this.zoomLabel(scale);
|
|
}
|
|
|
|
private zoomLabel(scale: Scale): string {
|
|
return scale === 'fit'
|
|
? localize('zoomStatusBar.wholeImageLabel', "Whole Image")
|
|
: `${Math.round(scale * 100)}%`;
|
|
}
|
|
}
|