提交 c361c4a3 编写于 作者: C Christof Marti

Back button constant (#49340)

上级 2afaa0d6
......@@ -184,6 +184,8 @@ export interface IQuickInputService {
*/
input(options?: IInputOptions, token?: CancellationToken): TPromise<string>;
backButton: IQuickInputButton;
createQuickPick(): IQuickPick;
createInputBox(): IInputBox;
......@@ -195,5 +197,7 @@ export interface IQuickInputService {
accept(): TPromise<void>;
back(): TPromise<void>;
cancel(): TPromise<void>;
}
......@@ -523,6 +523,8 @@ declare module 'vscode' {
export namespace window {
export const quickInputBackButton: QuickInputButton;
/**
* Implementation incomplete. See #49340.
*/
......@@ -610,8 +612,8 @@ declare module 'vscode' {
}
export interface QuickInputButton {
iconPath: string | Uri | { light: string | Uri; dark: string | Uri } | ThemeIcon;
tooltip?: string | undefined;
readonly iconPath: string | Uri | { light: string | Uri; dark: string | Uri } | ThemeIcon;
readonly tooltip?: string | undefined;
}
//#endregion
......
......@@ -170,14 +170,20 @@ export class MainThreadQuickOpen implements MainThreadQuickOpenShape {
session.hide();
}
} else if (param === 'buttons') {
params.buttons.forEach(button => {
const iconPath = button.iconPath;
iconPath.dark = URI.revive(iconPath.dark);
if (iconPath.light) {
iconPath.light = URI.revive(iconPath.light);
session[param] = params.buttons.map(button => {
if (button.handle === -1) {
return this._quickInputService.backButton;
}
const { iconPath, tooltip, handle } = button;
return {
iconPath: {
dark: URI.revive(iconPath.dark),
light: iconPath.light && URI.revive(iconPath.light)
},
tooltip,
handle
};
});
session[param] = params[param];
} else {
session[param] = params[param];
}
......
......@@ -455,6 +455,11 @@ export function createApiFactory(
registerProtocolHandler: proposedApiFunction(extension, (handler: vscode.ProtocolHandler) => {
return extHostUrls.registerProtocolHandler(extension.id, handler);
}),
get quickInputBackButton() {
return proposedApiFunction(extension, (): vscode.QuickInputButton => {
return extHostQuickOpen.backButton;
})();
},
createQuickPick: proposedApiFunction(extension, (): vscode.QuickPick => {
return extHostQuickOpen.createQuickPick(extension.id);
}),
......
......@@ -16,6 +16,8 @@ import { ExtHostQuickOpenShape, IMainContext, MainContext, MainThreadQuickOpenSh
import URI from 'vs/base/common/uri';
import { ThemeIcon } from 'vs/workbench/api/node/extHostTypes';
const backButton: QuickInputButton = { iconPath: 'back.svg' };
export type Item = string | QuickPickItem;
export class ExtHostQuickOpen implements ExtHostQuickOpenShape {
......@@ -151,6 +153,8 @@ export class ExtHostQuickOpen implements ExtHostQuickOpenShape {
// ---- QuickInput
backButton = backButton;
createQuickPick(extensionId: string): QuickPick {
const session = new ExtHostQuickPick(this._proxy, extensionId, () => this._sessions.delete(session._id));
this._sessions.set(session._id, session);
......@@ -324,13 +328,14 @@ class ExtHostQuickInput implements QuickInput {
this._buttons = buttons;
this._handlesToButtons.clear();
buttons.forEach((button, i) => {
this._handlesToButtons.set(i, button);
const handle = button === backButton ? -1 : i;
this._handlesToButtons.set(handle, button);
});
this.update({
buttons: buttons.map<TransferQuickInputButton>((button, i) => ({
iconPath: getIconUris(button.iconPath),
tooltip: button.tooltip,
handle: i,
handle: button === backButton ? -1 : i,
}))
});
}
......
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#2d2d30;}.icon-canvas-transparent{opacity:0;}.icon-vs-bg{fill:#c5c5c5;}</style></defs><title>CollapseChevronLeft_md_16x</title><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/><path class="icon-vs-out" d="M7.725,8l4.97,4.97L10.22,15.444,2.775,8,10.22.556,12.694,3.03Z" style="display: none;"/><path class="icon-vs-bg" d="M6.311,8l4.97,4.97L10.22,14.03,4.189,8l6.03-6.03L11.28,3.03Z"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><defs><style>.icon-canvas-transparent,.icon-vs-out{fill:#f6f6f6;}.icon-canvas-transparent{opacity:0;}.icon-vs-bg{fill:#424242;}</style></defs><title>CollapseChevronLeft_md_16x</title><path class="icon-canvas-transparent" d="M16,0V16H0V0Z"/><path class="icon-vs-out" d="M7.725,8l4.97,4.97L10.22,15.444,2.775,8,10.22.556,12.694,3.03Z" style="display: none;"/><path class="icon-vs-bg" d="M6.311,8l4.97,4.97L10.22,14.03,4.189,8l6.03-6.03L11.28,3.03Z"/></svg>
\ No newline at end of file
......@@ -4,7 +4,15 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import { QuickPickManyToggle } from 'vs/workbench/browser/parts/quickinput/quickInput';
import { QuickPickManyToggle, BackAction } from 'vs/workbench/browser/parts/quickinput/quickInput';
import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { Registry } from 'vs/platform/registry/common/platform';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
import { inQuickOpenContext } from 'vs/workbench/browser/parts/quickopen/quickopen';
KeybindingsRegistry.registerCommandAndKeybindingRule(QuickPickManyToggle);
const registry = Registry.as<IWorkbenchActionRegistry>(ActionExtensions.WorkbenchActions);
registry.registerWorkbenchAction(new SyncActionDescriptor(BackAction, BackAction.ID, BackAction.LABEL, { primary: null, win: { primary: KeyMod.Alt | KeyCode.LeftArrow }, mac: { primary: KeyMod.WinCtrl | KeyCode.US_MINUS }, linux: { primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.US_MINUS } }, inQuickOpenContext, KeybindingsRegistry.WEIGHT.workbenchContrib(50)), 'Back');
......@@ -54,6 +54,7 @@ interface QuickInputUI {
progressBar: ProgressBar;
list: QuickInputList;
onDidAccept: Event<void>;
onDidTriggerButton: Event<IQuickInputButton>;
ignoreFocusOut: boolean;
show(controller: QuickInput): void;
setVisibilities(visibilities: Visibilities): void;
......@@ -166,6 +167,13 @@ class QuickInput implements IQuickInput {
if (this.visible) {
return;
}
this.disposables.push(
this.ui.onDidTriggerButton(button => {
if (this.buttons.indexOf(button) !== -1) {
this.onDidTriggerButtonEmitter.fire(button);
}
}),
);
this.ui.show(this);
this.visible = true;
this.update();
......@@ -642,6 +650,7 @@ export class QuickInputService extends Component implements IQuickInputService {
private inQuickOpenWidgets: Record<string, boolean> = {};
private inQuickOpenContext: IContextKey<boolean>;
private onDidAcceptEmitter = new Emitter<void>();
private onDidTriggerButtonEmitter = new Emitter<IQuickInputButton>();
private controller: QuickInput;
......@@ -806,6 +815,7 @@ export class QuickInputService extends Component implements IQuickInputService {
progressBar,
list,
onDidAccept: this.onDidAcceptEmitter.event,
onDidTriggerButton: this.onDidTriggerButtonEmitter.event,
ignoreFocusOut: false,
show: controller => this.show(controller),
hide: () => this.hide(),
......@@ -928,6 +938,15 @@ export class QuickInputService extends Component implements IQuickInputService {
});
}
backButton = {
iconPath: {
dark: URI.parse(require.toUrl('vs/workbench/browser/parts/quickinput/media/dark/back.svg')),
light: URI.parse(require.toUrl('vs/workbench/browser/parts/quickinput/media/light/back.svg'))
},
tooltip: localize('quickInput.back', "Back"),
handle: -1 // TODO
};
createQuickPick(): IQuickPick {
this.create();
return new QuickPick(this.ui);
......@@ -1034,6 +1053,11 @@ export class QuickInputService extends Component implements IQuickInputService {
return TPromise.as(undefined);
}
back() {
this.onDidTriggerButtonEmitter.fire(this.backButton);
return TPromise.as(undefined);
}
cancel() {
this.hide();
return TPromise.as(undefined);
......@@ -1111,3 +1135,18 @@ export const QuickPickManyToggle: ICommandAndKeybindingRule = {
quickInputService.toggle();
}
};
export class BackAction extends Action {
public static readonly ID = 'workbench.action.quickInputBack';
public static readonly LABEL = localize('back', "Back");
constructor(id: string, label: string, @IQuickInputService private quickInputService: IQuickInputService) {
super(id, label);
}
public run(): TPromise<any> {
this.quickInputService.back();
return TPromise.as(null);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册