Skip to content

Commit

Permalink
Add default override indicator
Browse files Browse the repository at this point in the history
Fixes #137943
  • Loading branch information
rzhao271 committed Jan 10, 2022
1 parent 942f56e commit 9392184
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -340,11 +340,13 @@
margin-right: 4px;
}

.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-ignored {
.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-ignored,
.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-default-overriden {
font-style: italic;
}

.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-ignored .codicon {
.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-ignored .codicon,
.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-title .setting-item-default-overriden .codicon {
vertical-align: text-top;
padding-left: 1px;
}
Expand Down
29 changes: 26 additions & 3 deletions src/vs/workbench/contrib/preferences/browser/settingsTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,7 @@ interface ISettingItemTemplate<T = any> extends IDisposableTemplate {
deprecationWarningElement: HTMLElement;
otherOverridesElement: HTMLElement;
syncIgnoredElement: HTMLElement;
defaultOverrideIndicator: HTMLElement;
toolbar: ToolBar;
elementDisposables: DisposableStore;
}
Expand Down Expand Up @@ -781,6 +782,14 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre
return syncIgnoredElement;
}

protected createDefaultOverrideIndicator(container: HTMLElement): HTMLElement {
const defaultOverrideIndicator = DOM.append(container, $('span.setting-item-default-overriden'));
const defaultOverrideLabel = new SimpleIconLabel(defaultOverrideIndicator);
defaultOverrideLabel.text = `($(alert) ${localize('defaultOverridenLabel', "Default overriden")})`;

return defaultOverrideIndicator;
}

protected renderCommonTemplate(tree: any, _container: HTMLElement, typeClass: string): ISettingItemTemplate {
_container.classList.add('setting-item');
_container.classList.add('setting-item-' + typeClass);
Expand All @@ -793,6 +802,7 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre
const labelElement = DOM.append(labelCategoryContainer, $('span.setting-item-label'));
const otherOverridesElement = DOM.append(titleElement, $('span.setting-item-overrides'));
const syncIgnoredElement = this.createSyncIgnoredElement(titleElement);
const defaultOverrideIndicator = this.createDefaultOverrideIndicator(titleElement);

const descriptionElement = DOM.append(container, $('.setting-item-description'));
const modifiedIndicatorElement = DOM.append(container, $('.setting-item-modified-indicator'));
Expand Down Expand Up @@ -820,6 +830,7 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre
deprecationWarningElement,
otherOverridesElement,
syncIgnoredElement,
defaultOverrideIndicator,
toolbar
};

Expand Down Expand Up @@ -943,12 +954,22 @@ export abstract class AbstractSettingRenderer extends Disposable implements ITre

this.renderValue(element, <ISettingItemTemplate>template, onChange);

const update = () => {
const defaultValueSource = element.setting.defaultValueSource;
const updateTitleElements = () => {
template.syncIgnoredElement.style.display = this.ignoredSettings.includes(element.setting.key) ? 'inline' : 'none';
template.defaultOverrideIndicator.style.display = 'none';
if (defaultValueSource) {
template.defaultOverrideIndicator.style.display = 'inline';
if (typeof defaultValueSource !== 'string' && defaultValueSource.id !== element.setting.extensionInfo?.id) {
template.defaultOverrideIndicator.title = localize('defaultOverridenDetails', "Default overriden by {0}", defaultValueSource.displayName ?? defaultValueSource.id);
} else if (typeof defaultValueSource === 'string') {
template.defaultOverrideIndicator.title = localize('defaultOverridenDetails', "Default overriden by {0}", defaultValueSource);
}
}
};
update();
updateTitleElements();
template.elementDisposables.add(this.onDidChangeIgnoredSettings(() => {
update();
updateTitleElements();
}));

this.updateSettingTabbable(element, template);
Expand Down Expand Up @@ -1809,6 +1830,7 @@ export class SettingBoolRenderer extends AbstractSettingRenderer implements ITre
const labelElement = DOM.append(titleElement, $('span.setting-item-label'));
const otherOverridesElement = DOM.append(titleElement, $('span.setting-item-overrides'));
const syncIgnoredElement = this.createSyncIgnoredElement(titleElement);
const defaultOverrideIndicator = this.createDefaultOverrideIndicator(titleElement);

const descriptionAndValueElement = DOM.append(container, $('.setting-item-value-description'));
const controlElement = DOM.append(descriptionAndValueElement, $('.setting-item-bool-control'));
Expand Down Expand Up @@ -1859,6 +1881,7 @@ export class SettingBoolRenderer extends AbstractSettingRenderer implements ITre
deprecationWarningElement,
otherOverridesElement,
syncIgnoredElement,
defaultOverrideIndicator,
toolbar
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ export interface ISetting {
enumItemLabels?: string[];
allKeysAreBoolean?: boolean;
editPresentation?: EditPresentationTypes;
defaultValueSource?: string | IExtensionInfo;
}

export interface IExtensionSetting extends ISetting {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { IIdentifiedSingleEditOperation, ITextModel } from 'vs/editor/common/mod
import { ITextEditorModel } from 'vs/editor/common/services/resolverService';
import * as nls from 'vs/nls';
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationPropertySchema, IConfigurationRegistry, IExtensionInfo, OVERRIDE_PROPERTY_REGEX } from 'vs/platform/configuration/common/configurationRegistry';
import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationPropertySchema, IConfigurationRegistry, IExtensionInfo, IRegisteredConfigurationPropertySchema, OVERRIDE_PROPERTY_REGEX } from 'vs/platform/configuration/common/configurationRegistry';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { Registry } from 'vs/platform/registry/common/platform';
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
Expand Down Expand Up @@ -669,6 +669,12 @@ export class DefaultSettings extends Disposable {
});
}

const registeredConfigurationProp = prop as IRegisteredConfigurationPropertySchema;
let defaultValueSource: string | IExtensionInfo | undefined;
if (registeredConfigurationProp && registeredConfigurationProp.defaultValueSource) {
defaultValueSource = registeredConfigurationProp.defaultValueSource;
}

result.push({
key,
value,
Expand Down Expand Up @@ -699,7 +705,8 @@ export class DefaultSettings extends Disposable {
enumItemLabels: prop.enumItemLabels,
allKeysAreBoolean,
editPresentation: prop.editPresentation,
order: prop.order
order: prop.order,
defaultValueSource
});
}
}
Expand Down

0 comments on commit 9392184

Please sign in to comment.