expose some of the open-options, #13807

This commit is contained in:
Johannes Rieken
2017-08-22 12:50:31 +02:00
parent beb033f98b
commit 49784f8eb1
5 changed files with 56 additions and 17 deletions

View File

@@ -6,7 +6,7 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { isFalsyOrEmpty } from 'vs/base/common/arrays';
import { MainThreadDiaglogsShape, MainContext, IExtHostContext } from '../node/extHost.protocol';
import { MainThreadDiaglogsShape, MainContext, IExtHostContext, MainThreadDialogOptions } from '../node/extHost.protocol';
import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers';
import { IWindowService } from 'vs/platform/windows/common/windows';
@@ -24,14 +24,40 @@ export class MainThreadDialogs implements MainThreadDiaglogsShape {
//
}
$showOpenDialog(): TPromise<string[]> {
$showOpenDialog(options: MainThreadDialogOptions): TPromise<string[]> {
// TODO@joh what about remote dev setup?
if (options.uri && options.uri.scheme !== 'file') {
return TPromise.wrapError(new Error('bad path'));
}
return new TPromise<string[]>(resolve => {
this._windowService.showOpenDialog({
}, filenames => {
// TODO@joh what about remote dev setup?
this._windowService.showOpenDialog(MainThreadDialogs._convertOptions(options), filenames => {
resolve(isFalsyOrEmpty(filenames) ? undefined : filenames);
});
});
}
private static _convertOptions(options: MainThreadDialogOptions): Electron.OpenDialogOptions {
const result: Electron.OpenDialogOptions = {
properties: ['createDirectory']
};
if (options.openLabel) {
result.buttonLabel = options.openLabel;
}
if (options.uri) {
result.defaultPath = options.uri.fsPath;
}
if (!options.openFiles && !options.openFolders) {
options.openFiles = true;
}
if (options.openFiles) {
result.properties.push('openFile');
}
if (options.openFolders) {
result.properties.push('openDirectory');
}
if (options.openMany) {
result.properties.push('multiSelections');
}
return result;
}
}