native.ts 5.9 KB
Newer Older
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

6
import { Event } from 'vs/base/common/event';
R
Robo 已提交
7
import { MessageBoxOptions, MessageBoxReturnValue, OpenDevToolsOptions, SaveDialogOptions, OpenDialogOptions, OpenDialogReturnValue, SaveDialogReturnValue, MouseInputEvent } from 'vs/base/parts/sandbox/common/electronTypes';
8
import { IOpenedWindow, IWindowOpenable, IOpenEmptyWindowOptions, IOpenWindowOptions, IColorScheme } from 'vs/platform/windows/common/windows';
9
import { INativeOpenDialogOptions } from 'vs/platform/dialogs/common/dialogs';
10
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
11
import { URI } from 'vs/base/common/uri';
12

13 14 15 16 17
export interface ICPUProperties {
	model: string;
	speed: number;
}

18 19 20 21 22
export interface IOSProperties {
	type: string;
	release: string;
	arch: string;
	platform: string;
23 24 25 26 27 28 29
	cpus: ICPUProperties[];
}

export interface IOSStatistics {
	totalmem: number;
	freemem: number;
	loadavg: number[];
30 31
}

32
export interface ICommonNativeHostService {
33

34
	readonly _serviceBrand: undefined;
35

36 37 38
	// Properties
	readonly windowId: number;

39
	// Events
40
	readonly onDidOpenWindow: Event<number>;
41

42 43
	readonly onDidMaximizeWindow: Event<number>;
	readonly onDidUnmaximizeWindow: Event<number>;
44

45 46
	readonly onDidFocusWindow: Event<number>;
	readonly onDidBlurWindow: Event<number>;
47

48
	readonly onDidResumeOS: Event<unknown>;
49

50 51
	readonly onDidChangeColorScheme: Event<IColorScheme>;

52
	readonly onDidChangePassword: Event<{ service: string, account: string }>;
53

54
	// Window
55 56
	getWindows(): Promise<IOpenedWindow[]>;
	getWindowCount(): Promise<number>;
57
	getActiveWindowId(): Promise<number | undefined>;
58

59
	openWindow(options?: IOpenEmptyWindowOptions): Promise<void>;
60
	openWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise<void>;
61

62
	toggleFullScreen(): Promise<void>;
63

64
	handleTitleDoubleClick(): Promise<void>;
65

66 67 68 69 70
	isMaximized(): Promise<boolean>;
	maximizeWindow(): Promise<void>;
	unmaximizeWindow(): Promise<void>;
	minimizeWindow(): Promise<void>;

71 72
	setMinimumSize(width: number | undefined, height: number | undefined): Promise<void>;

73 74 75 76 77 78 79 80 81
	/**
	 * Make the window focused.
	 *
	 * @param options Pass `force: true` if you want to make the window take
	 * focus even if the application does not have focus currently. This option
	 * should only be used if it is necessary to steal focus from the current
	 * focused application which may not be VSCode.
	 */
	focusWindow(options?: { windowId?: number, force?: boolean }): Promise<void>;
82

83 84
	// Dialogs
	showMessageBox(options: MessageBoxOptions): Promise<MessageBoxReturnValue>;
85 86
	showSaveDialog(options: SaveDialogOptions): Promise<SaveDialogReturnValue>;
	showOpenDialog(options: OpenDialogOptions): Promise<OpenDialogReturnValue>;
87

88 89 90 91 92
	pickFileFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
	pickFileAndOpen(options: INativeOpenDialogOptions): Promise<void>;
	pickFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
	pickWorkspaceAndOpen(options: INativeOpenDialogOptions): Promise<void>;

93 94
	// OS
	showItemInFolder(path: string): Promise<void>;
95 96
	setRepresentedFilename(path: string): Promise<void>;
	setDocumentEdited(edited: boolean): Promise<void>;
97
	openExternal(url: string): Promise<boolean>;
98
	moveItemToTrash(fullPath: string, deleteOnFail?: boolean): Promise<boolean>;
99

100
	isAdmin(): Promise<boolean>;
101
	writeElevated(source: URI, target: URI, options?: { overwriteReadonly?: boolean }): Promise<void>;
102 103 104 105

	getOSProperties(): Promise<IOSProperties>;
	getOSStatistics(): Promise<IOSStatistics>;
	getOSVirtualMachineHint(): Promise<number>;
106 107 108

	// Process
	killProcess(pid: number, code: string): Promise<void>;
109

110
	// Clipboard
111 112 113 114 115 116 117 118
	readClipboardText(type?: 'selection' | 'clipboard'): Promise<string>;
	writeClipboardText(text: string, type?: 'selection' | 'clipboard'): Promise<void>;
	readClipboardFindText(): Promise<string>;
	writeClipboardFindText(text: string): Promise<void>;
	writeClipboardBuffer(format: string, buffer: Uint8Array, type?: 'selection' | 'clipboard'): Promise<void>;
	readClipboardBuffer(format: string): Promise<Uint8Array>;
	hasClipboard(format: string, type?: 'selection' | 'clipboard'): Promise<boolean>;

119 120 121 122 123 124 125
	// macOS Touchbar
	newWindowTab(): Promise<void>;
	showPreviousWindowTab(): Promise<void>;
	showNextWindowTab(): Promise<void>;
	moveWindowTabToNewWindow(): Promise<void>;
	mergeAllWindowTabs(): Promise<void>;
	toggleWindowTabsBar(): Promise<void>;
126
	updateTouchBar(items: ISerializableCommandAction[][]): Promise<void>;
127

128
	// Lifecycle
129
	notifyReady(): Promise<void>
130
	relaunch(options?: { addArgs?: string[], removeArgs?: string[] }): Promise<void>;
B
Benjamin Pasero 已提交
131
	reload(options?: { disableExtensions?: boolean }): Promise<void>;
132
	closeWindow(): Promise<void>;
133
	closeWindowById(windowId: number): Promise<void>;
B
Benjamin Pasero 已提交
134
	quit(): Promise<void>;
135
	exit(code: number): Promise<void>;
136 137 138 139

	// Development
	openDevTools(options?: OpenDevToolsOptions): Promise<void>;
	toggleDevTools(): Promise<void>;
140
	toggleSharedProcessWindow(): Promise<void>;
141
	sendInputEvent(event: MouseInputEvent): Promise<void>;
142 143 144

	// Connectivity
	resolveProxy(url: string): Promise<string | undefined>;
145 146 147

	// Registry (windows only)
	windowsGetStringRegKey(hive: 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG', path: string, name: string): Promise<string | undefined>;
148 149 150 151 152 153 154

	// Credentials
	getPassword(service: string, account: string): Promise<string | null>;
	setPassword(service: string, account: string, password: string): Promise<void>;
	deletePassword(service: string, account: string): Promise<boolean>;
	findPassword(service: string): Promise<string | null>;
	findCredentials(service: string): Promise<Array<{ account: string, password: string }>>
155
}