mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 18:46:40 -05:00
Merge from master
This commit is contained in:
@@ -2,14 +2,14 @@
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { basename } from 'vs/base/common/paths';
|
||||
import { localize } from 'vs/nls';
|
||||
import { FileFilter } from 'vs/platform/windows/common/windows';
|
||||
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
|
||||
|
||||
export interface IConfirmation {
|
||||
title?: string;
|
||||
@@ -39,6 +39,74 @@ export interface IConfirmationResult {
|
||||
checkboxChecked?: boolean;
|
||||
}
|
||||
|
||||
export interface IPickAndOpenOptions {
|
||||
forceNewWindow?: boolean;
|
||||
defaultUri?: URI;
|
||||
telemetryExtraData?: ITelemetryData;
|
||||
}
|
||||
|
||||
export interface ISaveDialogOptions {
|
||||
/**
|
||||
* A human-readable string for the dialog title
|
||||
*/
|
||||
title?: string;
|
||||
|
||||
/**
|
||||
* The resource the dialog shows when opened.
|
||||
*/
|
||||
defaultUri?: URI;
|
||||
|
||||
/**
|
||||
* A set of file filters that are used by the dialog. Each entry is a human readable label,
|
||||
* like "TypeScript", and an array of extensions.
|
||||
*/
|
||||
filters?: FileFilter[];
|
||||
|
||||
/**
|
||||
* A human-readable string for the ok button
|
||||
*/
|
||||
saveLabel?: string;
|
||||
}
|
||||
|
||||
export interface IOpenDialogOptions {
|
||||
/**
|
||||
* A human-readable string for the dialog title
|
||||
*/
|
||||
title?: string;
|
||||
|
||||
/**
|
||||
* The resource the dialog shows when opened.
|
||||
*/
|
||||
defaultUri?: URI;
|
||||
|
||||
/**
|
||||
* A human-readable string for the open button.
|
||||
*/
|
||||
openLabel?: string;
|
||||
|
||||
/**
|
||||
* Allow to select files, defaults to `true`.
|
||||
*/
|
||||
canSelectFiles?: boolean;
|
||||
|
||||
/**
|
||||
* Allow to select folders, defaults to `false`.
|
||||
*/
|
||||
canSelectFolders?: boolean;
|
||||
|
||||
/**
|
||||
* Allow to select many files or folders.
|
||||
*/
|
||||
canSelectMany?: boolean;
|
||||
|
||||
/**
|
||||
* A set of file filters that are used by the dialog. Each entry is a human readable label,
|
||||
* like "TypeScript", and an array of extensions.
|
||||
*/
|
||||
filters?: FileFilter[];
|
||||
}
|
||||
|
||||
|
||||
export const IDialogService = createDecorator<IDialogService>('dialogService');
|
||||
|
||||
export interface IDialogOptions {
|
||||
@@ -59,7 +127,7 @@ export interface IDialogService {
|
||||
/**
|
||||
* Ask the user for confirmation with a modal dialog.
|
||||
*/
|
||||
confirm(confirmation: IConfirmation): TPromise<IConfirmationResult>;
|
||||
confirm(confirmation: IConfirmation): Thenable<IConfirmationResult>;
|
||||
|
||||
/**
|
||||
* Present a modal dialog to the user.
|
||||
@@ -68,7 +136,66 @@ export interface IDialogService {
|
||||
* then a promise with index of `cancelId` option is returned. If there is no such
|
||||
* option then promise with index `0` is returned.
|
||||
*/
|
||||
show(severity: Severity, message: string, buttons: string[], options?: IDialogOptions): TPromise<number>;
|
||||
show(severity: Severity, message: string, buttons: string[], options?: IDialogOptions): Thenable<number>;
|
||||
}
|
||||
|
||||
export const IFileDialogService = createDecorator<IFileDialogService>('fileDialogService');
|
||||
|
||||
/**
|
||||
* A service to bring up file dialogs.
|
||||
*/
|
||||
export interface IFileDialogService {
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
/**
|
||||
* The default path for a new file based on previously used files.
|
||||
* @param schemeFilter The scheme of the file path.
|
||||
*/
|
||||
defaultFilePath(schemeFilter: string): URI;
|
||||
|
||||
/**
|
||||
* The default path for a new folder based on previously used folders.
|
||||
* @param schemeFilter The scheme of the folder path.
|
||||
*/
|
||||
defaultFolderPath(schemeFilter: string): URI;
|
||||
|
||||
/**
|
||||
* The default path for a new workspace based on previously used workspaces.
|
||||
* @param schemeFilter The scheme of the workspace path.
|
||||
*/
|
||||
defaultWorkspacePath(schemeFilter: string): URI;
|
||||
|
||||
/**
|
||||
* Shows a file-folder selection dialog and opens the selected entry.
|
||||
*/
|
||||
pickFileFolderAndOpen(options: IPickAndOpenOptions): Thenable<any>;
|
||||
|
||||
/**
|
||||
* Shows a file selection dialog and opens the selected entry.
|
||||
*/
|
||||
pickFileAndOpen(options: IPickAndOpenOptions): Thenable<any>;
|
||||
|
||||
/**
|
||||
* Shows a folder selection dialog and opens the selected entry.
|
||||
*/
|
||||
pickFolderAndOpen(options: IPickAndOpenOptions): Thenable<any>;
|
||||
|
||||
/**
|
||||
* Shows a workspace selection dialog and opens the selected entry.
|
||||
*/
|
||||
pickWorkspaceAndOpen(options: IPickAndOpenOptions): Thenable<any>;
|
||||
|
||||
/**
|
||||
* Shows a save file dialog and returns the chosen file URI.
|
||||
*/
|
||||
showSaveDialog(options: ISaveDialogOptions): Thenable<URI>;
|
||||
|
||||
/**
|
||||
* Shows a open file dialog and returns the chosen file URI.
|
||||
*/
|
||||
showOpenDialog(options: IOpenDialogOptions): Thenable<URI[] | undefined>;
|
||||
|
||||
}
|
||||
|
||||
const MAX_CONFIRM_FILES = 10;
|
||||
|
||||
@@ -3,34 +3,25 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
|
||||
import { IChannel, IServerChannel } from 'vs/base/parts/ipc/node/ipc';
|
||||
import { IDialogService, IConfirmation, IConfirmationResult } from 'vs/platform/dialogs/common/dialogs';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { Event } from 'vs/base/common/event';
|
||||
|
||||
export interface IDialogChannel extends IChannel {
|
||||
call(command: 'show'): TPromise<number>;
|
||||
call(command: 'confirm'): TPromise<IConfirmationResult>;
|
||||
call(command: string, arg?: any): TPromise<any>;
|
||||
}
|
||||
|
||||
export class DialogChannel implements IDialogChannel {
|
||||
export class DialogChannel implements IServerChannel {
|
||||
|
||||
constructor(@IDialogService private dialogService: IDialogService) { }
|
||||
|
||||
listen<T>(event: string): Event<T> {
|
||||
throw new Error('No event found');
|
||||
listen<T>(_, event: string): Event<T> {
|
||||
throw new Error(`Event not found: ${event}`);
|
||||
}
|
||||
|
||||
call(command: string, args?: any[]): TPromise<any> {
|
||||
call(_, command: string, args?: any[]): Thenable<any> {
|
||||
switch (command) {
|
||||
case 'show': return this.dialogService.show(args[0], args[1], args[2]);
|
||||
case 'confirm': return this.dialogService.confirm(args[0]);
|
||||
case 'show': return this.dialogService.show(args![0], args![1], args![2]);
|
||||
case 'confirm': return this.dialogService.confirm(args![0]);
|
||||
}
|
||||
return TPromise.wrapError(new Error('invalid command'));
|
||||
return Promise.reject(new Error('invalid command'));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,13 +29,13 @@ export class DialogChannelClient implements IDialogService {
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
constructor(private channel: IDialogChannel) { }
|
||||
constructor(private channel: IChannel) { }
|
||||
|
||||
show(severity: Severity, message: string, options: string[]): TPromise<number> {
|
||||
show(severity: Severity, message: string, options: string[]): Thenable<number> {
|
||||
return this.channel.call('show', [severity, message, options]);
|
||||
}
|
||||
|
||||
confirm(confirmation: IConfirmation): TPromise<IConfirmationResult> {
|
||||
confirm(confirmation: IConfirmation): Thenable<IConfirmationResult> {
|
||||
return this.channel.call('confirm', [confirmation]);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as readline from 'readline';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { IDialogService, IConfirmation, IConfirmationResult } from 'vs/platform/dialogs/common/dialogs';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { localize } from 'vs/nls';
|
||||
@@ -14,8 +13,8 @@ export class CommandLineDialogService implements IDialogService {
|
||||
|
||||
_serviceBrand: any;
|
||||
|
||||
show(severity: Severity, message: string, options: string[]): TPromise<number> {
|
||||
const promise = new TPromise<number>((c, e) => {
|
||||
show(severity: Severity, message: string, options: string[]): Promise<number> {
|
||||
const promise = new Promise<number>((c, e) => {
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
@@ -58,8 +57,8 @@ export class CommandLineDialogService implements IDialogService {
|
||||
return -1;
|
||||
}
|
||||
|
||||
confirm(confirmation: IConfirmation): TPromise<IConfirmationResult> {
|
||||
return this.show(Severity.Info, confirmation.message, [confirmation.primaryButton, confirmation.secondaryButton || localize('cancel', "Cancel")]).then(index => {
|
||||
confirm(confirmation: IConfirmation): Promise<IConfirmationResult> {
|
||||
return this.show(Severity.Info, confirmation.message, [confirmation.primaryButton || localize('ok', "Ok"), confirmation.secondaryButton || localize('cancel', "Cancel")]).then(index => {
|
||||
return {
|
||||
confirmed: index === 0
|
||||
} as IConfirmationResult;
|
||||
|
||||
Reference in New Issue
Block a user