From c7630e18588f42975e286018e7691fc7c2047331 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Thu, 21 Sep 2017 10:46:59 +0200 Subject: [PATCH] add filters, #13807 --- src/vs/vscode.proposed.d.ts | 8 ++++--- .../api/electron-browser/mainThreadDialogs.ts | 21 +++++++++++++------ src/vs/workbench/api/node/extHost.protocol.ts | 6 ++++-- src/vs/workbench/api/node/extHostDialogs.ts | 4 ++-- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 6ed9537d1b6..b16f3b17adb 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -8,16 +8,18 @@ declare module 'vscode' { export interface OpenDialogOptions { - defaultResource?: Uri; + defaultUri?: Uri; openLabel?: string; openFiles?: boolean; openFolders?: boolean; openMany?: boolean; + filters: { [name: string]: string[] }; } export interface SaveDialogOptions { - defaultResource?: Uri; + defaultUri?: Uri; saveLabel?: string; + filters: { [name: string]: string[] }; } export namespace window { @@ -228,4 +230,4 @@ declare module 'vscode' { export namespace languages { export function registerColorProvider(selector: DocumentSelector, provider: DocumentColorProvider): Disposable; } -} \ No newline at end of file +} diff --git a/src/vs/workbench/api/electron-browser/mainThreadDialogs.ts b/src/vs/workbench/api/electron-browser/mainThreadDialogs.ts index 1ec24d28977..b79710c297b 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDialogs.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDialogs.ts @@ -9,6 +9,7 @@ import { isFalsyOrEmpty } from 'vs/base/common/arrays'; import { MainThreadDiaglogsShape, MainContext, IExtHostContext, MainThreadDialogOpenOptions, MainThreadDialogSaveOptions } from '../node/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; import { IWindowService } from 'vs/platform/windows/common/windows'; +import { forEach } from 'vs/base/common/collections'; @extHostNamedCustomer(MainContext.MainThreadDialogs) export class MainThreadDialogs implements MainThreadDiaglogsShape { @@ -26,7 +27,7 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape { $showOpenDialog(options: MainThreadDialogOpenOptions): TPromise { // TODO@joh what about remote dev setup? - if (options.defaultResource && options.defaultResource.scheme !== 'file') { + if (options.defaultUri && options.defaultUri.scheme !== 'file') { return TPromise.wrapError(new Error('bad path')); } return new TPromise(resolve => { @@ -39,7 +40,7 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape { $showSaveDialog(options: MainThreadDialogSaveOptions): TPromise { // TODO@joh what about remote dev setup? - if (options.defaultResource && options.defaultResource.scheme !== 'file') { + if (options.defaultUri && options.defaultUri.scheme !== 'file') { return TPromise.wrapError(new Error('bad path')); } return new TPromise(resolve => { @@ -57,8 +58,8 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape { if (options.openLabel) { result.buttonLabel = options.openLabel; } - if (options.defaultResource) { - result.defaultPath = options.defaultResource.fsPath; + if (options.defaultUri) { + result.defaultPath = options.defaultUri.fsPath; } if (!options.openFiles && !options.openFolders) { options.openFiles = true; @@ -72,6 +73,10 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape { if (options.openMany) { result.properties.push('multiSelections'); } + if (options.filters) { + result.filters = []; + forEach(options.filters, entry => result.filters.push({ name: entry.key, extensions: entry.value })); + } return result; } @@ -79,12 +84,16 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape { const result: Electron.SaveDialogOptions = { }; - if (options.defaultResource) { - result.defaultPath = options.defaultResource.fsPath; + if (options.defaultUri) { + result.defaultPath = options.defaultUri.fsPath; } if (options.saveLabel) { result.buttonLabel = options.saveLabel; } + if (options.filters) { + result.filters = []; + forEach(options.filters, entry => result.filters.push({ name: entry.key, extensions: entry.value })); + } return result; } } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 61ae052f117..8c89933b9bb 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -116,16 +116,18 @@ export interface MainThreadDiagnosticsShape extends IDisposable { } export interface MainThreadDialogOpenOptions { - defaultResource?: URI; + defaultUri?: URI; openLabel?: string; openFiles?: boolean; openFolders?: boolean; openMany?: boolean; + filters: { [name: string]: string[] }; } export interface MainThreadDialogSaveOptions { - defaultResource?: URI; + defaultUri?: URI; saveLabel?: string; + filters: { [name: string]: string[] }; } export interface MainThreadDiaglogsShape extends IDisposable { diff --git a/src/vs/workbench/api/node/extHostDialogs.ts b/src/vs/workbench/api/node/extHostDialogs.ts index 48af26e7928..fc0bc2b807c 100644 --- a/src/vs/workbench/api/node/extHostDialogs.ts +++ b/src/vs/workbench/api/node/extHostDialogs.ts @@ -17,13 +17,13 @@ export class ExtHostDialogs { } showOpenDialog(options: vscode.OpenDialogOptions): Thenable { - return this._proxy.$showOpenDialog(options).then(filepaths => { + return this._proxy.$showOpenDialog(options).then(filepaths => { return filepaths && filepaths.map(URI.file); }); } showSaveDialog(options: vscode.SaveDialogOptions): Thenable { - return this._proxy.$showSaveDialog(options).then(filepath => { + return this._proxy.$showSaveDialog(options).then(filepath => { return filepath && URI.file(filepath); }); }