diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index c1c90dec0137add911cff200f234c7edbe9c9c99..7c0a1748062ddb63a7721b89c570f70bcd5319ce 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -23,8 +23,8 @@ import { BaseTextEditor } from 'vs/workbench/browser/parts/editor/textEditor'; import { CodeEditor } from 'vs/editor/browser/codeEditor'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { - IPreferencesService, ISettingsGroup, ISetting, IFilterResult, CONTEXT_DEFAULT_SETTINGS_EDITOR, - DEFAULT_EDITOR_COMMAND_COLLAPSE_ALL, DEFAULT_EDITOR_COMMAND_FOCUS_SEARCH, ISettingsEditorModel + IPreferencesService, ISettingsGroup, ISetting, IFilterResult, IPreferencesEditorModel, + CONTEXT_DEFAULT_SETTINGS_EDITOR, DEFAULT_EDITOR_COMMAND_COLLAPSE_ALL, DEFAULT_EDITOR_COMMAND_FOCUS_SEARCH, ISettingsEditorModel } from 'vs/workbench/parts/preferences/common/preferences'; import { SettingsEditorModel, DefaultSettingsEditorModel } from 'vs/workbench/parts/preferences/common/preferencesModels'; import { editorContribution } from 'vs/editor/browser/editorBrowserExtensions'; @@ -474,7 +474,7 @@ export class DefaultPreferencesEditor extends BaseTextEditor { class DefaultPreferencesCodeEditor extends CodeEditor { - private _settingsModel: SettingsEditorModel; + public settingsModel: IPreferencesEditorModel; protected _getContributions(): IEditorContributionCtor[] { let contributions = super._getContributions(); @@ -485,12 +485,12 @@ class DefaultPreferencesCodeEditor extends CodeEditor { } setModels(model: editorCommon.IModel, settingsModel: SettingsEditorModel): void { - this._settingsModel = settingsModel; - return super.setModel(model); - } - - get settingsModel(): SettingsEditorModel { - return this._settingsModel; + this.settingsModel = settingsModel; + super.setModel(model); + const renderer = this.getContribution(DefaultSettingsEditorContribution.ID).getPreferencesRenderer(); + if (renderer) { + renderer.associatedPreferencesModel = this.settingsModel; + } } } @@ -548,7 +548,7 @@ export class DefaultSettingsEditorContribution extends PreferencesEditorContribu return this.preferencesService.resolvePreferencesEditorModel(this.editor.getModel().uri) .then(editorModel => { if (editorModel instanceof DefaultSettingsEditorModel) { - return this.instantiationService.createInstance(DefaultSettingsRenderer, this.editor, editorModel, () => (this.editor).settingsModel); + return this.instantiationService.createInstance(DefaultSettingsRenderer, this.editor, editorModel, (this.editor).settingsModel); } return null; }); diff --git a/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts b/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts index 1d7d235ed91d62a50967201d1d5819dd230c61ba..de1fd699fcec8bba441ff13a5c6a0c8848698e5b 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts @@ -34,11 +34,14 @@ import { IMessageService, Severity } from 'vs/platform/message/common/message'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; export interface IPreferencesRenderer extends IDisposable { + preferencesModel: IPreferencesEditorModel; + associatedPreferencesModel: IPreferencesEditorModel; iterator: IIterator; + onFocusPreference: Event; onClearFocusPreference: Event; onUpdatePreference: Event<{ key: string, value: any, source: T }>; - preferencesModel: IPreferencesEditorModel; + render(): void; updatePreference(key: string, value: any, source: T): void; filterPreferences(filterResult: IFilterResult): void; @@ -65,7 +68,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend private filterResult: IFilterResult; - constructor(protected editor: ICodeEditor, public readonly preferencesModel: SettingsEditorModel, private defaultPreferencesModel: IPreferencesEditorModel, + constructor(protected editor: ICodeEditor, public readonly preferencesModel: SettingsEditorModel, public readonly associatedPreferencesModel: IPreferencesEditorModel, @IPreferencesService protected preferencesService: IPreferencesService, @ITelemetryService private telemetryService: ITelemetryService, @IConfigurationEditingService private configurationEditingService: IConfigurationEditingService, @@ -75,7 +78,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend super(); this.settingHighlighter = this._register(instantiationService.createInstance(SettingHighlighter, editor, this._onFocusPreference, this._onClearFocusPreference)); this.highlightPreferencesRenderer = this._register(instantiationService.createInstance(HighlightPreferencesRenderer, editor)); - this.editSettingActionRenderer = this._register(this.instantiationService.createInstance(EditSettingRenderer, this.editor, this.preferencesModel, () => this.defaultPreferencesModel, this.settingHighlighter)); + this.editSettingActionRenderer = this._register(this.instantiationService.createInstance(EditSettingRenderer, this.editor, this.preferencesModel, this.settingHighlighter)); this._register(this.editSettingActionRenderer.onUpdateSetting(({key, value, source}) => this.updatePreference(key, value, source))); this._register(this.editor.getModel().onDidChangeContent(() => this.modelChangeDelayer.trigger(() => this.onModelChanged()))); } @@ -85,7 +88,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend } public render(): void { - this.editSettingActionRenderer.render(this.preferencesModel.settingsGroups); + this.editSettingActionRenderer.render(this.preferencesModel.settingsGroups, this.associatedPreferencesModel); if (this.filterResult) { this.filterPreferences(this.filterResult); } @@ -134,7 +137,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend this.filterResult = filterResult; this.highlightPreferencesRenderer.render([]); this.settingHighlighter.clear(true); - if (this.defaultPreferencesModel && filterResult) { + if (this.associatedPreferencesModel && filterResult) { const settings = distinct(filterResult.filteredGroups.reduce((settings: ISetting[], settingsGroup: ISettingsGroup) => { for (const section of settingsGroup.sections) { for (const setting of section.settings) { @@ -168,14 +171,14 @@ export class WorkspaceSettingsRenderer extends UserSettingsRenderer implements I private untrustedSettingRenderer: UnTrustedWorkspaceSettingsRenderer; - constructor(editor: ICodeEditor, preferencesModel: SettingsEditorModel, defaultPreferencesModel: IPreferencesEditorModel, + constructor(editor: ICodeEditor, preferencesModel: SettingsEditorModel, associatedPreferencesModel: IPreferencesEditorModel, @IPreferencesService preferencesService: IPreferencesService, @ITelemetryService telemetryService: ITelemetryService, @IConfigurationEditingService configurationEditingService: IConfigurationEditingService, @IMessageService messageService: IMessageService, @IInstantiationService instantiationService: IInstantiationService ) { - super(editor, preferencesModel, defaultPreferencesModel, preferencesService, telemetryService, configurationEditingService, messageService, instantiationService); + super(editor, preferencesModel, associatedPreferencesModel, preferencesService, telemetryService, configurationEditingService, messageService, instantiationService); this.untrustedSettingRenderer = this._register(instantiationService.createInstance(UnTrustedWorkspaceSettingsRenderer, editor, preferencesModel)); } @@ -205,7 +208,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR private _onClearFocusPreference: Emitter = new Emitter(); public readonly onClearFocusPreference: Event = this._onClearFocusPreference.event; - constructor(protected editor: ICodeEditor, public readonly preferencesModel: DefaultSettingsEditorModel, otherSettingsModel: () => IPreferencesEditorModel, + constructor(protected editor: ICodeEditor, public readonly preferencesModel: DefaultSettingsEditorModel, private _associatedPreferencesModel: IPreferencesEditorModel, @IPreferencesService protected preferencesService: IPreferencesService, @IContextKeyService contextKeyService: IContextKeyService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, @@ -217,7 +220,7 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR this.settingsGroupTitleRenderer = this._register(instantiationService.createInstance(SettingsGroupTitleRenderer, editor)); this.filteredMatchesRenderer = this._register(instantiationService.createInstance(FilteredMatchesRenderer, editor)); this.filteredSettingsNavigationRenderer = this._register(instantiationService.createInstance(FilteredSettingsNavigationRenderer, editor, this.settingHighlighter)); - this.editSettingActionRenderer = this._register(instantiationService.createInstance(EditSettingRenderer, editor, preferencesModel, otherSettingsModel, this.settingHighlighter)); + this.editSettingActionRenderer = this._register(instantiationService.createInstance(EditSettingRenderer, editor, preferencesModel, this.settingHighlighter)); this._register(this.editSettingActionRenderer.onUpdateSetting(e => this._onUpdatePreference.fire(e))); const paranthesisHidingRenderer = this._register(instantiationService.createInstance(StaticContentHidingRenderer, editor, preferencesModel.settingsGroups)); this.hiddenAreasRenderer = this._register(instantiationService.createInstance(HiddenAreasRenderer, editor, [this.settingsGroupTitleRenderer, this.filteredMatchesRenderer, paranthesisHidingRenderer])); @@ -229,10 +232,19 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR return this.filteredSettingsNavigationRenderer; } + public get associatedPreferencesModel(): IPreferencesEditorModel { + return this._associatedPreferencesModel; + } + + public set associatedPreferencesModel(associatedPreferencesModel: IPreferencesEditorModel) { + this._associatedPreferencesModel = associatedPreferencesModel; + this.editSettingActionRenderer.associatedPreferencesModel = associatedPreferencesModel; + } + public render() { this.defaultSettingsEditorContextKey.set(true); this.settingsGroupTitleRenderer.render(this.preferencesModel.settingsGroups); - this.editSettingActionRenderer.render(this.preferencesModel.settingsGroups); + this.editSettingActionRenderer.render(this.preferencesModel.settingsGroups, this._associatedPreferencesModel); this.hiddenAreasRenderer.render(); this.filteredSettingsNavigationRenderer.render([]); this.settingsGroupTitleRenderer.showGroup(1); @@ -245,10 +257,12 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR this.filteredMatchesRenderer.render(null); this.settingsGroupTitleRenderer.render(this.preferencesModel.settingsGroups); this.settingsGroupTitleRenderer.showGroup(1); + this.editSettingActionRenderer.render(this.preferencesModel.settingsGroups, this._associatedPreferencesModel); } else { this.filteredMatchesRenderer.render(filterResult); this.settingsGroupTitleRenderer.render(filterResult.filteredGroups); this.filteredSettingsNavigationRenderer.render(filterResult.filteredGroups); + this.editSettingActionRenderer.render(filterResult.filteredGroups, this._associatedPreferencesModel); } this.hiddenAreasRenderer.render(); } @@ -597,13 +611,13 @@ class EditSettingRenderer extends Disposable { private editPreferenceWidgetForMouseMove: EditPreferenceWidget; private settingsGroups: ISettingsGroup[]; + public associatedPreferencesModel: IPreferencesEditorModel; private toggleEditPreferencesForMouseMoveDelayer: Delayer; private _onUpdateSetting: Emitter<{ key: string, value: any, source: ISetting }> = new Emitter<{ key: string, value: any, source: ISetting }>(); public readonly onUpdateSetting: Event<{ key: string, value: any, source: ISetting }> = this._onUpdateSetting.event; constructor(private editor: ICodeEditor, private masterSettingsModel: ISettingsEditorModel, - private otherSettingsModel: () => ISettingsEditorModel, private settingHighlighter: SettingHighlighter, @IPreferencesService private preferencesService: IPreferencesService, @IInstantiationService private instantiationService: IInstantiationService, @@ -626,10 +640,11 @@ class EditSettingRenderer extends Disposable { this._register(this.editor.onDidChangeConfiguration(() => this.onConfigurationChanged())); } - public render(settingsGroups: ISettingsGroup[]): void { + public render(settingsGroups: ISettingsGroup[], associatedPreferencesModel: IPreferencesEditorModel): void { this.editPreferenceWidgetForCusorPosition.hide(); this.editPreferenceWidgetForMouseMove.hide(); this.settingsGroups = settingsGroups; + this.associatedPreferencesModel = associatedPreferencesModel; const settings = this.getSettings(this.editor.getPosition().lineNumber); if (settings.length) { @@ -742,7 +757,7 @@ class EditSettingRenderer extends Disposable { private onEditSettingClicked(editPreferenceWidget: EditPreferenceWidget): void { const elementPosition = DOM.getDomNodePagePosition(editPreferenceWidget.getDomNode()); const anchor = { x: elementPosition.left + elementPosition.width, y: elementPosition.top + elementPosition.height + 10 }; - const actions = this.getSettingsAtLineNumber(editPreferenceWidget.getLine()).length === 1 ? this.getActions(editPreferenceWidget.preferences[0], this.getConfigurationsMap()[editPreferenceWidget.preferences[0].key]) + const actions = this.getSettings(editPreferenceWidget.getLine()).length === 1 ? this.getActions(editPreferenceWidget.preferences[0], this.getConfigurationsMap()[editPreferenceWidget.preferences[0].key]) : editPreferenceWidget.preferences.map(setting => new ContextSubMenu(setting.key, this.getActions(setting, this.getConfigurationsMap()[setting.key]))); this.contextMenuService.showContextMenu({ getAnchor: () => anchor, @@ -782,7 +797,7 @@ class EditSettingRenderer extends Disposable { } private getDefaultActions(setting: ISetting): IAction[] { - const settingInOtherModel = this.otherSettingsModel().getPreference(setting.key); + const settingInOtherModel = this.associatedPreferencesModel.getPreference(setting.key); if (this.isDefaultSettings()) { return [{ id: 'setDefaultValue',