提交 d51a2466 编写于 作者: S Sandeep Somavarapu

#31039 Reuse the settings editor in the active group

上级 4e2035d4
...@@ -172,13 +172,14 @@ export class PreferencesService extends Disposable implements IPreferencesServic ...@@ -172,13 +172,14 @@ export class PreferencesService extends Disposable implements IPreferencesServic
} }
openSettings(): TPromise<IEditor> { openSettings(): TPromise<IEditor> {
const resource = this.lastOpenedSettingsInput ? this.lastOpenedSettingsInput.master.getResource() : this.userSettingsResource; const editorInput = this.getActiveSettingsEditorInput() || this.lastOpenedSettingsInput;
const resource = editorInput ? editorInput.master.getResource() : this.userSettingsResource;
const target = this.getConfigurationTargetFromSettingsResource(resource); const target = this.getConfigurationTargetFromSettingsResource(resource);
return this.doOpenSettings(target, resource); return this.openOrSwitchSettings(target, resource);
} }
openGlobalSettings(options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> { openGlobalSettings(options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> {
return this.doOpenSettings(ConfigurationTarget.USER, this.userSettingsResource, options, position); return this.openOrSwitchSettings(ConfigurationTarget.USER, this.userSettingsResource, options, position);
} }
openWorkspaceSettings(options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> { openWorkspaceSettings(options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> {
...@@ -186,29 +187,19 @@ export class PreferencesService extends Disposable implements IPreferencesServic ...@@ -186,29 +187,19 @@ export class PreferencesService extends Disposable implements IPreferencesServic
this.notificationService.info(nls.localize('openFolderFirst', "Open a folder first to create workspace settings")); this.notificationService.info(nls.localize('openFolderFirst', "Open a folder first to create workspace settings"));
return TPromise.as(null); return TPromise.as(null);
} }
return this.doOpenSettings(ConfigurationTarget.WORKSPACE, this.workspaceSettingsResource, options, position); return this.openOrSwitchSettings(ConfigurationTarget.WORKSPACE, this.workspaceSettingsResource, options, position);
} }
openFolderSettings(folder: URI, options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> { openFolderSettings(folder: URI, options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> {
return this.doOpenSettings(ConfigurationTarget.WORKSPACE_FOLDER, this.getEditableSettingsURI(ConfigurationTarget.WORKSPACE_FOLDER, folder), options, position); return this.openOrSwitchSettings(ConfigurationTarget.WORKSPACE_FOLDER, this.getEditableSettingsURI(ConfigurationTarget.WORKSPACE_FOLDER, folder), options, position);
} }
switchSettings(target: ConfigurationTarget, resource: URI): TPromise<void> { switchSettings(target: ConfigurationTarget, resource: URI): TPromise<void> {
const activeEditor = this.editorService.getActiveEditor(); const activeEditor = this.editorService.getActiveEditor();
if (activeEditor && activeEditor.input instanceof PreferencesEditorInput) { if (activeEditor && activeEditor.input instanceof PreferencesEditorInput) {
return this.getOrCreateEditableSettingsEditorInput(target, this.getEditableSettingsURI(target, resource)) return this.doSwitchSettings(target, resource, activeEditor.input, activeEditor.position).then(() => null);
.then(toInput => {
const replaceWith = new PreferencesEditorInput(this.getPreferencesEditorInputName(target, resource), toInput.getDescription(), this.instantiationService.createInstance(DefaultPreferencesEditorInput, this.getDefaultSettingsResource(target)), toInput);
return this.editorService.replaceEditors([{
toReplace: activeEditor.input,
replaceWith
}], activeEditor.position).then(() => {
this.lastOpenedSettingsInput = replaceWith;
});
});
} else { } else {
this.doOpenSettings(target, resource); return this.doOpenSettings(target, resource).then(() => null);
return undefined;
} }
} }
...@@ -249,6 +240,16 @@ export class PreferencesService extends Disposable implements IPreferencesServic ...@@ -249,6 +240,16 @@ export class PreferencesService extends Disposable implements IPreferencesServic
}); });
} }
private openOrSwitchSettings(configurationTarget: ConfigurationTarget, resource: URI, options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> {
const activeGroup = this.editorGroupService.getStacksModel().activeGroup;
const positionToReplace = position !== void 0 ? position : activeGroup ? this.editorGroupService.getStacksModel().positionOfGroup(activeGroup) : EditorPosition.ONE;
const editorInput = this.getActiveSettingsEditorInput(positionToReplace);
if (editorInput && editorInput.master.getResource().fsPath !== resource.fsPath) {
return this.doSwitchSettings(configurationTarget, resource, editorInput, positionToReplace);
}
return this.doOpenSettings(configurationTarget, resource, options, position);
}
private doOpenSettings(configurationTarget: ConfigurationTarget, resource: URI, options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> { private doOpenSettings(configurationTarget: ConfigurationTarget, resource: URI, options?: IEditorOptions, position?: EditorPosition): TPromise<IEditor> {
const openDefaultSettings = !!this.configurationService.getValue(DEFAULT_SETTINGS_EDITOR_SETTING); const openDefaultSettings = !!this.configurationService.getValue(DEFAULT_SETTINGS_EDITOR_SETTING);
return this.getOrCreateEditableSettingsEditorInput(configurationTarget, resource) return this.getOrCreateEditableSettingsEditorInput(configurationTarget, resource)
...@@ -269,6 +270,26 @@ export class PreferencesService extends Disposable implements IPreferencesServic ...@@ -269,6 +270,26 @@ export class PreferencesService extends Disposable implements IPreferencesServic
}); });
} }
private doSwitchSettings(target: ConfigurationTarget, resource: URI, input: PreferencesEditorInput, position?: EditorPosition): TPromise<IEditor> {
return this.getOrCreateEditableSettingsEditorInput(target, this.getEditableSettingsURI(target, resource))
.then(toInput => {
const replaceWith = new PreferencesEditorInput(this.getPreferencesEditorInputName(target, resource), toInput.getDescription(), this.instantiationService.createInstance(DefaultPreferencesEditorInput, this.getDefaultSettingsResource(target)), toInput);
return this.editorService.replaceEditors([{
toReplace: input,
replaceWith
}], position).then(editors => {
this.lastOpenedSettingsInput = replaceWith;
return editors[0];
});
});
}
private getActiveSettingsEditorInput(position?: EditorPosition): PreferencesEditorInput {
const stacksModel = this.editorGroupService.getStacksModel();
const group = position !== void 0 ? stacksModel.groupAt(position) : stacksModel.activeGroup;
return group && <PreferencesEditorInput>group.getEditors().filter(e => e instanceof PreferencesEditorInput)[0];
}
private getConfigurationTargetFromSettingsResource(resource: URI): ConfigurationTarget { private getConfigurationTargetFromSettingsResource(resource: URI): ConfigurationTarget {
if (this.userSettingsResource.toString() === resource.toString()) { if (this.userSettingsResource.toString() === resource.toString()) {
return ConfigurationTarget.USER; return ConfigurationTarget.USER;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册