From 5e5fdffcc7f508409c106adbd8fa33df32b0d3c0 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Tue, 3 Mar 2020 17:25:58 -0800 Subject: [PATCH] Add tooltip to settings editor tabs --- .../configuration/common/configuration.ts | 2 ++ .../preferences/browser/preferencesWidgets.ts | 18 +++++++++++------- .../browser/configurationService.ts | 19 ++++++++++++++++++- .../common/configurationEditingService.ts | 8 ++++---- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 16bf8c384f9..a53fb3acb14 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -123,6 +123,8 @@ export interface IConfigurationService { workspaceFolder: string[]; memory?: string[]; }; + + getConfigurationFileResource(target: ConfigurationTarget, resource: URI | null | undefined): URI | null; } export interface IConfigurationModel { diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts index 45ab2bfe9a7..c7f48620f65 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts @@ -20,7 +20,7 @@ import { ICursorPositionChangedEvent } from 'vs/editor/common/controller/cursorE import { Position } from 'vs/editor/common/core/position'; import { IModelDeltaDecoration, TrackedRangeStickiness } from 'vs/editor/common/model'; import { localize } from 'vs/nls'; -import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; +import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -310,7 +310,8 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { constructor( action: IAction, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, - @IContextMenuService private readonly contextMenuService: IContextMenuService + @IContextMenuService private readonly contextMenuService: IContextMenuService, + @IConfigurationService private readonly configurationService: IConfigurationService, ) { super(null, action); const workspace = this.contextService.getWorkspace(); @@ -407,7 +408,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { const workspace = this.contextService.getWorkspace(); if (this._folder) { this.labelElement.textContent = this._folder.name; - this.anchorElement.title = this._folder.name; + this.anchorElement.title = this.configurationService.getConfigurationFileResource(ConfigurationTarget.WORKSPACE_FOLDER, this._folder.uri)?.fsPath || ''; const detailsText = this.labelWithCount(this._action.label, total); this.detailsElement.textContent = detailsText; DOM.toggleClass(this.dropDownElement, 'hide', workspace.folders.length === 1 || !this._action.checked); @@ -418,6 +419,7 @@ export class FolderSettingsActionViewItem extends BaseActionViewItem { this.anchorElement.title = this._action.label; DOM.removeClass(this.dropDownElement, 'hide'); } + DOM.toggleClass(this.anchorElement, 'checked', this._action.checked); DOM.toggleClass(this.container, 'disabled', !this._action.enabled); } @@ -487,7 +489,8 @@ export class SettingsTargetsWidget extends Widget { @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IInstantiationService private readonly instantiationService: IInstantiationService, @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, - @ILabelService private readonly labelService: ILabelService + @ILabelService private readonly labelService: ILabelService, + @IConfigurationService private readonly configurationService: IConfigurationService, ) { super(); this.options = options || {}; @@ -506,17 +509,16 @@ export class SettingsTargetsWidget extends Widget { })); this.userLocalSettings = new Action('userSettings', localize('userSettings', "User"), '.settings-tab', true, () => this.updateTarget(ConfigurationTarget.USER_LOCAL)); - this.userLocalSettings.tooltip = this.userLocalSettings.label; + this.userLocalSettings.tooltip = this.configurationService.getConfigurationFileResource(ConfigurationTarget.USER_LOCAL, undefined)?.fsPath || ''; const remoteAuthority = this.environmentService.configuration.remoteAuthority; const hostLabel = remoteAuthority && this.labelService.getHostLabel(REMOTE_HOST_SCHEME, remoteAuthority); const remoteSettingsLabel = localize('userSettingsRemote', "Remote") + (hostLabel ? ` [${hostLabel}]` : ''); this.userRemoteSettings = new Action('userSettingsRemote', remoteSettingsLabel, '.settings-tab', true, () => this.updateTarget(ConfigurationTarget.USER_REMOTE)); - this.userRemoteSettings.tooltip = this.userRemoteSettings.label; + this.userRemoteSettings.tooltip = this.configurationService.getConfigurationFileResource(ConfigurationTarget.USER_REMOTE, undefined)?.fsPath || ''; this.workspaceSettings = new Action('workspaceSettings', localize('workspaceSettings', "Workspace"), '.settings-tab', false, () => this.updateTarget(ConfigurationTarget.WORKSPACE)); - this.workspaceSettings.tooltip = this.workspaceSettings.label; const folderSettingsAction = new Action('folderSettings', localize('folderSettings', "Folder"), '.settings-tab', false, (folder: IWorkspaceFolder | null) => this.updateTarget(folder ? folder.uri : ConfigurationTarget.USER_LOCAL)); @@ -591,6 +593,8 @@ export class SettingsTargetsWidget extends Widget { this.userRemoteSettings.enabled = !!(this.options.enableRemoteSettings && this.environmentService.configuration.remoteAuthority); this.workspaceSettings.enabled = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY; this.folderSettings.getAction().enabled = this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE && this.contextService.getWorkspace().folders.length > 0; + + this.workspaceSettings.tooltip = this.configurationService.getConfigurationFileResource(ConfigurationTarget.WORKSPACE, undefined)?.fsPath || ''; } } diff --git a/src/vs/workbench/services/configuration/browser/configurationService.ts b/src/vs/workbench/services/configuration/browser/configurationService.ts index 4d2315b2e2d..71cb31b7de9 100644 --- a/src/vs/workbench/services/configuration/browser/configurationService.ts +++ b/src/vs/workbench/services/configuration/browser/configurationService.ts @@ -14,7 +14,7 @@ import { IWorkspaceContextService, Workspace, WorkbenchState, IWorkspaceFolder, import { ConfigurationModel, DefaultConfigurationModel, ConfigurationChangeEvent, AllKeysConfigurationChangeEvent, mergeChanges } from 'vs/platform/configuration/common/configurationModels'; import { IConfigurationChangeEvent, ConfigurationTarget, IConfigurationOverrides, keyFromOverrideIdentifier, isConfigurationOverrides, IConfigurationData, IConfigurationService, IConfigurationValue, IConfigurationChange } from 'vs/platform/configuration/common/configuration'; import { Configuration } from 'vs/workbench/services/configuration/common/configurationModels'; -import { FOLDER_CONFIG_FOLDER_NAME, defaultSettingsSchemaId, userSettingsSchemaId, workspaceSettingsSchemaId, folderSettingsSchemaId, IConfigurationCache, machineSettingsSchemaId, LOCAL_MACHINE_SCOPES } from 'vs/workbench/services/configuration/common/configuration'; +import { FOLDER_CONFIG_FOLDER_NAME, defaultSettingsSchemaId, userSettingsSchemaId, workspaceSettingsSchemaId, folderSettingsSchemaId, IConfigurationCache, machineSettingsSchemaId, LOCAL_MACHINE_SCOPES, FOLDER_SETTINGS_PATH } from 'vs/workbench/services/configuration/common/configuration'; import { Registry } from 'vs/platform/registry/common/platform'; import { IConfigurationRegistry, Extensions, allSettings, windowSettings, resourceSettings, applicationSettings, machineSettings, machineOverridableSettings } from 'vs/platform/configuration/common/configurationRegistry'; import { IWorkspaceIdentifier, isWorkspaceIdentifier, IStoredWorkspaceFolder, isStoredWorkspaceFolder, IWorkspaceFolderCreationData, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IWorkspaceInitializationPayload, isSingleFolderWorkspaceInitializationPayload, ISingleFolderWorkspaceInitializationPayload, IEmptyWorkspaceInitializationPayload, useSlashForPath, getStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; @@ -310,6 +310,23 @@ export class WorkspaceService extends Disposable implements IConfigurationServic } } + public getConfigurationFileResource(target: ConfigurationTarget, resource: URI | null | undefined): URI | null { + let editableTarget: EditableConfigurationTarget; + if (target === ConfigurationTarget.USER || target === ConfigurationTarget.USER_LOCAL) { + editableTarget = EditableConfigurationTarget.USER_LOCAL; + } else if (target === ConfigurationTarget.USER_REMOTE) { + editableTarget = EditableConfigurationTarget.USER_REMOTE; + } else if (target === ConfigurationTarget.WORKSPACE) { + editableTarget = EditableConfigurationTarget.WORKSPACE; + } else if (target === ConfigurationTarget.WORKSPACE_FOLDER) { + editableTarget = EditableConfigurationTarget.WORKSPACE_FOLDER; + } else { + return null; + } + + return this.configurationEditingService?.getConfigurationFileResource(editableTarget, FOLDER_SETTINGS_PATH, resource); + } + private createWorkspace(arg: IWorkspaceInitializationPayload): Promise { if (isWorkspaceIdentifier(arg)) { return this.createMultiFolderWorkspace(arg); diff --git a/src/vs/workbench/services/configuration/common/configurationEditingService.ts b/src/vs/workbench/services/configuration/common/configurationEditingService.ts index 573b4f0f546..e908891aa17 100644 --- a/src/vs/workbench/services/configuration/common/configurationEditingService.ts +++ b/src/vs/workbench/services/configuration/common/configurationEditingService.ts @@ -543,7 +543,7 @@ export class ConfigurationEditingService { const standaloneConfigurationMap = target === EditableConfigurationTarget.USER_LOCAL ? USER_STANDALONE_CONFIGURATIONS : WORKSPACE_STANDALONE_CONFIGURATIONS; const standaloneConfigurationKeys = Object.keys(standaloneConfigurationMap); for (const key of standaloneConfigurationKeys) { - const resource = this.getConfigurationFileResource(target, config, standaloneConfigurationMap[key], overrides.resource); + const resource = this.getConfigurationFileResource(target, standaloneConfigurationMap[key], overrides.resource); // Check for prefix if (config.key === key) { @@ -563,10 +563,10 @@ export class ConfigurationEditingService { let key = config.key; let jsonPath = overrides.overrideIdentifier ? [keyFromOverrideIdentifier(overrides.overrideIdentifier), key] : [key]; if (target === EditableConfigurationTarget.USER_LOCAL || target === EditableConfigurationTarget.USER_REMOTE) { - return { key, jsonPath, value: config.value, resource: withNullAsUndefined(this.getConfigurationFileResource(target, config, '', null)), target }; + return { key, jsonPath, value: config.value, resource: withNullAsUndefined(this.getConfigurationFileResource(target, '', null)), target }; } - const resource = this.getConfigurationFileResource(target, config, FOLDER_SETTINGS_PATH, overrides.resource); + const resource = this.getConfigurationFileResource(target, FOLDER_SETTINGS_PATH, overrides.resource); if (this.isWorkspaceConfigurationResource(resource)) { jsonPath = ['settings', ...jsonPath]; } @@ -578,7 +578,7 @@ export class ConfigurationEditingService { return !!(workspace.configuration && resource && workspace.configuration.fsPath === resource.fsPath); } - private getConfigurationFileResource(target: EditableConfigurationTarget, config: IConfigurationValue, relativePath: string, resource: URI | null | undefined): URI | null { + public getConfigurationFileResource(target: EditableConfigurationTarget, relativePath: string, resource: URI | null | undefined): URI | null { if (target === EditableConfigurationTarget.USER_LOCAL) { if (relativePath) { return resources.joinPath(resources.dirname(this.environmentService.settingsResource), relativePath); -- GitLab