windows.ts 6.6 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  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 { TPromise } from 'vs/base/common/winjs.base';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
J
Joao Moreno 已提交
10
import Event from 'vs/base/common/event';
11
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
B
Benjamin Pasero 已提交
12 13
import { IProcessEnvironment } from 'vs/base/common/platform';
import { ParsedArgs } from 'vs/platform/environment/common/environment';
J
Joao Moreno 已提交
14 15 16 17 18 19 20

export const IWindowsService = createDecorator<IWindowsService>('windowsService');

export interface IWindowsService {

	_serviceBrand: any;

J
Joao Moreno 已提交
21
	onWindowOpen: Event<number>;
J
Joao Moreno 已提交
22 23
	onWindowFocus: Event<number>;

B
renames  
Benjamin Pasero 已提交
24 25 26
	pickFileFolderAndOpen(windowId: number, forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void>;
	pickFileAndOpen(windowId: number, forceNewWindow?: boolean, path?: string, data?: ITelemetryData): TPromise<void>;
	pickFolderAndOpen(windowId: number, forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void>;
27
	pickFolder(windowId: number, options?: { buttonLabel: string; title: string; }): TPromise<string[]>;
28
	reloadWindow(windowId: number): TPromise<void>;
J
Joao Moreno 已提交
29
	openDevTools(windowId: number): TPromise<void>;
J
Joao Moreno 已提交
30
	toggleDevTools(windowId: number): TPromise<void>;
J
Joao Moreno 已提交
31
	closeFolder(windowId: number): TPromise<void>;
J
Joao Moreno 已提交
32
	toggleFullScreen(windowId: number): TPromise<void>;
33
	setRepresentedFilename(windowId: number, fileName: string): TPromise<void>;
34
	addToRecentlyOpen(paths: { path: string, isFile?: boolean }[]): TPromise<void>;
B
Benjamin Pasero 已提交
35
	removeFromRecentlyOpen(paths: string[]): TPromise<void>;
C
22768  
Cristian 已提交
36
	clearRecentPathsList(): TPromise<void>;
J
Joao Moreno 已提交
37
	getRecentlyOpen(windowId: number): TPromise<{ files: string[]; folders: string[]; }>;
J
Joao Moreno 已提交
38
	focusWindow(windowId: number): TPromise<void>;
39
	closeWindow(windowId: number): TPromise<void>;
40
	isFocused(windowId: number): TPromise<boolean>;
41 42 43
	isMaximized(windowId: number): TPromise<boolean>;
	maximizeWindow(windowId: number): TPromise<void>;
	unmaximizeWindow(windowId: number): TPromise<void>;
44
	onWindowTitleDoubleClick(windowId: number): TPromise<void>;
J
Joao Moreno 已提交
45
	setDocumentEdited(windowId: number, flag: boolean): TPromise<void>;
46
	quit(): TPromise<void>;
J
Johannes Rieken 已提交
47
	relaunch(options: { addArgs?: string[], removeArgs?: string[] }): TPromise<void>;
48

49
	// Shared process
50
	whenSharedProcessReady(): TPromise<void>;
51 52
	toggleSharedProcess(): TPromise<void>;

J
Joao Moreno 已提交
53
	// Global methods
54
	openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise<void>;
J
Joao Moreno 已提交
55
	openNewWindow(): TPromise<void>;
J
Joao Moreno 已提交
56
	showWindow(windowId: number): TPromise<void>;
57
	getWindows(): TPromise<{ id: number; path: string; title: string; filename?: string; }[]>;
58
	getWindowCount(): TPromise<number>;
J
Joao Moreno 已提交
59
	log(severity: string, ...messages: string[]): TPromise<void>;
60
	// TODO@joao: what?
B
Benjamin Pasero 已提交
61
	closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void>;
J
Joao Moreno 已提交
62
	showItemInFolder(path: string): TPromise<void>;
J
Joao Moreno 已提交
63

64
	// This needs to be handled from browser process to prevent
J
Joao Moreno 已提交
65
	// foreground ordering issues on Windows
66
	openExternal(url: string): TPromise<boolean>;
67 68 69

	// TODO: this is a bit backwards
	startCrashReporter(config: Electron.CrashReporterStartOptions): TPromise<void>;
J
Joao Moreno 已提交
70 71 72 73 74 75 76 77
}

export const IWindowService = createDecorator<IWindowService>('windowService');

export interface IWindowService {

	_serviceBrand: any;

J
Joao Moreno 已提交
78
	getCurrentWindowId(): number;
B
renames  
Benjamin Pasero 已提交
79 80 81
	pickFileFolderAndOpen(forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void>;
	pickFileAndOpen(forceNewWindow?: boolean, path?: string, data?: ITelemetryData): TPromise<void>;
	pickFolderAndOpen(forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void>;
B
Benjamin Pasero 已提交
82
	pickFolder(options?: { buttonLabel: string; title: string; }): TPromise<string[]>;
83
	reloadWindow(): TPromise<void>;
J
Joao Moreno 已提交
84
	openDevTools(): TPromise<void>;
J
Joao Moreno 已提交
85
	toggleDevTools(): TPromise<void>;
J
Joao Moreno 已提交
86
	closeFolder(): TPromise<void>;
J
Joao Moreno 已提交
87
	toggleFullScreen(): TPromise<void>;
88
	setRepresentedFilename(fileName: string): TPromise<void>;
J
Joao Moreno 已提交
89
	getRecentlyOpen(): TPromise<{ files: string[]; folders: string[]; }>;
J
Joao Moreno 已提交
90
	focusWindow(): TPromise<void>;
91
	closeWindow(): TPromise<void>;
92
	isFocused(): TPromise<boolean>;
J
Joao Moreno 已提交
93
	setDocumentEdited(flag: boolean): TPromise<void>;
94 95 96
	isMaximized(): TPromise<boolean>;
	maximizeWindow(): TPromise<void>;
	unmaximizeWindow(): TPromise<void>;
97
	onWindowTitleDoubleClick(): TPromise<void>;
98 99
}

100 101
export type MenuBarVisibility = 'default' | 'visible' | 'toggle' | 'hidden';

102 103 104 105
export interface IWindowConfiguration {
	window: IWindowSettings;
}

106
export interface IWindowSettings {
107 108
	openFilesInNewWindow: 'on' | 'off' | 'default';
	openFoldersInNewWindow: 'on' | 'off' | 'default';
109 110
	restoreWindows: 'all' | 'folders' | 'one' | 'none';
	reopenFolders: 'all' | 'one' | 'none'; // TODO@Ben deprecated
111 112 113
	restoreFullscreen: boolean;
	zoomLevel: number;
	titleBarStyle: 'native' | 'custom';
114
	autoDetectHighContrast: boolean;
115
	menuBarVisibility: MenuBarVisibility;
116
	newWindowDimensions: 'default' | 'inherit' | 'maximized' | 'fullscreen';
117
	nativeTabs: boolean;
118
	enableMenuBarMnemonics: boolean;
119
	closeWhenEmpty: boolean;
J
Johannes Rieken 已提交
120
}
121

B
Benjamin Pasero 已提交
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
export enum OpenContext {

	// opening when running from the command line
	CLI,

	// macOS only: opening from the dock (also when opening files to a running instance from desktop)
	DOCK,

	// opening from the main application window
	MENU,

	// opening from a file or folder dialog
	DIALOG,

	// opening from the OS's UI
	DESKTOP,

	// opening through the API
	API
}

143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
export enum ReadyState {

	/**
	 * This window has not loaded any HTML yet
	 */
	NONE,

	/**
	 * This window is loading HTML
	 */
	LOADING,

	/**
	 * This window is navigating to another HTML
	 */
	NAVIGATING,

	/**
	 * This window is done loading HTML
	 */
	READY
}

B
Benjamin Pasero 已提交
166
export interface IPath {
167

B
Benjamin Pasero 已提交
168 169
	// the file path to open within a Code instance
	filePath?: string;
170

B
Benjamin Pasero 已提交
171 172
	// the line number in the file path to open
	lineNumber?: number;
173

B
Benjamin Pasero 已提交
174 175 176
	// the column number in the file path to open
	columnNumber?: number;
}
177

178 179 180 181 182 183 184
export interface IOpenFileRequest {
	filesToOpen?: IPath[];
	filesToCreate?: IPath[];
	filesToDiff?: IPath[];
}

export interface IWindowConfiguration extends ParsedArgs, IOpenFileRequest {
B
Benjamin Pasero 已提交
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
	appRoot: string;
	execPath: string;

	userEnv: IProcessEnvironment;

	isISOKeyboard?: boolean;

	zoomLevel?: number;
	fullscreen?: boolean;
	highContrast?: boolean;
	baseTheme?: string;
	backgroundColor?: string;
	accessibilitySupport?: boolean;

	isInitialStartup?: boolean;

	perfStartTime?: number;
	perfAppReady?: number;
	perfWindowLoadTime?: number;

	workspacePath?: string;

207
	backupPath?: string;
B
Benjamin Pasero 已提交
208 209

	nodeCachedDataDir: string;
210
}