mainThreadMessageService.ts 2.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

import nls = require('vs/nls');
import {IMessageService} from 'vs/platform/message/common/message';
import Severity from 'vs/base/common/severity';
import {Action} from 'vs/base/common/actions';
import {TPromise as Promise} from 'vs/base/common/winjs.base';
A
Alex Dima 已提交
12
import {MainThreadMessageServiceShape} from './extHost.protocol';
13

A
Alex Dima 已提交
14
export class MainThreadMessageService extends MainThreadMessageServiceShape {
15 16 17 18

	private _messageService: IMessageService;

	constructor(@IMessageService messageService:IMessageService) {
A
Alex Dima 已提交
19
		super();
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
		this._messageService = messageService;
	}

	$showMessage(severity: Severity, message: string, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Thenable<number> {

		return new Promise<number>(resolve => {

			let messageHide: Function;
			let actions: MessageItemAction[] = [];
			let hasCloseAffordance = false;

			class MessageItemAction extends Action {
				constructor(id: string, label: string, handle: number) {
					super(id, label, undefined, true, () => {
						resolve(handle);
						messageHide(); // triggers dispose! make sure promise is already resolved
						return undefined;
					});
				}
				dispose(): void {
					resolve(undefined);
				}
			}

			commands.forEach(command => {
				if (command.isCloseAffordance === true) {
					hasCloseAffordance = true;
				}
				actions.push(new MessageItemAction('_extension_message_handle_' + command.handle, command.title, command.handle));
			});

			if (!hasCloseAffordance) {
				actions.unshift(new MessageItemAction('__close', nls.localize('close', "Close"), undefined));
			}

			messageHide = this._messageService.show(severity, {
				message,
				actions
			});
		});
	}
}